18. Frameworks
Plattform-Unabhängigkeit ?
Komfortabel OpenACC ? C++ AMP?
PyCUDA /
Besser Thrust?
PyOpenCL ?
CUDA Runtime
Praktisch
API C++ cl.hpp
Low Level CUDA Driver API Open CL
Hardware
26. Algorithmus
Für alle x,y,z in vol
sum = 0, c = 0
Für alle dx,dy,dz in Nachbarschaft
sum += vol[x+dx,y+dy,z+dz]
c += 1
vol‘[x,y,z] = sum / c Threads
31. Kernel-Konfiguration
x*y*z Threads Cores/SMs
Thread-Block / Work group / Tile
Grid / NDRange
0 1 2 3 4 5 6 7
0 T T T T T T T T
1 T T T T T T T T
2 T T T T T T T T
3 T T T T T T T T
4 T T T T T T T T
5 T T T T T T T T
6 T T T T T T T T
7 T T T T T T T T
46. Swapping & Streaming
Initialisierung
Parallel
Für alle „ungeraden“ Partitionen p
Kopiere H2D für p in s1
Rufe Kernel auf für p in s1
Asynchron
Kopiere D2H für p in s1
Für alle „geraden“ Partitionen q
Kopiere H2D für q in s2
Rufe Kernel auf für q in s2
Kopiere D2H für q in s2
58. Speicher-Architektur
GPU
Global Memory Global Memory
8-20 8-16
Constant Texture
Bus / Memory Controller
160-
L2 Cache
200
CPU 1 Prozessor (SM)
Core Core C C C C
8000
L1 / L2 L1 / L2
Registers
L3 Cache Local / Shared / L1 1600