Download presentation
Presentation is loading. Please wait.
1
並列処理実用? 並列処理により、 現在時間がかかって実用しづらい処理を、 早くして実用にする 1時間 =1/10⇒ 6分
1時間 =1/10⇒ 6分 8時間 =1/10⇒ 48分 「ちょっと計算して試す」が可能になる
2
背景 マルチコアのCPUが入手可能になった PC教室に並んだPCを使える
Intel Xeon 4コア⇒近々8コアに AMD 8コアに PC教室に並んだPCを使える 夜や休暇期間などは空いている 個々のPCは「並み」でも、90台×4教室 ソフト環境(プラットフォーム・コンパイラ)も 徐々に整備されてきている
3
先行研究~山のようにある 2つのモデル ~ メモリ共有vsメッセージ プログラムもデータも共有できる 別CPUへのデータ受け渡し早い
プログラムもデータも共有しない 別CPUへのデータ受け渡し遅い 多CPUも可(数百~数千)
4
先行研究~山のようにある CPU×N台でも、N倍早くはならない 自明な問題もある ~ それを対象にしたい
(本質的に)どうしても直列部分がある 並列化の腕が悪いと、直列部分が増える N倍に近づける努力は大変 自動並列化は未だ課題が多い 今までは並列化するよりCPU高速化が安かった 自明な問題もある ~ それを対象にしたい
5
オープンな並列インタフェース? メモリ共有型 ⇒ OpenMP メッセージパシング型 ⇒ MPICH2
ライブラリが提供される、カーネルはLinux組み込み済み 自動コンパイラもいくつか存在(Intelなど) メッセージパシング型 ⇒ MPICH2 TCP/IPを使う ⇒ どうしてもオーバーヘッド大 ライブラリが提供される 自動は見かけない(無理?)
6
最初の実験環境 HPのサーバー:Xeon 4コア×2CPUで 8並列が可能なはず Linuxをインストールし利用可能 単純な並列度テスト
7
最初の実験環境(続) #!/bin/csh set N = 100000000 # Case of 1 process
#echo "" | pipebody $N #Case of 8 processes echo "" | pipebody $N | pipebody $N | pipebody $N | pipebody $N | pipebody $N | pipebody $ N | pipebody $N | pipebody $N
8
最初の実験環境(続) for (i=0; i<255; i++) bufin[i]='\0'; x = 0.0;
for (i=0; i<maxi; i++) { x = x + sin( (double) i/maxi ); } read(0, bufin, 256); printf("%s", strcat(bufin, "a")); fprintf(stderr, "%s", strcat(bufin, "a"));
9
最初の実験環境(結果) user system elapsed PCPU
プロセス1つ: 9.720u 0.028s 0: % 0+0k 0+0io 0pf+0w プロセス4つ: 38.814u 0.036s 0: % 0+0k 0+0io 0pf+0w プロセス8つ: 77.476u 0.020s 0: % 0+0k 0+0io 0pf+0w プロセス9つ: 87.301u 0.040s 0: % 0+0k 0+0io 0pf+0w プロセス12: u 0.028s 0: % 0+0k 0+0io 0pf+0w プロセス16: u 0.044s 0: % 0+0k 0+0io 0pf+0w
Similar presentations
© 2024 slidesplayer.net Inc.
All rights reserved.