OpenMP Directives

1. parallel

2. OpenMP Flush

3. num_threads

4. omp_set_dynamic

5. do

6. nowait

7. collapse

8. linear

9. parallel sections

10. firstprivate

11. single







4. omp_set_dynamic

> omp_set_dynamic(1)   启用动态调整可用的并行区域执行的线程数

- 用户指定的线程数是最大线程数  omp_get_max_threads

- 实际启用线城市是由运行时环境以最佳方式使用系统资源(也就是等于核数)omp_get_num_threads


> omp_set_dynamic(0)  禁用动态调整

omp_set_dynamic(0)关闭动态线程处理,以便可以针对以下并行区域重用现有的线程集合


Microsoft 专用

当前支持omp_get_dynamic和omp_set_dynamic如下所示:

输入的参数omp_set_dynamic不会影响线程处理策略并不会更改线程数。 omp_get_num_threads 始终返回用户定义的数字,如果设置的或默认线程数。 在当前的 Microsoft 实现中,omp_set_dynamic(0)关闭动态线程处理,以便可以针对以下并行区域重用现有的线程集合。 omp_set_dynamic(1) 打开动态线程处理,通过放弃现有的线程集合并创建一组新的即将推出的并行区域。 新组中的线程数等同于旧的组,并为基础的返回值omp_get_num_threads。 因此,为了获得最佳性能,使用omp_set_dynamic(0)重复使用现有的线程。



9. #pragma omp parallel sections

> 三个section :XAXIS, YAXIS, and ZAXIS 可以被并行执行

> 第一个section 指令是可选的

> 所有的 section 指令都需要出现在 parallel sections construct 中

OpenMP Directives_第1张图片
parallel sections



#pragma omp critical

The critical construct is a directive that contains a structured block. The construct allows only  a single thread at a time to execute the structured block (region). Multiple critical regions may exist in a parallel region, and may act cooperatively (only one thread at a time in all critical regions), or separately (only one thread at a time in each critical regions when a unique name is supplied on each critical construct). An optional (lock) hint clause may be specified on a named critical construct to provide the OpenMP runtime guidance in selection a locking mechanism.




11. #pragma omp single [data clauses]

> 只有一个线程执行block

> 这个线程不必是主线程,可以是任意的进程

> master子句区域后有隐式的 barrier 

Microsoft 专用

当前支持omp_get_dynamic和omp_set_dynamic如下所示:

输入的参数omp_set_dynamic不会影响线程处理策略并不会更改线程数。 omp_get_num_threads 始终返回用户定义的数字,如果设置的或默认线程数。 在当前的 Microsoft 实现中,omp_set_dynamic(0)关闭动态线程处理,以便可以针对以下并行区域重用现有的线程集合。 omp_set_dynamic(1) 打开动态线程处理,通过放弃现有的线程集合并创建一组新的即将推出的并行区域。 新组中的线程数等同于旧的组,并为基础的返回值omp_get_num_threads。 因此,为了获得最佳性能,使用omp_set_dynamic(0)重复使用现有的线程。

Microsoft 专用

当前支持omp_get_dynamic和omp_set_dynamic如下所示:

输入的参数omp_set_dynamic不会影响线程处理策略并不会更改线程数。 omp_get_num_threads 始终返回用户定义的数字,如果设置的或默认线程数。 在当前的 Microsoft 实现中,omp_set_dynamic(0)关闭动态线程处理,以便可以针对以下并行区域重用现有的线程集合。 omp_set_dynamic(1) 打开动态线程处理,通过放弃现有的线程集合并创建一组新的即将推出的并行区域。 新组中的线程数等同于旧的组,并为基础的返回值omp_get_num_threads。 因此,为了获得最佳性能,使用omp_set_dynamic(0)重复使用现有的线程。

Microsoft 专用

当前支持omp_get_dynamic和omp_set_dynamic如下所示:

输入的参数omp_set_dynamic不会影响线程处理策略并不会更改线程数。 omp_get_num_threads 始终返回用户定义的数字,如果设置的或默认线程数。 在当前的 Microsoft 实现中,omp_set_dynamic(0)关闭动态线程处理,以便可以针对以下并行区域重用现有的线程集合。 omp_set_dynamic(1) 打开动态线程处理,通过放弃现有的线程集合并创建一组新的即将推出的并行区域。 新组中的线程数等同于旧的组,并为基础的返回值omp_get_num_threads。 因此,为了获得最佳性能,使用omp_set_dynamic(0)重复使用现有的线程。

Microsoft 专用

当前支持omp_get_dynamic和omp_set_dynamic如下所示:

输入的参数omp_set_dynamic不会影响线程处理策略并不会更改线程数。 omp_get_num_threads 始终返回用户定义的数字,如果设置的或默认线程数。 在当前的 Microsoft 实现中,omp_set_dynamic(0)关闭动态线程处理,以便可以针对以下并行区域重用现有的线程集合。 omp_set_dynamic(1) 打开动态线程处理,通过放弃现有的线程集合并创建一组新的即将推出的并行区域。 新组中的线程数等同于旧的组,并为基础的返回值omp_get_num_threads。 因此,为了获得最佳性能,使用omp_set_dynamic(0)重复使用现有的线程。Microsoft 专用

当前支持omp_get_dynamic和omp_set_dynamic如下所示:

输入的参数omp_set_dynamic不会影响线程处理策略并不会更改线程数。 omp_get_num_threads 始终返回用户定义的数字,如果设置的或默认线程数。 在当前的 Microsoft 实现中,omp_set_dynamic(0)关闭动态线程处理,以便可以针对以下并行区域重用现有的线程集合。 omp_set_dynamic(1) 打开动态线程处理,通过放弃现有的线程集合并创建一组新的即将推出的并行区域。 新组中的线程数等同于旧的组,并为基础的返回值omp_get_num_threads。 因此,为了获得最佳性能,使用omp_set_dynamic(0)重复使用现有的线程。Microsoft 专用

当前支持omp_get_dynamic和omp_set_dynamic如下所示:

输入的参数omp_set_dynamic不会影响线程处理策略并不会更改线程数。 omp_get_num_threads 始终返回用户定义的数字,如果设置的或默认线程数。 在当前的 Microsoft 实现中,omp_set_dynamic(0)关闭动态线程处理,以便可以针对以下并行区域重用现有的线程集合。 omp_set_dynamic(1) 打开动态线程处理,通过放弃现有的线程集合并创建一组新的即将推出的并行区域。 新组中的线程数等同于旧的组,并为基础的返回值omp_get_num_threads。 因此,为了获得最佳性能,使用omp_set_dynamic(0)重复使用现有的线程。

你可能感兴趣的:(OpenMP Directives)