計算機アーキテクチャ第11回
マルチプロセッサ
本資料は授業用です。無断で転載することを禁じます。 名古屋大学 大学院情報科学研究科 准教授 加藤真平デスクトップ
ジョブレベル
並列性
スーパーコンピュータ
並列処理
プログラム
プログラムの並列化
for (i = 0; i < N; i++) {
x[i] = a[i] + b[i];
プログラムの並列化
x[0] = a[0] + b[0];
・・・
逐次処理
計算 ブロック 計算 ブロック 計算 ブロック 計算 ブロック 計算 ブロック 計算 ブロック 計算 ブロック 計算 ブロック 計算 ブロック 計算 ブロック 時間 シングルコアの世界 ・コアの周波数を上げる for (i = 0; i < N; i++) { for (j = 0; j < M; j++) { . . . } }繰り返し処理も逐次的にひたすら高速処理する
並列処理
計算 ブロック 計算 ブロック 計算 ブロック 計算 ブロック 計算 ブロック 計算 ブロック 計算 ブロック 計算 ブロック 計算 ブロック 計算 ブロック 時間 シングルコアの世界 ・コアの周波数を上げる 計算 ブロック 計算 ブロック 計算 ブロック 計算 ブロック 計算 ブロック 計算 ブロック 計算 ブロック 計算 ブロック 計算 ブロック 計算 ブロック 時間 コア数 マルチコアの世界 ・コアを数個並べる ・コアの周波数は上げない ・プログラムを並列化する 計算 ブロック 計算 ブロック 計算 ブロック 計算 ブロック 計算 ブロック 計算 ブロック 計算 ブロック 計算 ブロック 計算 ブロック 計算 ブロック 時間 コア数 メニーコアの世界 ・コアを数百から数千個並べる ・コアの周波数は下げる ・プログラムを並列化する津波シミュレーション
交通流
核融合プラズマ
共有記憶型マルチプロセッサ(
SMP)
Processor Processor
・・・
ProcessorCache Cache Cache
Interconnect
クラスタ型マルチプロセッサ
・・・
Processor Cache Main Memory Processor Cache Main Memory Processor Cache Main Memory Processor Cache Main MemoryInterconnect
マルチコア(チップマルチプロセッサ)
Processor・
・
・
CacheInterconnect
Main Memory I/O
Processor Core Processor
マルチスレッディング
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
主流はマルチコア
Memory L3 Cache Core L1 L2 Core L1 L2 Core L1 L2 Core L1 L2 高々10個程度のCPUコアが、1つの共有メモリに、均一的にアクセスする。 1つのOSカーネルで済む 開発環境が整っている 並列化の性能が出やすい ソフトウェア的視点メニーコアの時代へ
L2 Cache L1 L1 L1 L1 L1 L1 L1 L1 Memory Core L1 L2 Core L1 L2 Core L1 L2 Core L1 L2 Core L1 L2 Core L1 L2 Core L1 L2 Core L1 L2 Core L1 L2 Core L1 L2 Core L1 L2 Core L1 L2 Core L1 L2 Core L1 L2 Core L1 L2 Core L1 L2 Memory Memory Memory MemoryGraphics Processing Unit (GPU)
2008 20102012
3000コア 500コア 250コア2014
Tesla Fermi Kepler Maxwell Next Gen. C言語 C++ Java 5000コアGraphics Processing Unit (GPU)
Host Memory L3 Cache Core L1 L2 Core L1 L2 Core L1 L2 Core L1 L2 I/Oバス Host CPU GPUGPUによる並列処理
Grid = (2, 2)
Block = (3, 3)
GPUによる並列処理
GPUによる並列処理
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言語と変わらないが複数のジョブが並列実行 していることを意識してプログラミングする必要がある。
性能トレンド
単精度浮動小数点性能 電力性能 8800 GTX 9800 GTX GTX 285GTX 480 GTX 580 GTX 680 GTX Titan GTX Titan Black X7350 X7460 X7560 E7-8870 E7-8890 0 1000 2000 3000 4000 5000 6000 2006 2008 2010 2012 2014 G FL O PS RELEASE YEARSingle Precision Performance
NVIDIA GTX Intel Xeon 8800 GTX 9800 GTX GTX 285 GTX 480GTX 580 GTX 680 GTX Titan GTX Titan Black X7350 X7460 X7560 E7-8870 E7-8890 0 5 10 15 20 25 2006 2008 2010 2012 2014 G FL O PS/W A TT RELEASE YEAR
Performance per Watt
NVIDIA GTX Intel Xeon
CMD_HtoD CMD_HtoD CMD_LAUNCH CMD_DtoH GPU Code Input Data Host Memory GPU Code Input Data Device Memory GPU Code Input Data Host Memory GPU Code Input Data Device Memory GPU Code Input Data Host Memory GPU Code Device Memory GPU Code Input Data Host Memory Device Memory
General Purpose Computing on
GPUs (GPGPU)
GPU Code Output Data Output Data copy Input Data copy Output Data copyGPGPUの実行
Start Code Upload Mem Alloc Data Upload Data Download EndCPU
I/O
GPU
ParallelExecutionHost
Memory Device Memory
10 100 1000 10000 100000 1000000 100 1K 10K 100K 1M Simula tion t ime (ms)
The number of agents
GPU (simple)
GPU (data optimized) GPU (fully optimized) CPU
1000x
GTX 560 Ti (192 cores)