Microsoft PowerPoint - 03_What is OpenMP 4.0 other_Jan18

Similar documents
2. OpenMP OpenMP OpenMP OpenMP #pragma#pragma omp #pragma omp parallel #pragma omp single #pragma omp master #pragma omp for #pragma omp critica

OpenMP 3.0 C/C++ 構文の概要

Microsoft Word - openmp-txt.doc

Introduction to OpenMP* 4.0 for SIMD and Affinity Features with Intel® Xeon® Processors and Intel® Xeon Phi™ Coprocessors

(Microsoft PowerPoint \215u\213`4\201i\221\272\210\344\201j.pptx)

01_OpenMP_osx.indd

OpenMP (1) 1, 12 1 UNIX (FUJITSU GP7000F model 900), 13 1 (COMPAQ GS320) FUJITSU VPP5000/64 1 (a) (b) 1: ( 1(a))

Microsoft PowerPoint - OpenMP入門.pptx

02_C-C++_osx.indd

AICS 村井均 RIKEN AICS HPC Summer School /6/2013 1

演習1: 演習準備

Microsoft PowerPoint - 002_OpenMP 5.0_2018_Part2

11042 計算機言語7回目 サポートページ:

NUMAの構成

OpenMPプログラミング

PowerPoint Presentation

コードのチューニング

インテル(R) Visual Fortran Composer XE 2013 Windows版 入門ガイド

ex01.dvi

連載講座 : 高生産並列言語を使いこなす (5) 分子動力学シミュレーション 田浦健次朗 東京大学大学院情報理工学系研究科, 情報基盤センター 目次 1 問題の定義 17 2 逐次プログラム 分子 ( 粒子 ) セル 系の状態 ステップ 18

untitled

C言語によるアルゴリズムとデータ構造

GPU チュートリアル :OpenACC 篇 Himeno benchmark を例題として 高エネルギー加速器研究機構 (KEK) 松古栄夫 (Hideo Matsufuru) 1 December 2018 HPC-Phys 理化学研究所 共通コードプロジェクト

XcalableMP入門

Microsoft Word - 計算科学演習第1回3.doc

Microsoft PowerPoint ppt [互換モード]

Intel® Compilers Professional Editions

Prog2_9th

The 3 key challenges in programming for MC

演習準備 2014 年 3 月 5 日神戸大学大学院システム情報学研究科森下浩二 1 RIKEN AICS HPC Spring School /3/5

連載講座 : 高生産並列言語を使いこなす (4) ゲーム木探索の並列化 田浦健次朗 東京大学大学院情報理工学系研究科, 情報基盤センター 目次 1 準備 問題の定義 αβ 法 16 2 αβ 法の並列化 概要 Young Brothers Wa

Microsoft PowerPoint - 演習1:並列化と評価.pptx

POSIXスレッド

Microsoft PowerPoint - 02_What is OpenMP 4.0 offload_Jan18

OpenMP¤òÍѤ¤¤¿ÊÂÎó·×»»¡Ê£±¡Ë

:30 12:00 I. I VI II. III. IV. a d V. VI

ex01.dvi

PowerPoint プレゼンテーション

OpenMP¤òÍѤ¤¤¿ÊÂÎó·×»»¡Ê£±¡Ë

Taro-リストⅢ(公開版).jtd

Taro-ポインタ変数Ⅰ(公開版).j

OpenMP¤òÍѤ¤¤¿ÊÂÎó·×»»¡Ê£²¡Ë

Microsoft PowerPoint - KHPCSS pptx

XMPによる並列化実装2

IntelR Compilers Professional Editions

Microsoft PowerPoint ppt [互換モード]

Microsoft PowerPoint - lec10.ppt

インテル® Parallel Studio XE 2019 Composer Edition for Windows: インテル® Fortran コンパイラー 入門ガイド

CUDA 連携とライブラリの活用 2

/* do-while */ #include <stdio.h> #include <math.h> int main(void) double val1, val2, arith_mean, geo_mean; printf( \n ); do printf( ); scanf( %lf, &v

C C UNIX C ( ) 4 1 HTML 1

プログラミング実習I

Prog1_10th

< 中略 > 24 0 NNE 次に 指定した日時の時間降水量と気温を 観測地点の一覧表に載っているすべての地点について出力するプログラムを作成してみます 観測地点の一覧表は index.txt というファイルで与えられています このファイルを読みこむためのサブルーチンが AMD

enshu5_4.key

<4D F736F F F696E74202D D F95C097F D834F E F93FC96E5284D F96E291E85F8DE391E52E >

Intel_ParallelStudioXE2013_ClusterStudioXE2013_Introduction.pptx

関数 C 言語は関数の言語 関数とは 関数の定義 : f(x) = x * x ; 使うときは : y = f(x) 戻り値 引数

(search: ) [1] ( ) 2 (linear search) (sequential search) 1

:30 12:00 I. I VI II. III. IV. a d V. VI

Jackson Marusarz 開発製品部門

CPU Levels in the memory hierarchy Level 1 Level 2... Increasing distance from the CPU in access time Level n Size of the memory at each level 1: 2.2

I. Backus-Naur BNF : N N 0 N N N N N N 0, 1 BNF N N 0 11 (parse tree) 11 (1) (2) (3) (4) II. 0(0 101)* (

I ASCII ( ) NUL 16 DLE SP P p 1 SOH 17 DC1! 1 A Q a q STX 2 18 DC2 " 2 B R b

コードのチューニング

< 中略 > 24 0 NNE 次に 指定した日時の時間降水量と気温を 観測地点の一覧表に載っているすべての地点について出力するプログラムを作成してみます 観測地点の一覧表は index.txt というファイルで与えられています このファイルを読みこむためのサブルーチンが AMD

C のコード例 (Z80 と同機能 ) int main(void) { int i,sum=0; for (i=1; i<=10; i++) sum=sum + i; printf ("sum=%d n",sum); 2

8 / 0 1 i++ i 1 i-- i C !!! C 2

Microsoft PowerPoint ppt [互換モード]

演習準備

2. OpenMP におけるキーワード一覧 OpenMP の全体像を理解するために 指示文 指示節 実行時ライブラリ関数 環境変数にそれぞれどうようなものがあるのかを最初に示します 各詳細については第 4 章以降で説明します 2.1 OpenMP の指示文 OpenMPの指示文は プログラム内で並列

FORTRAN( と C) によるプログラミング 5 ファイル入出力 ここではファイルからデータを読みこんだり ファイルにデータを書き出したりするプログラムを作成してみます はじめに テキスト形式で書かれたデータファイルに書かれているデータを読みこんで配列に代入し 標準出力に書き出すプログラムを作り

PowerPoint プレゼンテーション

Taro-再帰関数Ⅲ(公開版).jtd

1F90/kouhou_hf90.dvi

Microsoft PowerPoint - 阪大CMSI pptx

Microsoft PowerPoint - VSUGDAY_2008_Intel_V2.ppt

C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ

スライド 1

O(N) ( ) log 2 N

.NETプログラマー早期育成ドリル ~VB編 付録 文法早見表~

Microsoft PowerPoint - lec4.ppt

Java の ConcurrentHashMap における同期化 バッドケースとその対処法 2013 年 9 月湊隆行 1. はじめに表 1.1 に示すように Java の Collections Framework には 3 つの世代があります バージョン 1.0 から存在するレガシー API バ

Microsoft PowerPoint - C_Programming(3).pptx

enshu5_6.key

演習課題No12

I. Backus-Naur BNF S + S S * S S x S +, *, x BNF S (parse tree) : * x + x x S * S x + S S S x x (1) * x x * x (2) * + x x x (3) + x * x + x x (4) * *

memo

Presentation title

フローチャートの書き方

プラズマ核融合学会誌5月号【81-5】/内外情報_ソフト【注:欧フォント特殊!】

1.overview

Microsoft PowerPoint ppt [互換モード]

cp-7. 配列

03_Fortran_osx.indd

C#JobSystem_Intel

memo

情報処理演習 B8クラス

Transcription:

OpenMP* 4.x における拡張 OpenMP 4.0 と 4.5 の機能拡張

内容 OpenMP* 3.1 から 4.0 への拡張 OpenMP* 4.0 から 4.5 への拡張 2

追加された機能 (3.1 -> 4.0) C/C++ 配列シンタックスの拡張 SIMD と SIMD 対応関数 デバイスオフロード task 構 の依存性 taskgroup 構 cancel 句と cancellation point 句 追加されたランタイム API 追加された環境変数

Task の依存性 other task_dep.c Task 構 で depend 節を使 し依存性を明記 #include <stdio.h> int main() { int x = 0, y = 0; #pragma omp parallel #pragma omp single { #pragma omp task shared(x) depend(out: x) x = 1; #pragma omp task shared(x) depend(in: x) y = x + 1; printf("x = %d y = %d n", x, y); return 0; タスク構 間でのデータ依存を明 的に指定できるようになりました この例では x =2 がセットされるまで printf は待機します フロー依存 (out,in) アンチ依存 (in,out) 出 依存 (out,out) を制御できます

Taskgroup 構 other taskgroup.c Taskgroup 句は taskgroup 内で 成された タスク ( 孫タスク ) の完了を待機することを指 できます int main() { int i; tree_type tree; init_tree(tree); #pragma omp parallel #pragma omp single { #pragma omp task start_background_work(); for (i = 0; i < max_steps; i++) { #pragma omp taskgroup { #pragma omp task compute_tree(tree); // ここですべての compute_tree の完了を待機 check_step(); // ここで background_work が完了していることが要求される print_results(); return 0; この 2 つのタスクは同時に実 され start_background_work() は compute_tree() の同期の影響を受けない

Cancel 句 指定された構 タイプの最も内側の並列領域の要求をキャンセルします if while do switch とラベルの後には指定できません : #pragma omp cancel [ 構 タイプ ] [[,] if 節 ] 構 タイプ : parallel sections for taskgroup if 節 : if( スカラー式 ) 注 : 構 に到達したとき デッドロックを引き起こす可能性があるロックやその他のデータ構造を解放する必要があります ブロックされたスレッドは取り消すことができません

#define N 10000 void example() { std::exception *ex = NULL; #pragma omp parallel shared(ex) { #pragma omp for for (int i = 0; i < N; i++) { // no 'if' that prevents compiler optimizations try { causes_an_exception(); catch (std::exception *e) { // 後で例外を処理するため ex にステータスをストア #pragma omp atomic write ex = e; // for ワークシェアリングをキャンセル #pragma omp cancel for // 例外が発 したら parallel 構 をキャンセル if (ex) { #pragma omp cancel parallel phase_1(); #pragma omp barrier phase_2(); // 例外がワークシェア ループ内でスローされている場合は継続 if (ex) { // ex の例外処理 Cancel 句の例 例外をキャッチしたら for ワークシェア並列処理をキャンセル 例外をキャッチしたら parallel 並列処理をキャンセル

Cancellation point 句 指定された構 タイプの最も内側の並列領域のキャンセルが要求された場合に キャンセルをチェックする位置を指定 : #pragma omp cancellation point [ 構 タイプ ] 構 タイプ : parallel sections for taskgroup 制約事項 : この構 は 実 が許可されている場所にのみ追加できます if のアクション として使 したり プログラムで参照されるラベルの実 として使 することはできません

Cancellation point 句の例 subroutine example(n, dim) integer, intent(in) :: n, dim(n) integer :: i, s, err real, allocatable :: B(:) err = 0!$omp parallel shared(err)!...!$omp do private(s, B) do i=1, n!$omp cancellation point do allocate(b(dim(i)), stat=s) if (s.gt. 0) then!$omp atomic write err = s!$omp cancel do endif!...! deallocate private array B if (allocated(b)) then deallocate(b) endif enddo!$omp end parallel end subroutine 他のスレッドはこの位置でキャンセルをチェック allocate からエラーが返された時に cancel do をアクティブにします

追加されたランタイム API omp_get_cancellation omp_get_proc_bind omp_set_default_device omp_get_default_device omp_get_num_devices omp_get_num_teams omp_get_team_num omp_is_initial_device

追加された環境変数 OMP_CANCELLATION OMP_DEFAULT_DEVICE OMP_DISPLAY_ENV OMP_PLACES

追加された機能 (4.0 -> 4.5) オフロード 構造化データ割り当て 同期オフロード MAP 節の拡張 SIMD ベクトル ループ構造への linear 節の追加 SIMD 構造への simdlen 節の追加 Task 構造の依存性制御と priority 制御 Taskloop (taskloop simd) 構 の追加 * 追加されたランタイム API 追加された環境変数 * インテル コンパイラー V16 update 1 では未サポート

Taskloop 句の追加 * インテル コンパイラー V16 update 1 では未サポート For (C/C++) または Do (Fortran) ループ構造を OpenMP のタスクを使 して並列化します インテル Cilk Plus の _Cilk_for (_Cilk_for _Simd) に類似しています #pragma omp for [simd] #pragma omp taskloop [simd] 指定可能な節 : if ([ taskloop :] スカラー式 ) shared(list) private(list) firstprivate(list) lastprivate(list) default(shared none) grainsize(grain size) num_task(num task) collapse(n) final( スカラー式 ) priority(priority 値 ) untiled mergable nogroup スケジュールは for ワークシェアの schedule 節とは異なり grainsize と num_task で制御

追加されたランタイム API omp_get_max_task_priority

追加された環境変数 OMP_MAX_TASK_PRIORITY

付録 インテル C/C++ および Fortran コンパイラー V15 と V16 でサポートされる OpenMP 4.x の機能

インテル C/C++ および Fortran コンパイラー V15 と V16 PLACE と THREAD アフィニティー (15.0, 16.0) SIMD 拡張の主要機能 (15.0) デバイス / アクセラレーター拡張の主要機能 (15.0, 16.0) Simd,parallel,target,teams,distribute の複合構 (15.0, 16.0) taskgroup と task depend (15.0, 16.0) Atomic のシーケンシャル 貫性 (15.0, 16.0) エラー処理 (15.0, 16.0) ユーザー定義リダクション (16.0 C++, Fortran は今後のリリースで ) Fortran 2003 サポート (15.0) ユーザー定義ベクトル異種関数 (16.0) intel_simd_lane() 関数 (15.0, 16.0) #pragma omp ordered [simd thread] (16.0)