丁致宇第一周学习报告
目录
[TOC]
OpenMP
常用的库函数
// 设置并行区运行的线程数
void omp set num threads(int)
// 获得并行区运行的线程数i
nt omp_get num threads(void)
// 得线程编号
int omp_get_thread num(void)
// 获得openmp walL cLock时间(单位秒)
double omp_get_wtime(void)
// 获得omp_get_wtime时间精度
double omp_get_wtick(void)
parallel构造、for构造
常用指令
#pragma omp parallel: 会启动一个新的并行区域,创建个包含多个线程的团队。#pragma omp for: 指示一个可以被并行执行的循环(例如CC++中的for循环),它会将循环体分解为多个任务,在多个线程上分别执行这些任务,这个指令需要写在已经创建好的并行区内。#pragma omp parallel for:这个指令结合了“paralle"和“for"两个部分的功能。首先,#pragma omp parallel 会启动一个新的并行区域,创建个包含多个线程的团队。然后,for 部分会在新创建的线程团队上并行化指定的循环。所以, #pragma ompparallel for 不仅会并行执行循环,而且还会确保有一个合适的并行环境来执行循环
parallel for支持的从句

#pragma omp parallel (+从句)
if(scalar expression): 决定是否以并行的方式执行并行区
- 表达式为真(非零):按照并行方式执行并行区
- 否则: 主线程串行执行并行区
num threads(integer expression): 指定并行区的线程数
private(list): 指定私有变量列表
- 每个线程生成一份与该私有变量同类型的数据对象
- 变量需要重新初始化
firstprivate(list):
- 同private
- 对变量根据主线程中的数据进行初始化
#pragma omp for (+从句)
- nowait语句取消隐式同步
- collapse(n)从句处理嵌套循环
- order语句在并行区内的循环中强制执行某种顺序
- reduction语句简化对共享变量操作