計算機アーキテクチャ第 11 回 マルチプロセッサ 本資料は授業用です 無断で転載することを禁じます 名古屋大学 大学院情報科学研究科 准教授加藤真平
デスクトップ ジョブレベル並列性
スーパーコンピュータ 並列処理プログラム
プログラムの並列化 for (i = 0; i < N; i++) { x[i] = a[i] + b[i]; }
プログラムの並列化 x[0] = a[0] + b[0]; x[1] = a[1] + b[1]; x[2] = a[2] + b[2]; x[n-1] = a[n-1] + b[n-1];
逐次処理 計算ブロック 計算ブロック 計算ブロック 計算ブロック 計算ブロック 計算ブロック 計算ブロック 計算ブロック 計算ブロック 計算ブロック シングルコアの世界 コアの周波数を上げる 時間 for (i = 0; i < N; i++) { for (j = 0; j < M; j++) {... } } 繰り返し処理も逐次的にひたすら高速処理する
並列処理計算ブロック計算ブロック計算ブロック計算ブロック計算ブロック計算ブロック計算ブロック計算ブロック計算ブロック計算ブロック時間シングルコアの世界 コアの周波数を上げる計算ブロック計算ブロック計算ブロック計算ブロック計算ブロック計算ブロック計算ブロック計算ブロック計算ブロック計算ブロック時間コア数マルチコアの世界 コアを数個並べる コアの周波数は上げない プログラムを並列化する計算ブロック計算ブロック計算ブロック計算ブロック計算ブロック計算ブロック計算ブロック計算ブロック計算ブロック計算ブロック時間コア数メニーコアの世界 コアを数百から数千個並べる コアの周波数は下げる プログラムを並列化する
津波シミュレーション ( ロスアラモス国立研究所 & ワシントン大学 )
交通流 津波 核融合プラズマ 気象
共有記憶型マルチプロセッサ (SMP) Processor Processor Processor Cache Cache Cache Interconnect Main Memory I/O
クラスタ型マルチプロセッサ Processor Processor Processor Processor Cache Cache Cache Cache Main Memory Main Memory Main Memory Main Memory Interconnect
マルチコア ( チップマルチプロセッサ ) Processor Processor Processor Cache Interconnect Main Memory I/O
マルチスレッディング Thread Thread Processor Cache Interconnect Main Memory I/O
マルチスレッディング方式 時間 命令発行スロット スレッド A スレッド B スレッド C スレッド D
マルチスレッディング方式 命令発行スロット 粗粒度マルチスレッディング 細粒度マルチスレッディング 同時マルチスレッディング 時間
SISD, MIMD, SIMD SISD = Single Instruction stream, Single Data stream MIMD = Multiple Instruction stream, Multiple Data stream SIMD = Single Instruction stream, Multiple Data stream データレベル並列性 (for ループなど )
主流はマルチコア L3 Cache Memory 高々 10 個程度の CPU コアが 1 つの共有メモリに 均一的にアクセスする ソフトウェア的視点 1 つの OS カーネルで済む 開発環境が整っている 並列化の性能が出やすい
メニーコアの時代へ Memory Memory Cache Memory Memory Memory
Graphics Processing Unit (GPU) C 言語 C++ Java Maxwell Tesla Fermi Kepler Next Gen. 2008 2010 2012 2014 250コア 500 コア 3000 コア 5000 コア
Graphics Processing Unit (GPU) Host CPU GPU L3 Cache Host Memory I/O バス
GPU による並列処理 Thread Grid = (2, 2) Block = (3, 3)
GPU による並列処理
GPU による並列処理 Node = (2, 2)
加藤真平 計算機アーキテクチャ GPUによる並列処理 Cluster = (3, 3)
CUDA プログラミング void multiply(double *a, double *b, double *c, int n) { double product = 0.0; int row = blockidx.y * blockdim.y + threadidx.y; int col = blockidx.x * blockdim.x + threadidx.x; int i, idx; for (i = 0; i < n; i++) product += a[row * n + i] * b[i * n + col]; } c[row * n + col] = product; ほとんど C 言語と変わらないが複数のジョブが並列実行していることを意識してプログラミングする必要がある
CUDA プログラミング
GFLOPS GFLOPS/WATT 性能トレンド 6000 Single Precision Performance 25 Performance per Watt 5000 4000 3000 GTX 680 GTX Titan GTX Titan Black 2000 GTX 580 GTX 480 1000 8800 GTX GTX 285 9800 GTX X7350 X7460 X7560 E7-8870 E7-8890 0 2006 2008 2010 2012 2014 RELEASE YEAR NVIDIA GTX Intel Xeon 20 15 10 GTX Titan GTX 680 GTX Titan Black GTX 285 GTX 580 5 GTX 480 8800 GTX 9800 GTX E7-8890 E7-8870 X7350 0 X7460 X7560 2006 2008 2010 2012 2014 RELEASE YEAR NVIDIA GTX Intel Xeon 単精度浮動小数点性能 電力性能
General Purpose Computing on GPUs (GPGPU) CMD_HtoD CMD_HtoD CMD_LAUNCH CMD_DtoH Host Memory Host Memory Host Memory Host Memory GPU Code Input Data GPU Code Input Data GPU Code Input Data GPU Code Input Data Output Data copy copy copy GPU Code GPU Code Input Data GPU Code Input Data Output Data GPU Code Input Data Output Data Device Memory Device Memory Device Memory Device Memory
GPGPU の実行 CPU Start Mem Alloc End I/O Code Upload Data Upload Data Download GPU Parallel Execution Host Memory Device Memory Copy Copy Copy
Simulation time (ms) 交通流シミュレーションの例 1000000 100000 GPU (simple) GPU (data optimized) GPU (fully optimized) 10000 1000 CPU 1000x 100 10 GTX 560 Ti (192 cores) 100 1K 10K 100K 1M The number of agents
期末試験 7 月 24 日 4 限 資料の持ち込みなし 出題範囲 本講義で習った全範囲 教科書 ( 上下巻 ) 出題形式 必須問題 3 問 選択問題 2 問
レポート なぜ計算機アーキテクチャが大事なのか を自分なりに 4000~5000 字でまとめて提出 締切 :7 月 23 日 23 時 59 分 書式自由 (Word LaTex 等 ) shinpei@ertl.jp 宛にメールで添付して提出 件名は 計算機アーキテクチャ講義レポート としてください 本文に氏名と学籍番号を記載してください
計算機アーキテクチャの応用 ( 研究紹介 )