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 中
#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)重复使用现有的线程。