GPU 4 2010 8 28 1 GPU CPU CPU CPU GPU GPU N N CPU ( ) 1 GPU CPU GPU 2D 3D CPU GPU GPU GPGPU GPGPU 2 nvidia GPU CUDA 3 GPU 3.1 GPU Core 1
Register & Shared Memory ( ) CPU CPU(Intel Core i7 965) GPU(Tesla C1060) CPU GPU 51.20Gflops * 1 933Gflops Core 4 240 38.4GB/s * 2 102GB/s (L2,L3) 3.2 GPU CUDA OpenCL 2 CUDA nvidia C++ nvidia GPU OpenCL (CPU ) C GPGPU GPU CPU CUDA CUDA nvidia GPU 3.3 2 1 1 4 GPU CPU GPU 2
GPU Register&Shared Memory Global Memory Local Memory CPU GPU Register Shared Memory No Wait Register Shared Memory Register 16384 (64KB) Shared Memory 16KB GPU Global Memory CPU Register Shared Memory Register Shared Memory 100 1 Global Memory 100 1 3.4 Processor GPU Streaming Processor(SP) DP SFU SP 8 DP 1 SFU 2 Shared Memory Streaming Multiprocessor(SM) SP (2FLOPs) SFU 4 1SM 1Cycle 24FLOPs 1 GPU (Tesla C1060 30) (Tesla 1.3GHz) Tesla C1060 936GFLOPs DP 1Cycle 2FLOPs 12 1 SP 2 SFU SP SFU CPU GPU SP SFU 4cycle SP 32 32 1Warp 3
3.5 CUDA Thread Block Grid Processor Thread 1SP Thread SP Register Thread Block 1Block 1SM Block Shared Memory Block Grid GPU 1Grid Grid C 1 Grid GPU 4 CUDA CUDA GPU CPU 4.1 GPU 1Warp SP 1Warp 32Thread True False True False Thread False True Thread n GPU 2 n divergent branch 4.2 Global Memory Global Memory 32byte 64byte 128byte 32 64 128 Address 4byte Thread Global Memory GPU Thread Global Memory 16Thread Coalescing Coalescing Coalescing 16Thread Global Memory Address Thread 32 64 128 Address 4
4.3 Shared Memory Shared Memory 16Thread Shared Memory 16Bank Bank Shared Memory 4byte Shared Memory Bank0 Shared Memory Address 0 64 128 Shared Memory Bank1 1 Thread 4byte 2 Bank 2 Bank ( ) Shared Memory Shared Memory bank conflict Global Memory 16Thread Bank Shared Memory bank conflict Thread 4.4 Register Register Bank conflict nvidia Thread 64 Register Memory bank conflict Register Local Memory Local Memory Global Memory Register 1Thread 60 -maxrregcount 4.5 1SM 1 Block Global Memory Block Block Global Memory 1SM Block 1 SM Block 8 1 SM Thread 1024 Block Register Shared Memory 8 1024 / Thread per Blcok 16384byte / Shared Memory per Block 16384 / (Register per Thread Thread per Block) Block 4.5.1 Occupancy 1SM 1024Thread 1SM 1024 Occupancy 1.0 Occupancy 2 Register 4 1Block 64Thread 5
1SM 256Thread Occupancy 0.25 4.6 Thread 1 SM Thread 768or1024 Thread 768 Register Memory bank conflict 64 1SM 1024Thread 1SM Block 8 128 128 192 256 nvidia Reference Manual 192 256 Thread Shared Memory Register 1SM 1024Thread Block 64Thread 4.7 Block 1 SM Block 8 GPU 1 30SM 240Block GPU GPU Reference Manual 1000Block GPU Block 4.8 Thread GPU Shared Memory Register GPU 5 GPU GPU 5.1 1 t + t (2 4 ) 6
Block 1024 1024 Block 128 8 Block 1024 Block Thread Block 1 Thread Thread y Block Thread 128 Thread1 8 Thread Global Memory Register Thread Shared Memory Register Shared Memory Global Memory 1 Register Swap Shared Memory 1 Thread Register Shared Memory Block Thread Shared Memory Register Shared Memory Thread1 8 Shared Memory Thread Register Shared Memory CPU 50 CPU 5.2 2 3 ( ) t CFL CIP dx Flow Flow x Shared Memory y Register 7
3 Thread x y z Thread 2 2 5.3 Lax-Wendroff Lax-Wendroff Lax-Wendroff 2 Roe Lax-Wendroff Lax-Wendroff Half-Step Full-Step 2 2D Half-Stpe (i + 1/2, j + 1/2) Flux (i, j) (i + 1, j) (i, j + 1) (i + 1, j + 1) Full-Step dt (i, j) (i 1/2, j 1/2) (i + 1/2, j 1/2) (i 1/2, j + 1/2) (i + 1/2, j + 1/2) Half-Step Flux 1 1 dt 5 9 Shared Memory Shared Memory Register 5 Lax-Wendroff Register 5.4 CFL Lax-Wendroff CFL dt GPU 10% CFL dt dt dt Shared Memory bank conflict divergent branch 1SM 256 256Thread dt 128Thread 2 Shared Memory 1Thread 5.5 CPU GPU CPU OpenMP for 1 4 3.9 8 4.1 97% 103% 2CPU 2CPU for MPI MPI CPU GPU1 GPU2 CPU Core i7 920(42.56GFLOPs) 8
Memory 3GB 25.6GB/s(DDR3-1066 Triple Channel) GPU GeForce GTX 260(875GFLOPs) GPU Bandwidth 118GB/s OS Ubuntu Desktop 10.04 CC gcc 4.3.4 + OpenMP NVCC CUDA 3.0 + gcc 4.3.4 Grid 2D 1024x1024 3D 120x126x32 Step LW 828 Roe 1024 CPU GPU CPU GPU 2D 64(s) 1.44(s) 3D 76(s) 1.98(s) 2D 5.59GFLOPs 248GFLOPs 3D 4.21GFLOPs 181GFLOPs 2D 13.1% 28.3% 3D 9.9% 20.6% Lax-Wendroff CPU GPU 50.7(s) 2.24(s) 4.43GFLOPs 100GFLOPs 10.4% 11.4% CPU GPU GPU CPU CPU GPU Shared Memory Shared Memory CPU 1 1Step Roe 2D 357 3D 661 Lax-Wendroff 278 Lax-Wendroff 2 Roe 1 Lax-Wendroff 5.6 (x,y,z) 2 4 3 5 ( 64Thread ) LW Roe2D Roe3D Register 65536Byte 18688Byte 12288Byte 20480Byte Shared 16384Byte 3692Byte 2416Byte 5672Byte 8 3 4 2 9
Shared Memory 2 Thread 64 4byte Shared Memory 1056byte flow 16384byte Lax-Wendroff 2 Flow 3 3 x-thread 16 y-thread 4 ( ) Shared Memory 2160byte Flow 1700byte Register Register Shared Memory Shared Memory Global Memory 1024 1024 34MB 10 Tesla C1060 GPU Global Memory 4GB 5.7 GPU 1bit 10 Lax-Wendroff 6 6.1 Thread Flow Thread Thread Flow Flow Flow 2 Flow Register Shared Memory 2 Thread if 1 Thread 2 Flow Thread Flow if Thread 1 Flow Thread 1 Thread x x Block 1 2 3 3 10
7 nvidiagpu nvidiagpu 7.1 GT8X,GT9X CUDA GT8X GT9X GT200 1SM Thread 768 1SM Register 8192 Coalescing Coalescing Thread0 Global Memory 32 64 128 Coalescing 10 1 G200 2 Coalescing 1.5 1 7.2 GT200 GT200 1SM 8SP + 1DP + 2SFU 1SM Thread 1024 1SM Register 16384 7.3 GF100 nvidia GPU Tesla C20XX GF100 GF100 GT200 1SM 32CUDA Core + 4SFU(DP ) SP (2Cycle)(Tesla ) L1 (Shared ) L2 GDDR5 ECC (Tesla ) 64bit 1SM 32Thread GT200 8SP 4Cycle 32CUDA Core 1Cycle ( Shared Memory ) CUDA Core SP (DP) CUDA Core 2Cycle 12 1 2 1 L1 Shared Memory 64KB 16KB 48KB GT200 L1 GF100 Shared Memory 48KB Shared Memory 1CUDA Core 48KB Core 4 16Thread 2Cycle GT200 32Thread 11
1Cycle GF100 Shared Memory L2 768KB L1 Shared Memory Register Global Memory Global Memory GDDR5 ECC non ECC 64bit Tesla C2070 6GB GT200 Tesla GeForce GF100 ECC Tesla GPU GT200 ECC GeForce 8 GPU Lax-Wendroff 2 Roe 1 2 2 MHD 2 Shared Memory Register GF100 GPU 12