More Related Content
PDF
PPTX
PPTX
PDF
ARM CPUにおけるSIMDを用いた高速計算入門 PDF
組み込み関数(intrinsic)によるSIMD入門 PDF
PPT
PDF
CUDAのアセンブリ言語基礎のまとめ PTXとSASSの概説 What's hot
PDF
Word Tour: One-dimensional Word Embeddings via the Traveling Salesman Problem... PDF
PDF
PDF
最近のKaggleに学ぶテーブルデータの特徴量エンジニアリング PPTX
PDF
PPTX
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~ PDF
PDF
最新リリース:Optuna V3の全て - 2022/12/10 Optuna Meetup #2 PDF
PDF
PDF
PDF
PDF
競技プログラミングにおけるコードの書き方とその利便性 PPTX
PDF
PDF
PostgreSQLの運用・監視にまつわるエトセトラ PDF
GPUが100倍速いという神話をぶち殺せたらいいな ver.2013 PPT
PDF
深層学習フレームワークにおけるIntel CPU/富岳向け最適化法 Viewers also liked
PDF
ロジスティック回帰の考え方・使い方 - TokyoR #33 ODP
PDF
PPTX
PDF
2014/5/29 東大相澤山崎研勉強会:パターン認識とニューラルネットワーク,Deep Learningまで PDF
2013.02.11 TGF+FGFシンポジウム 押川講演 Similar to 並列化による高速化
PDF
PDF
PDF
PPTX
PDF
PPT
PDF
PPT
PDF
PPTX
PDF
PDF
PPT
Algorithm 速いアルゴリズムを書くための基礎 PDF
PFDS 8.4.3 Real-Time Deques PDF
PDF
Purely functional data structures 8.2 日本語での説明 PDF
PDF
programming camp 2008, introduction of programming, algorithm PPTX
PDF
Parallel Computation Foundation's assignment 1 並列化による高速化
- 1.
- 2.
- 3.
- 4.
- 5.
どのくらい速くなるのか?
サンプル:
π(の近似値)を数値積
分で求める
(積分範囲を分割した長方形の高さ
をそれぞれ求め合計したものと、
長方形の幅を掛ける)
逐次プログラム
static long num_rects = 100000000;
(今回は一億個に分割する)
int main(){
double area;
double mid,height,width,sum=0.0;
int i;
width=1.0/(double)num_rects;
for(i=0;i<num_rects;i++){
mid=(i+0.5)*width;
height=4.0/(1.+mid*mid);
sum+=height;
}
area= width*sum;
printf(“πの値%fn",area);
return 0;
}
- 6.
どのくらい速くなるのか?
サンプル:
π(の近似値)を数値積
分で求める
(積分範囲を分割した長方形の高さ
をそれぞれ求め合計したものと、
長方形の幅を掛ける)
static long num_rects = 100000000;
(今回は一億個に分割する)
int main(){
double area;
double mid,height,width,sum=0.0;
int i;
width=1.0/(double)num_rects;
#pragma omp parallel for private(mid,height) reduction(+:sum)
for(i=0;i<num_rects;i++){
mid=(i+0.5)*width;
height=4.0/(1.+mid*mid);
sum+=height;
}
area= width*sum;
printf(“πの値%fn",area);
return 0;
}
OpenMPを用いて並列化
omp_set_num_threads()で
使用するスレッド数を変えて
繰り返し実行
それぞれの処理速度等を出力する
(コード省略)
並行プログラム
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
- 17.
- 18.
- 19.
- 20.
- 21.
- 22.
- 23.
- 24.
- 25.
1.再帰的
4 02 7 6 9 3 1 5 8
1 0 2 3 4 7 6 9 5 8
0 1 2 3 4 5 6 7 8 9
0 1 2 3 4 5 6 7 8 9
- 26.
1.再帰的
スレッドを作る
40 2 7 6 9 3 1 5 8
1 0 2 3 4 7 6 9 5 8
0 1 2 3 4 5 6 7 8 9
0 1 2 3 4 5 6 7 8 9
- 27.
1.再帰的
スレッドを作る
40 2 7 6 9 3 1 5 8
スレッドを作る
1 0 2 3 4 7 6 9 5 8
0 1 2 3 4 5 6 7 8 9
0 1 2 3 4 5 6 7 8 9
- 28.
1.再帰的
スレッドを作る
40 2 7 6 9 3 1 5 8
スレッドを作る
1 0 2 3 4 7 6 9 5 8
スレッドを作る
0 1 2 3 4 5 6 7 8 9
0 1 2 3 4 5 6 7 8 9
- 29.
1.再帰的
スレッドを作る
40 2 7 6 9 3 1 5 8
スレッドを作る
1 0 2 3 4 7 6 9 5 8
スレッドを作るスレッドを作る
0 1 2 3 4 5 6 7 8 9
0 1 2 3 4 5 6 7 8 9
- 30.
1.再帰的
スレッドを作る
40 2 7 6 9 3 1 5 8
スレッドを作る
1 0 2 3 4 7 6 9 5 8
スレッドを作るスレッドを作る
0 1 2 3 4 5 6 7 8 9
スレッドを作る
0 1 2 3 4 5 6 7 8 9
- 31.
1.再帰的
スレッドを作る
40 2 7 6 9 3 1 5 8
スレッドを作る
スレッドを作る
1 0 2 3 4 7 6 9 5 8
スレッドを作るスレッドを作るスレッドを作るスレッドを作る
0 1 2 3 4 5 6 7 8 9
スレッドを作るスレッドを作るスレッドを作る
0 1 2 3 4 5 6 7 8 9
- 32.
- 33.
- 34.
- 35.
- 36.
2.繰り返し
パーティションごとの基本操作
40 2 7 6 9 3 1 5 8
調べる
大きい
パーティション
小さい
入れ替え
ピボットより
逐次プログラム
キュー
パーティションの範囲のデータ
キューが空になるまで繰り返す
並列化してみる
- 37.
- 38.
- 39.
- 40.
- 41.
- 42.
- 43.
- 44.
- 45.
- 46.
- 47.
- 48.
- 49.
- 50.
- 51.
- 52.
- 53.
- 54.
- 55.
- 56.
- 57.
- 58.
2.繰り返しー処理の終了
キュー
スレッドスレッドスレッド
スレッド
スレッド内の処理中
・パーティションの要素数が1になった時
・ピボットでの分割時
ある1要素が正しい位置になる
共有カウンタ
全てのソートが終わると
共用カウンタの値が要素数
と等しくなる
同期オブジェクト
Qの要素数を表す正のカウンタ
- 59.
2.繰り返しー処理の終了
キュー
スレッド数を加算
スレッドスレッドスレッド
スレッド
スレッド内の処理中
・パーティションの要素数が1になった時
・ピボットでの分割時
ある1要素が正しい位置になる
共有カウンタ
全てのソートが終わると
共用カウンタの値が要素数
と等しくなる
同期オブジェクト
Qの要素数を表す正のカウンタ
- 60.
2.繰り返しー処理の終了
キュー
スレッド数を加算
スレッドスレッドスレッド
スレッド
スレッド内の処理中
・パーティションの要素数が1になった時
・ピボットでの分割時
ある1要素が正しい位置になる
共有カウンタ
全てのソートが終わると
共用カウンタの値が要素数
と等しくなる
同期オブジェクト
Qの要素数を表す正のカウンタ
参照&
Break文で脱出
- 61.
- 62.
- 63.
- 64.