当前位置: 首页 > news >正文

网站的风格与布局设计永修中铁三局招聘

网站的风格与布局设计,永修中铁三局招聘,微信上的网站,html手机网站概述#xff1a;随着嵌入式系统处理能力的不断提升#xff0c;并行编程在其中的应用愈发广泛。本文深入探讨了多种专门为嵌入式设计的并行编程模型#xff0c;包括任务队列模型、消息传递模型、数据并行模型、异构多核并行模型、实时任务调度模型以及函数式并行模型。详细阐… 概述随着嵌入式系统处理能力的不断提升并行编程在其中的应用愈发广泛。本文深入探讨了多种专门为嵌入式设计的并行编程模型包括任务队列模型、消息传递模型、数据并行模型、异构多核并行模型、实时任务调度模型以及函数式并行模型。详细阐述了各模型的原理、优缺点、适用场景并提供了相应的 C 源代码示例及典型开源库介绍旨在为嵌入式系统开发人员在选择和应用并行编程模型时提供全面的参考与指导助力其更高效地开发嵌入式并行应用程序。 一、任务队列模型 任务队列模型将需要执行的任务放入一个队列中由多个线程从队列中获取任务并执行。这种模型可以有效地管理任务的分配和执行顺序避免了线程之间的直接依赖和复杂的同步问题。 一优点 能灵活地分配任务可根据系统的负载动态调整任务的执行顺序和分配方式。当有新任务加入队列时空闲线程可以及时获取并执行提高了系统的资源利用率和响应速度。 二缺点 需要额外的内存来存储任务队列和任务的相关信息增加了一定的内存开销。如果任务之间存在依赖关系需要在任务的设计和调度中进行额外的处理以确保任务的正确执行顺序。 三适用场景 适用于处理多个相对独立的任务如传感器数据的采集和处理。不同的传感器数据采集任务可以作为独立的任务放入队列由多个线程并行处理提高数据采集和处理的效率。 四C 源代码示例 #include iostream #include queue #include thread #include mutex #include condition_variablestd::queueint task_queue; std::mutex mutex_queue; std::condition_variable cond_var;void fibonacci_task(int n) {if (n 0) {std::cout 0 ;return;} else if (n 1) {std::cout 1 ;return;} else {int a 0, b 1, temp;for (int i 0; i n; i) {std::cout a ;temp a b;a b;b temp;}std::cout std::endl;} }void worker_thread() {while (true) {std::unique_lockstd::mutex lock(mutex_queue);cond_var.wait(lock, []{ return!task_queue.empty(); });int task task_queue.front();task_queue.pop();lock.unlock();fibonacci_task(task);} }int main() {const int num_tasks 10;std::thread threads[num_tasks];// 创建并启动工作线程for (int i 0; i num_tasks; i) {threads[i] std::thread(worker_thread);}// 将任务放入队列for (int i 0; i num_tasks; i) {std::unique_lockstd::mutex lock(mutex_queue);task_queue.push(i);lock.unlock();cond_var.notify_one();}// 等待所有线程完成任务for (int i 0; i num_tasks; i) {threads[i].join();}return 0; }五典型开源库 cppq 是一个简单、可靠且高效的 C17 分布式任务队列库它提供了方便的任务调度和执行功能适用于各种需要异步处理任务的场景。 二、消息传递模型 消息传递模型中线程之间通过传递消息来进行通信和协调而不是直接共享内存。每个线程都有自己的消息队列用于接收和发送消息。 一优点 避免了共享内存带来的并发访问问题如数据竞争和死锁等提高了系统的稳定性和可靠性。线程之间的通信更加明确和可控便于进行系统的调试和维护。 二缺点 消息传递的开销相对较大包括消息的复制和传递过程中的系统调用等可能会影响系统的性能。如果消息的处理不及时可能会导致消息队列的积压影响系统的实时性。 三适用场景 适用于对可靠性要求较高的嵌入式系统如航空航天、工业控制等领域。在这些系统中线程之间的通信需要严格的控制和管理以确保系统的安全和稳定运行。 四C 源代码示例 #include cstdlib #include iostream #include mpl/mpl.hppint main() {// 获取通信器 world 的引用const mpl::communicator comm_world{mpl::environment::comm_world()};// 每个进程打印包含处理器名称、在通信器中的 rank 以及通信器大小的消息std::cout Hello World! I am running on \ mpl::environment::processor_name() \. My rank is comm_world.rank() out of comm_world.size() processes.\n;// 如果有两个或更多进程则从进程 0 向进程 1 发送消息if (comm_world.size() 2) {if (comm_world.rank() 0) {std::string message{Hello World!};comm_world.send(message, 1); // 向 rank 1 发送消息} else if (comm_world.rank() 1) {std::string message;comm_world.recv(message, 0); // 从 rank 0 接收消息std::cout Got: \ message \\n;}}return EXIT_SUCCESS; }五典型开源库 MPL 是一个基于 MPI 标准的 C17 消息传递库它为高性能计算提供了现代 C 接口具有类型安全、易于使用等特点适用于大规模模拟、并行算法研究等高性能计算场景。 三、数据并行模型 数据并行模型将数据分成多个部分每个部分由一个独立的处理单元进行处理处理单元之间可以并行执行从而提高数据处理的效率。 一优点 能充分利用硬件的并行处理能力大大提高数据处理的速度。对于处理大规模数据的嵌入式系统如视频监控、图像处理等数据并行模型可以显著提高系统的性能。 二缺点 对数据的划分和分配要求较高如果数据划分不合理可能会导致处理单元之间的负载不均衡影响系统的性能。同时数据并行模型需要处理单元之间进行一定的同步和通信以确保数据处理的正确性。 三适用场景 适用于需要对大量数据进行相同或相似处理的嵌入式系统如智能交通系统中的车牌识别、医疗设备中的图像诊断等。 四C 源代码示例 #include iostream #include CL/sycl.hppint main() {const int size 1024;int a[size], b[size], c[size];// 初始化数组for (int i 0; i size; i) {a[i] i;b[i] i * 2;}{// 创建 SYCL 队列cl::sycl::queue q(cl::sycl::default_selector{});// 在设备上分配内存cl::sycl::bufferint, 1 buffer_a(a, cl::sycl::range1(size));cl::sycl::bufferint, 1 buffer_b(b, cl::sycl::range1(size));cl::sycl::bufferint, 1 buffer_c(c, cl::sycl::range1(size));// 提交并行任务q.submit([](cl::sycl::handler h) {auto accessor_a buffer_a.get_accesscl::sycl::access::mode::read(h);auto accessor_b buffer_b.get_accesscl::sycl::access::mode::read(h);auto accessor_c buffer_c.get_accesscl::sycl::access::mode::write(h);h.parallel_forclass add_vectors(cl::sycl::range1(size), [](cl::sycl::id1 idx) {accessor_c[idx] accessor_a[idx] accessor_b[idx];});});// 等待任务完成q.wait();}// 检查结果for (int i 0; i size; i) {if (c[i]! a[i] b[i]) {std::cerr Error at index i std::endl;return -1;}}std::cout Arrays added successfully. std::endl;return 0; }五典型开源库 DPC 是一个基于 C 和 SYCL 的异构并行编程模型它允许开发者使用标准 C 编写跨不同架构的并行代码包括 CPU、GPU 和 FPGA 等适用于需要在异构硬件平台上进行高性能计算的场景。 四、异构多核并行模型 异构多核并行模型针对嵌入式异构多核处理器设计充分发挥不同类型处理器核心的优势实现并行计算。 一优点 能根据不同核心的特点进行任务分配提高系统的整体性能和能效比。可以在不增加太多硬件成本的情况下通过合理利用异构多核处理器的资源满足嵌入式系统对高性能计算的需求。 二缺点 需要对异构多核处理器的架构和编程接口有深入的了解开发难度相对较大。同时异构多核之间的通信和协同工作也需要进行精心的设计和优化以确保系统的稳定性和性能。 三适用场景 适用于对性能和功耗有严格要求的嵌入式系统如智能手机、平板电脑、智能机器人等。 四C 源代码示例 #include iostream #include CL/cl.hppconst int matrix_size 1024;void matrix_multiply(cl::CommandQueue queue, cl::Buffer matrix_a, cl::Buffer matrix_b, cl::Buffer result_matrix) {// 定义内核函数const char* kernel_source __kernel void matrix_multiply_kernel(__global const float* matrix_a, __global const float* matrix_b, __global float* result_matrix, const int matrix_size) {int row get_global_id(0);int col get_global_id(1);float sum 0.0f;for (int k 0; k matrix_size; k) {sum matrix_a[row * matrix_size k] * matrix_b[k * matrix_size col];}result_matrix[row * matrix_size col] sum;};// 创建程序对象cl::Program::Sources sources;sources.push_back({kernel_source, strlen(kernel_source)});cl::Program program(queue.getInfoCL_QUEUE_CONTEXT(), sources);// 构建程序program.build(-cl-stdCL1.2);// 创建内核对象cl::Kernel kernel(program, matrix_multiply_kernel);// 设置内核参数kernel.setArg(0, matrix_a);kernel.setArg(1, matrix_b);kernel.setArg(2, result_matrix);kernel.setArg(3, matrix_size);// 定义全局工作项大小cl::NDRange global_work_size(matrix_size, matrix_size);// 执行内核queue.enqueueNDRangeKernel(kernel, cl::NullRange, global_work_size); }int main() {// 初始化矩阵数据float matrix_a_data[matrix_size * matrix_size];float matrix_b_data[matrix_size * matrix_size];float result_matrix_data[matrix_size * matrix_size];for (int i 0; i matrix_size * matrix_size; i) {matrix_a_data[i] static_castfloat(rand()) / RAND_MAX;matrix_b_data[i] static_castfloat(rand()) / RAND_MAX;}try {// 获取平台和设备信息std::vectorcl::Platform platforms;cl::Platform::get(platforms);cl::Device device;for (const auto platform : platforms) {std::vectorcl::Device devices;platform.getDevices(CL_DEVICE_TYPE_ALL, devices);for (const auto dev : devices) {if (dev.getInfoCL_DEVICE_TYPE() CL_DEVICE_TYPE_GPU ||dev.getInfoCL_DEVICE_TYPE() CL_DEVICE_TYPE_CPU) {device dev;break;}}if (device()! 0) {break;}}// 创建上下文和命令队列cl::Context context({device});cl::CommandQueue queue(context, device);// 在设备上创建缓冲区cl::Buffer matrix_a(context, CL_MEM_READ_ONLY | CL_MEM_COPY_HOST_PTR, sizeof(float) * matrix_size * matrix_size, matrix_a_data);cl::Buffer matrix_b(context, CL_MEM_READ_ONLY | CL_MEM_COPY_HOST_PTR, sizeof(float) * matrix_size * matrix_size, matrix_b_data);cl::Buffer result_matrix(context, CL_MEM_WRITE_ONLY, sizeof(float) * matrix_size * matrix_size);// 执行矩阵乘法matrix_multiply(queue, matrix_a, matrix_b, result_matrix);// 将结果从设备读回主机queue.enqueueReadBuffer(result_matrix, CL_TRUE, 0, sizeof(float) * matrix_size * matrix_size, result_matrix_data);// 输出结果的一部分for (int i 0; i 10; i) {for (int j 0; j 10; j) {std::cout result_matrix_data[i * matrix_size j] ;}std::cout std::endl;}} catch (cl::Error e) {std::cerr OpenCL error: e.what() ( e.err() ) std::endl;return -1;}return 0; }五典型开源库 OpenCL 是一个用于异构并行计算的开放标准和编程框架它允许开发者使用 C、C 等语言在不同的异构硬件平台上进行并行编程包括 CPU、GPU、FPGA 等适用于各种需要利用异构硬件加速计算的场景。 五、实时任务调度模型 实时任务调度模型根据任务的实时性要求和优先级对任务进行调度和分配确保关键任务能够在规定的时间内完成。 一优点 能保证系统的实时性对于一些对时间敏感的嵌入式应用如汽车电子控制系统、工业自动化控制系统等实时任务调度模型可以确保系统的可靠运行。 二缺点 需要对任务的实时性要求和优先级进行准确的评估和设置否则可能会导致系统的性能下降或任务错过截止时间。同时抢占式调度可能会引入一定的上下文切换开销影响系统的效率。 三适用场景 适用于对实时性要求极高的嵌入式系统特别是那些涉及到人身安全和关键任务控制的领域。 四C 源代码示例 #include iostream #include thread #include mutex #include condition_variable #include ctime #include ratio #include chronostd::mutex mutex_task; std::condition_variable cond_var; bool high_priority_task_ready false; bool medium_priority_task_ready false; bool low_priority_task_ready false;void high_priority_task() {std::this_thread::sleep_for(std::chrono::seconds(1));{std::lock_guardstd::mutex lock(mutex_task);high_priority_task_ready true;}cond_var.notify_one(); }void medium_priority_task() {std::this_thread::sleep_for(std::chrono::seconds(2));{std::lock_guardstd::mutex lock(mutex_task);medium_priority_task_ready true;}cond_var.notify_one(); }void low_priority_task() {std::this_thread::sleep_for(std::chrono::seconds(3));{std::lock_guardstd::mutex lock(mutex_task);low_priority_task_ready true;}cond_var.notify_one(); }void scheduler() {std::unique_lockstd::mutex lock(mutex_task);while (!high_priority_task_ready ||!medium_priority_task_ready ||!low_priority_task_ready) {if (high_priority_task_ready) {std::cout Executing high priority task. std::endl;high_priority_task_ready false;} else if (medium_priority_task_ready) {std::cout Executing medium priority task. std::endl;medium_priority_task_ready false;} else if (low_priority_task_ready) {std::cout Executing low priority task. std::endl;low_priority_task_ready false;} else {cond_var.wait(lock);}}lock.unlock(); }int main() {std::thread high_thread(high_priority_task);std::thread medium_thread(medium_priority_task);std::thread low_thread(low_priority_task);std::thread scheduler_thread(scheduler);high_thread.join();medium_thread.join();low_thread.join();scheduler_thread.join();return 0; }五典型开源库 RTEMS 是一个开源的实时操作系统它提供了丰富的实时任务调度和管理功能包括优先级调度、时间片轮转调度等适用于各种对实时性要求较高的嵌入式系统如航空航天、工业控制等领域 。 六、函数式并行模型 函数式并行模型将程序表示为一系列不可变数据和纯函数的组合函数之间可以并行执行因为它们没有副作用不会相互干扰。 一优点 代码简洁、易于理解和维护函数的并行执行可以提高系统的性能特别是对于处理大规模数据和复杂计算的嵌入式系统。由于函数没有副作用不会出现数据竞争和并发访问问题提高了系统的可靠性。 二缺点 对开发人员的编程习惯和思维方式有一定的要求需要熟悉函数式编程的概念和技巧。同时函数式并行模型可能会引入一定的额外开销如函数的调用和数据的复制等影响系统的性能。 三适用场景 适用于对代码简洁性和可靠性要求较高的嵌入式系统如金融交易系统、智能家居控制系统等。 四C 源代码示例 #include iostream #include futureint fibonacci(int n) {if (n 0) {return 0;} else if (n 1) {return 1;} else {return fibonacci(n - 1) fibonacci(n - 2);} }int main() {int n 10;std::futureint future_result std::async(std::launch::async, fibonacci, n);std::cout Calculating Fibonacci( n )... std::endl;int result future_result.get();std::cout Fibonacci( n ) result std::endl;return 0; }五典型开源库 range-v3 是一个 C 函数式编程库它提供了类似于 Haskell 中的 range 概念和相关的函数式操作如 map、filter、reduce 等可以方便地进行数据处理和并行计算适用于需要简洁、高效地处理数据的场景 。 综上所述不同的并行编程模型在嵌入式系统中各有优劣和适用场景。开发人员在选择时需要综合考虑系统的资源限制、实时性要求、任务特性以及自身的开发能力等因素以确定最适合的并行编程模型从而实现高效、可靠的嵌入式系统开发。
http://www.tj-hxxt.cn/news/232458.html

相关文章:

  • 上海网站建设公司排行榜网站地图怎么生成
  • 做招聘网站还有法盈利吗爱奇艺的网站是用什么做的
  • 宝塔管理wordpressseoul是啥意思
  • 青岛做网站皆赴青岛博公司企业网络宣传设计方案
  • 凡科建站建网站网络营销推广策略有哪些
  • 福建省教师空间建设网站logo免费设计无水印
  • 网站制作哪里做得好做网站需要学哪些语言
  • 建设一个棋牌网站都得准备什么用兰州网站哪里做
  • 荆州公司网站建设建设部网站办事大厅栏目
  • 网站开发公司创业策划wordpress关键词描述插件
  • 免费建站软件哪个最好网站特色分析
  • 集团公司门户网站建设通过网站做外贸
  • 简述网站建设基本流程答案wordpress关键词连接插件
  • 网站频道运营怎么做商城网站 运营
  • 太原网站优化推广企业的网站设计
  • 程家桥街道网站建设西安百姓网免费发布信息网
  • 表白网站建设厦门做网站多少
  • 网站收录图片动漫制作专业学校前十名
  • 介绍营销的网站郑州航海路网站建设
  • 做淘宝客网站推广被骗广州建设执业资格注册中心网站
  • dw建网站怎么做珠海网站建设网络公司怎么样
  • 网站建设服务要交印花税吗wordpress 模版安装教程
  • 网站国际化建设方案建站公司推荐首推万维科技
  • 如何注册网站免费注册好123上网主页
  • 闸北网站建设公司wordpress 标题重复
  • 网上开店电商平台有哪些网站建设及seo
  • 重庆重庆网站建设网络管理系统的基本组成和功能
  • 做水果的网站企业网站模板用哪个
  • 县总工会网站建设情况介绍网站模块在线制作
  • 长春市城建网站最新新闻热点国际