View
2
Download
0
Category
Preview:
Citation preview
1
OpenMP* プログラミング実践
Intel、インテル、 Intel ロゴ、「Intel.さあ、その先へ。」ロゴ、Intel Core、Itanium、MMX、Pentium、Xeon は、アメリカ合衆国およびその他の国における Intel Corporation またはその子会社の商標または登録商標です。
© 2010 Intel Corporation. 無断での引用、転載を禁じます。 記載内容は予告なしに変更されることがあります。*その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。
June 2’ 2010
みなさん OpenMP* 、使ってますかあ?
OpenMP* とは? 少し説明します。
OpenMP 2.5 と 3.0 の違いとプログラミングへの影響
OpenMP による並列化実装例
並列化の手順
適切な負荷分散
© 2010 Intel Corporation. 無断での引用、転載を禁じます。 記載内容は予告なしに変更されることがあります。*その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。
Intel、インテル、 Intel ロゴは、アメリカ合衆国およびその他の国における Intel Corporation またはその子会社の商標または登録商標です。
インテル® ソフトウェア開発製品1-2
2
OpenMP とは?
ポータブルな、マルチスレッド並列処理を記述するアプリケーション・プログラム・インターフェイス(API)– 多くの Fortran 77 Fortran 90 C および C++ で実装される多くの Fortran 77、Fortran 90、C、および C++ で実装される
– インテル® コンパイラーは、Linux*、Mac OS* およびWindows* 環境をサポート
ループレベルの並列処理を標準化
粗粒度の並列処理をサポート
コード中にシリアルとパラレル領域が混在
© 2010 Intel Corporation. 無断での引用、転載を禁じます。 記載内容は予告なしに変更されることがあります。*その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。
Intel、インテル、 Intel ロゴは、アメリカ合衆国およびその他の国における Intel Corporation またはその子会社の商標または登録商標です。
インテル® ソフトウェア開発製品7-3
非営利団体 OpenMP Architecture Review Board によって管理される(www.openmp.org)
OpenMP の歴史
OpenMP*Fortran 1.0
1997
OpenMP*Fortran 1 1
1999
2000Fortran 1.1
OpenMP*C/C++ 1.0
1998OpenMP*Fortran 2.0
OpenMP*C/C++ 2.0
2002OpenMP*FortranC/C++ 3.0
OpenMP*FortranC/C++ 2.5
2005 2008
© 2010 Intel Corporation. 無断での引用、転載を禁じます。 記載内容は予告なしに変更されることがあります。*その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。
Intel、インテル、 Intel ロゴは、アメリカ合衆国およびその他の国における Intel Corporation またはその子会社の商標または登録商標です。
インテル® ソフトウェア開発製品7-4
インテル® コンパイラー 11.0 & 11.1マイクロソフト* Visual C++ 8, 9 & 10
3
コンパイラーがサポートする OpenMP* 仕様を確認
printf(“OpenMP version %d¥n”, _OPENMP);
コンパイラーはサポートする OpenMP バージョンが公開された年月をコンパイラ はサポ トする OpenMP バ ジョンが公開された年月を、_OPENMP マクロで数値として返す
openmp オプションでコンパイル
© 2010 Intel Corporation. 無断での引用、転載を禁じます。 記載内容は予告なしに変更されることがあります。*その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。
Intel、インテル、 Intel ロゴは、アメリカ合衆国およびその他の国における Intel Corporation またはその子会社の商標または登録商標です。
インテル® ソフトウェア開発製品1-5
200203は2002年3月に公開された仕様、バージョン2.0であることを示す
サンプル omp.c
プログラミング・モデル
Fork-join 型の並列処理: •マスタースレッドは必要に応じて、スレッドのチームを生成する
•並列処理は動的に行われる つまり シリアル処理の•並列処理は動的に行われる。つまり、シリアル処理のプログラムは並列処理プログラムへ変化する
© 2010 Intel Corporation. 無断での引用、転載を禁じます。 記載内容は予告なしに変更されることがあります。*その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。
Intel、インテル、 Intel ロゴは、アメリカ合衆国およびその他の国における Intel Corporation またはその子会社の商標または登録商標です。
インテル® ソフトウェア開発製品7-6
並列実行領域
マスタースレッド
4
OpenMP アーキテクチャー
OpenMP 構文は 5 つのカテゴリーに分けられる
• ランタイム関数/環境変数
• 並列実行領域 (Parallel 構文)
• ワークシェアリング (for 構文など)
• データ環境
• 同期
© 2010 Intel Corporation. 無断での引用、転載を禁じます。 記載内容は予告なしに変更されることがあります。*その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。
Intel、インテル、 Intel ロゴは、アメリカ合衆国およびその他の国における Intel Corporation またはその子会社の商標または登録商標です。
インテル® ソフトウェア開発製品7-7
ループを並列化
最も時間がかかるループを特定する
そのループをスレッド間で分割する
void main() {double Res[1000];
#pragma omp parallel forfor(int i=0;i<1000;i++){
do huge comp(Res[i]);
void main() {double Res[1000];for(int i=0;i<1000;i++){
do_huge_comp(Res[i]);}
このループを複数のスレッド間で分割 OpenMP指示子
© 2010 Intel Corporation. 無断での引用、転載を禁じます。 記載内容は予告なしに変更されることがあります。*その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。
Intel、インテル、 Intel ロゴは、アメリカ合衆国およびその他の国における Intel Corporation またはその子会社の商標または登録商標です。
インテル® ソフトウェア開発製品7-8
_ g _ p( [ ]);}
}
}}
逐次処理プログラム 並列処理プログラム
5
for 構文によるワークシェア
parallel 指示句で4つのスレッドチームが生成される
for 指示句で4つのスレッドチームに作業を分割する デフォルトではル プの
#pragma omp parallel #pragma omp for
for(int i=0;i<1000;i++){do_huge_comp(Res[i]);
}
業を分割する。デフォルトではループの最大値をスレッド数で割ったブロックを各スレッドに分散
i= 0 -> 249i= 250 -> 499
i= 500 -> 749i= 750 -> 999
© 2010 Intel Corporation. 無断での引用、転載を禁じます。 記載内容は予告なしに変更されることがあります。*その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。
Intel、インテル、 Intel ロゴは、アメリカ合衆国およびその他の国における Intel Corporation またはその子会社の商標または登録商標です。
インテル® ソフトウェア開発製品1-9
最大スレッド数 4 と仮定
i 250 > 499 i 750 999
サンプル omp_for.c
デフォルトではブロック分割されるが、schedule句で変更可能
データアクセス競合と同期グローバルデータの書き込み
int sum; #pragma omp parallel for
sum#pragma omp parallel for
for(int i=0;i<100;i++)sum += A[i] * B[i];
i は 75から 99
i は 25から 50
i は 51から 74
i は 0から 24スレッド0 スレッド1 スレッド2 スレッド3
© 2010 Intel Corporation. 無断での引用、転載を禁じます。 記載内容は予告なしに変更されることがあります。*その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。
Intel、インテル、 Intel ロゴは、アメリカ合衆国およびその他の国における Intel Corporation またはその子会社の商標または登録商標です。
インテル® ソフトウェア開発製品1-10
グローバル変数並列領域外のデータはグローバル変数となり、複数のスレッドからの同時書き込みは競合を発生する。ここで sum は並列領域外で定義されるグローバス変数であり、複数のスレッドから同時に更新され、競合を引き起こす。
6
データアクセス競合と同期グローバルデータの書き込みを同期
int sum; #pragma omp parallel forsum #pragma omp parallel for
for(int i=0;i<100;i++)#pragma omp atomic
sum += A[i] * B[i];
i は 75から 99
i は 25から 50
i は 51から 74
i は 0から 24スレッド0 スレッド1 スレッド2 スレッド3
su
12 3 4
© 2010 Intel Corporation. 無断での引用、転載を禁じます。 記載内容は予告なしに変更されることがあります。*その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。
Intel、インテル、 Intel ロゴは、アメリカ合衆国およびその他の国における Intel Corporation またはその子会社の商標または登録商標です。
インテル® ソフトウェア開発製品1-11
同期指示句atomic 指示句や critical 指示句を使用すると、同時書込みを保護できる。しかし、過度な同期の利用はプログラムの性能に影響する。
データアクセス競合と同期グローバルデータの高度な同期
int sum; #pragma omp parallel for ¥sum #pragma omp parallel for ¥reduction(+:sum)
for(int i=0;i<100;i++)sum += A[i] * B[i];
i は 75から 99
i は 25から 50
i は 51から 74
i は 0から 24スレッド0 スレッド1 スレッド2 スレッド3
su
12 3 4
Lsum Lsum Lsum Lsum
© 2010 Intel Corporation. 無断での引用、転載を禁じます。 記載内容は予告なしに変更されることがあります。*その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。
Intel、インテル、 Intel ロゴは、アメリカ合衆国およびその他の国における Intel Corporation またはその子会社の商標または登録商標です。
インテル® ソフトウェア開発製品1-12
リダクション指示節変数に対して同じ操作を繰り返す演算では、リダクションを適用できる。リダクションで指定された変数の更新は、各スレッドがローカルに行い、並列領域の最後でそれらは自動的にマージされる。
サンプル datarace.c
7
データアクセス競合と同期データ属性の変更
int sum, temp; #pragma omp parallel for ¥reduction(+:sum)
f (i t i 0 i 100 i ){sumtemp private(temp)
for(int i=0;i<100;i++){temp = A[i] * B[i];sum += temp;
}
i は 75から 99
i は 25から 50
i は 51から 74
i は 0から 24スレッド0 スレッド1 スレッド2 スレッド3
sum
12 3 4
Lsum Lsum Lsum Lsumtemp temp temp temp
?
© 2010 Intel Corporation. 無断での引用、転載を禁じます。 記載内容は予告なしに変更されることがあります。*その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。
Intel、インテル、 Intel ロゴは、アメリカ合衆国およびその他の国における Intel Corporation またはその子会社の商標または登録商標です。
インテル® ソフトウェア開発製品1-13
プライベート指示節並列領域の外にあるグローバル変数を一時的にスレッドローカル変数とすることが出来ます。この例で変数 temp は一時変数として利用されるためプライベートとして扱うことが出来ます。
サンプル datarace.c
インテル® コンパイラーのレポート機能
インテル® コンパイラーのレポート機能を利用してデータアクセス競合の問題をいち早く検出
/Qdiag-enable:thread
ソースコード中のスタティックデータの参照、更新を検知
/Qdiag-enable:sc3
エラーの原因となる誤ったコーディングを検知
© 2010 Intel Corporation. 無断での引用、転載を禁じます。 記載内容は予告なしに変更されることがあります。*その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。
Intel、インテル、 Intel ロゴは、アメリカ合衆国およびその他の国における Intel Corporation またはその子会社の商標または登録商標です。
インテル® ソフトウェア開発製品1-14
サンプル datarace.c
8
OpenMP* 2.5 と 3.0 の主な仕様の違い
OpenMP 3.0 ではスレッドモデルにタスクの概念を導入(task 指示句)
入れ子になったループの関連付けをサポート(collapse 指示節)
f 構文のル プカウンタ の制限緩和(f 構文) for 構文のループカウンターの制限緩和(for 構文)
For 構文の schedule 指示節のスケジュールモードに auto を追加
ランタイム API で schedule が制御可能に(omp_set/get_schedule())
プログラム中で利用する最大スレッド数を設定可能に(OMP_THREAD_LIMIT)
© 2010 Intel Corporation. 無断での引用、転載を禁じます。 記載内容は予告なしに変更されることがあります。*その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。
Intel、インテル、 Intel ロゴは、アメリカ合衆国およびその他の国における Intel Corporation またはその子会社の商標または登録商標です。
インテル® ソフトウェア開発製品1-15
仕様の違いでどのような改善が可能か?
スレッドモデルにタスクの概念の導入for 構文を利用すると
parallel 指示句で4つのスレッドチームが生成される
for 指示句で4つのスレッドチームに作
#pragma omp parallel #pragma omp forfor(i=0; i<MAX; i++)
a[i] += b[i] * c[i];
o 指示句で のスレッドチ ムに作業を分割する。デフォルトではループの最大値をスレッド数で割ったブロックを各スレッドに分散
i= 0 -> 24 i= 25 -> 49 i= 50 -> 74 i= 75 -> 99
© 2010 Intel Corporation. 無断での引用、転載を禁じます。 記載内容は予告なしに変更されることがあります。*その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。
Intel、インテル、 Intel ロゴは、アメリカ合衆国およびその他の国における Intel Corporation またはその子会社の商標または登録商標です。
インテル® ソフトウェア開発製品1-16
最大スレッド数 4 そして MAX を 100 と仮定 サンプル task0.c
9
スレッドモデルにタスクの概念の導入task 構文を利用すると
parallel 指示句で4つのスレッドチームが生成される
for ループは1つのスレッドで実行する
#pragma omp parallel #pragma omp singlefor(i=0; i<MAX; i++)#pragma omp task
a[i] += b[i] * c[i];
task 指示句でタスクをキューに投入。この場合タスクは、 a[i] += b[i] * c[i]の処理
タスク
タスク
.
.このループでは100個のタス
© 2010 Intel Corporation. 無断での引用、転載を禁じます。 記載内容は予告なしに変更されることがあります。*その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。
Intel、インテル、 Intel ロゴは、アメリカ合衆国およびその他の国における Intel Corporation またはその子会社の商標または登録商標です。
インテル® ソフトウェア開発製品1-17
最大スレッド数 4 そして MAX を 100 と仮定
タスク
.
タスクキュー
残りのスレッド(ワーカースレッド)は、キューからタスクを取得して実行
クがエントリーされる
サンプル task1.c
入れ子になったループの関連付けをサポート(1)collapse 指示節
#pragma omp parallel for private(j, k)for(i = 0; i < 3; i++)
for(k = 0; k < 2; k++)for(k = 0; k < 2; k++)for(j = 0; j < 3; j++)
printf(“i=%d k=%d j=%d Thread(%d)¥n”,i, k, j, omp_get_thread_num());
上記のような入れ子構造のループを for 構文でワークシェアする場合、for 指示文が指定されたレベルのループがワークシェアされる。
© 2010 Intel Corporation. 無断での引用、転載を禁じます。 記載内容は予告なしに変更されることがあります。*その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。
Intel、インテル、 Intel ロゴは、アメリカ合衆国およびその他の国における Intel Corporation またはその子会社の商標または登録商標です。
インテル® ソフトウェア開発製品1-18
この例では、k と j のループは各スレッドで処理される。生成されるスレッドはインデックス i で分割される最大 3 つのスレッド。
10
入れ子になったループの関連付けをサポート(2)collapse 指示節
Collapse 指示節は、入れ子になった外側のループと、内側のループを結合し大きなループに展開して並列化を行う。これにより、入れ子構造のループをより多くのスレッドで処理し、各スレッドの負荷は均等になる。
#pragma omp parallel for private(j, k) collapse(2)for(i = 0; i < 3; i++)
for(k = 0; k < 2; k++)
使い方: collapse (レベル)レベルには展開する階層を指示する。下記の例のcollapse(2) では、2階層、つまりインデックス k まで展開することを意味する。
© 2010 Intel Corporation. 無断での引用、転載を禁じます。 記載内容は予告なしに変更されることがあります。*その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。
Intel、インテル、 Intel ロゴは、アメリカ合衆国およびその他の国における Intel Corporation またはその子会社の商標または登録商標です。
インテル® ソフトウェア開発製品1-19
for(j = 0; j < 3; j++) printf(“i=%d k=%d j=%d Thread(%d)¥n”,
i, k, j, omp_get_thread_num());
for(i=0;…) と for(k=0;…) は完全な入れ子でなければいけません。間に処理があるとエラーとなります。
OpenMP* による並列化実装例
この例題 2D レイトレーサー/レンダラーは、並列化によるスピードアップの効果を視覚的に比較できるようになっています。
コード中の各ピクセルのレンダリングを並列化します。
並列化後のプログラムの正当性は、インテル® Parallel Inspector で検証できます。並列化されたコード領域では最小限の同期を行います(無いほうが良い)。
© 2010 Intel Corporation. 無断での引用、転載を禁じます。 記載内容は予告なしに変更されることがあります。*その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。
Intel、インテル、 Intel ロゴは、アメリカ合衆国およびその他の国における Intel Corporation またはその子会社の商標または登録商標です。
インテル® ソフトウェア開発製品
11
OpenMP による並列化の手順
1. 実行時間のかかる場所を特定する。2. OpenMP を利用して並列化する場所を決定する3 O MP 宣言子を記述する3. OpenMP 宣言子を記述する4. 実行して並列化の効果を確認する
© 2010 Intel Corporation. 無断での引用、転載を禁じます。 記載内容は予告なしに変更されることがあります。*その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。
Intel、インテル、 Intel ロゴは、アメリカ合衆国およびその他の国における Intel Corporation またはその子会社の商標または登録商標です。
インテル® ソフトウェア開発製品
実行時間のかかる場所を特定する
© 2010 Intel Corporation. 無断での引用、転載を禁じます。 記載内容は予告なしに変更されることがあります。*その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。
Intel、インテル、 Intel ロゴは、アメリカ合衆国およびその他の国における Intel Corporation またはその子会社の商標または登録商標です。
インテル® ソフトウェア開発製品
Parallel Studio の Parallel Amplifier を利用して、ホットスポットをプロファイル
12
OpenMP を利用して並列化する場所を決定
1. 頻繁に呼び出されている関数を確認2. ループを構成する上位の関数を探す3 OpenMP を利用して並列化を記述する3. OpenMP を利用して並列化を記述する
© 2010 Intel Corporation. 無断での引用、転載を禁じます。 記載内容は予告なしに変更されることがあります。*その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。
Intel、インテル、 Intel ロゴは、アメリカ合衆国およびその他の国における Intel Corporation またはその子会社の商標または登録商標です。
インテル® ソフトウェア開発製品
頻繁に呼び出されている関数を確認
© 2010 Intel Corporation. 無断での引用、転載を禁じます。 記載内容は予告なしに変更されることがあります。*その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。
Intel、インテル、 Intel ロゴは、アメリカ合衆国およびその他の国における Intel Corporation またはその子会社の商標または登録商標です。
インテル® ソフトウェア開発製品
shader <- trace <- render_one_pixel <- parallel_thread の関係がわかる
13
ループを構成する上位の関数を探す(1)
trace のソースコードを確認
© 2010 Intel Corporation. 無断での引用、転載を禁じます。 記載内容は予告なしに変更されることがあります。*その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。
Intel、インテル、 Intel ロゴは、アメリカ合衆国およびその他の国における Intel Corporation またはその子会社の商標または登録商標です。
インテル® ソフトウェア開発製品
ここは OpenMP で並列化を記述できるか?
ループを構成する上位の関数を探す(2)
render_one_pixel のソースコードを確認
© 2010 Intel Corporation. 無断での引用、転載を禁じます。 記載内容は予告なしに変更されることがあります。*その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。
Intel、インテル、 Intel ロゴは、アメリカ合衆国およびその他の国における Intel Corporation またはその子会社の商標または登録商標です。
インテル® ソフトウェア開発製品
ここは OpenMP で並列化を記述できるか?
14
ループを構成する上位の関数を探す(3)Parallel_thread のソースコードを確認
© 2010 Intel Corporation. 無断での引用、転載を禁じます。 記載内容は予告なしに変更されることがあります。*その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。
Intel、インテル、 Intel ロゴは、アメリカ合衆国およびその他の国における Intel Corporation またはその子会社の商標または登録商標です。
インテル® ソフトウェア開発製品
ここは OpenMP で並列化を記述できるか?
OpenMP を利用して並列化を記述する
static void parallel_thread (void){
// thread-local storageunsigned int serial = 1;unsigned int mboxsize = sizeof(unsigned int)*(max objectid() + 20);unsigned int mboxsize sizeof(unsigned int) (max_objectid() + 20);
unsigned int * local_mbox = (unsigned int *) alloca(mboxsize);memset(local_mbox,0,mboxsize);
for (int y = starty; y < stopy; y++) { drawing_area drawing(startx, totaly-y, stopx-startx, 1);for (int x = startx; x < stopx; x++) {
color_t c = render_one_pixel (x, y, local_mbox, serial, startx, stopx, starty, stopy);drawing.put_pixel(c);
} if(!video->next_frame()) return;
}
© 2010 Intel Corporation. 無断での引用、転載を禁じます。 記載内容は予告なしに変更されることがあります。*その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。
Intel、インテル、 Intel ロゴは、アメリカ合衆国およびその他の国における Intel Corporation またはその子会社の商標または登録商標です。
インテル® ソフトウェア開発製品
}}
parallel for 構文を使って並列化
15
並列化の効果を確認する
実行時間は改善されたか?
シリアルコード対してどれくらい早くなったか?
そのコードをよりコア数の多いシステムで実行してみると?
実行時間は改善されたか?
シリアルコード対してどれくらい早くなったか?
© 2010 Intel Corporation. 無断での引用、転載を禁じます。 記載内容は予告なしに変更されることがあります。*その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。
Intel、インテル、 Intel ロゴは、アメリカ合衆国およびその他の国における Intel Corporation またはその子会社の商標または登録商標です。
インテル® ソフトウェア開発製品
実行に際し何か傾向があるか?
8 スレッドで実行した場合
インテル® スレッド・プロファイラーでスレッドの動作を検証
© 2010 Intel Corporation. 無断での引用、転載を禁じます。 記載内容は予告なしに変更されることがあります。*その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。
Intel、インテル、 Intel ロゴは、アメリカ合衆国およびその他の国における Intel Corporation またはその子会社の商標または登録商標です。
インテル® ソフトウェア開発製品
スレッドの負荷が均一ではない。なぜか?
16
何が問題か?
この領域はオブジェクトが少ないない
この領域はオブジェクトが多い
© 2010 Intel Corporation. 無断での引用、転載を禁じます。 記載内容は予告なしに変更されることがあります。*その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。
Intel、インテル、 Intel ロゴは、アメリカ合衆国およびその他の国における Intel Corporation またはその子会社の商標または登録商標です。
インテル® ソフトウェア開発製品
つまり、2つ以上のスレッドで処理を行うと、各スレッドの負荷が異なる
均等な負荷分散を OpenMP で指示するには
次の2つの方法で、負荷分散が均等になることを確認する
1. for 構文で schedule 句を指定する1. for 構文で schedule 句を指定する
2. task 構文を利用する
© 2010 Intel Corporation. 無断での引用、転載を禁じます。 記載内容は予告なしに変更されることがあります。*その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。
Intel、インテル、 Intel ロゴは、アメリカ合衆国およびその他の国における Intel Corporation またはその子会社の商標または登録商標です。
インテル® ソフトウェア開発製品
変更後再度ビルドを行い、処理時間とスケーリングを確認する
17
8 スレッドで再検証する
インテル® スレッド・プロファイラーでスレッドの動作を検証
© 2010 Intel Corporation. 無断での引用、転載を禁じます。 記載内容は予告なしに変更されることがあります。*その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。
Intel、インテル、 Intel ロゴは、アメリカ合衆国およびその他の国における Intel Corporation またはその子会社の商標または登録商標です。
インテル® ソフトウェア開発製品
変更前と比較すると?
まとめ
OpenMP にも実装方法は幾つかある
もっとも効率良い方法を探すには効率良 法を探す
• スレッドがどのように動作しているか
• 各スレッドがどのデータを処理しているか
を知ることは重要
© 2010 Intel Corporation. 無断での引用、転載を禁じます。 記載内容は予告なしに変更されることがあります。*その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。
Intel、インテル、 Intel ロゴは、アメリカ合衆国およびその他の国における Intel Corporation またはその子会社の商標または登録商標です。
インテル® ソフトウェア開発製品
18
本資料に掲載されている情報は、インテル製品の概要説明を目的としたものです。製品に付属の売買契約書『Intel‘s Terms and conditions of Sales』に規定され
ている場合を除き、インテルはいかなる責を負うものではなく、またインテル製品の販売や使用に関する明示または黙示の保証 (特定目的への適合性、商品性
に関する保証、第三者の特許権、著作権、その他、知的所有権を侵害していないに関する保証、第三者の特許権、著作権、その他、知的所有権を侵害していないことへの保証を含む) に関しても一切責任を負わないものとします。
インテル製品は、予告なく仕様が変更されることがあります。
* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。
© 2010 Intel Corporation.
© 2010 Intel Corporation. 無断での引用、転載を禁じます。 記載内容は予告なしに変更されることがあります。*その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。
Intel、インテル、 Intel ロゴは、アメリカ合衆国およびその他の国における Intel Corporation またはその子会社の商標または登録商標です。
インテル® ソフトウェア開発製品1-35
Recommended