このセクションでは、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 task プラグマの priority 節 - priority 節の機能には次のものがあります。
OMP_MAX_TASK_PRIORITY 環境変数
omp_get_max_task_priority() API ルーチン
詳細は、OpenMP 4.5 仕様のセクション 2.9.1 (task 構文の priority 節)、セクション 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を参照してください。