本节讨论 OpenMP API 的新增功能和更新。
改进的动态循环调度-OpenMP 4.5 规范澄清了动态循环调度如何将块分配给线程。循环迭代的块不能保证按单调顺序分配给线程。例如,在下面的 OpenMP 动态循环中,第 50 个迭代在第 0 个迭代之前执行。
#pragma omp parallel for num_threads(2) schedule(dynamic) for (i=0;i<100;i++) A[i] = B[i];
这可以实现更高效的动态循环调度实施。
OpenMP 任务 Pragma 的优先级子句-优先级子句功能包括以下内容:
OMP_MAX_TASK_PRIORITY 环境变量
omp_get_max_task_priority() API 例程
有关更多信息,请参见 OpenMP 4.5 规范第 2.9.1 部分中用于任务构造的优先级子句,第 4.14 部分中的 OMP_MAX_TASK_PRIORITY 环境变量,以及第 3.2.36 部分中的 omp_get_max_task_priority API 例程。
针对线程关联(处理器绑定)的查询函数-添加了以下查询 API 例程:
omp_get_num_places()
omp_get_place_num_procs()
omp_get_place_proc_ids()
omp_get_place_num()
omp_get_partition_num_places()
omp_get_partition_place_nums()
有关更多信息,请参见 OpenMP 4.5 规范第 256 页的第 3.2.23 部分和第 261 页的第 3.2.28 部分。
有关 OpenMP 的更多信息,请参见Oracle Developer Studio 12.6: OpenMP API User’s Guide。