多线程编程库的全面解析与应用
1. OpenMP 概述
OpenMP 规范包含众多指令、环境变量和 API。具体细节可查阅规范文档: http://www.openmp.org 。其实现依赖于具体情况,但在运行时很可能是系统可用的核心数量。
2. Intel Threading Building Blocks(TBB)
Intel TBB 是基于 C++ 模板的库,专注于循环级并行,着重定义任务而非显式线程。其组件包括通用并行算法、并发容器、低级同步原语和任务调度器。TBB 有商业版和开源版,目前最新版本是 2.1。
2.1 TBB 任务调度
程序员使用 TBB 时,可将循环迭代块视为任务,由任务调度器决定任务大小、线程数量、任务分配及线程调度。任务调度器会优先处理最近在核心中执行的任务,以充分利用可能包含任务数据的缓存,并采用任务窃取机制实现负载均衡。
2.2 通用并行算法
- parallel_for :并行处理 for 循环内的任务,需要范围类型和主体类型两个参数。范围类需定义复制构造函数、析构函数、
is_empty()、is_divisible()和拆分构造函数。TBB 库有预定义的blocked_range和blocked_range2D范围类型,分别用于一维和二维范围。主体类需定义复制构造函数
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



