Introduction to GPU Programming - Ege Üniversitesi Fen Fakültesi

Transkript

Introduction to GPU Programming - Ege Üniversitesi Fen Fakültesi
Alptekin Temizel
[email protected]
Seminer Programı
 13:00-13:15 TR-GRID tanitim sunumu
 13:15-14:30 GPU Programlamaya Giriş, Alptekin Temizel



GPU’ların tarihi ve GPU’lar üzerinde genel amaçlı programlama (GPGPU)
GPGPU uygulama alanları, avantaj ve dezavantajları
PC ve GPU mimarisi
 14:30-14:45 Ara-1
 14:45-16:30 CUDA ve OpenCL Temelleri, Alptekin Temizel







CUDA’ya giriş
CUDA programlama yapısı
Örnek kodlar üzerinden anlatım
OpenCL’e giriş
OpenCL programlama yapısı
CUDA ve OpenCL benzerlik ve farklılıkları
Örnek kodlar üzerinden anlatım
 16:30-16:45 Ara-2
 16:45-17:30 Supercomputing at 1/10th of the Cost, Edmondo Orlotti, NVIDIA
 17:30-18:15 Açık oturum
CUDA Teaching Center
 Professor Partnership Award – Temmuz 2009
 CUDA Teaching Center – Aralık 2010
Kitaplar - 1
 David B. Kirk and Wen-mei W. Hwu “Programming Massively
Parallel Processors: A Hands-on Approach”
Morgan Kaufman,
ISBN-10: 0123814723,
ISBN-13: 978-0123814722.
Kitaplar - 2
 H. Bidgoli, “CUDA by Example: An Introduction to
General-Purpose GPU Programming”, Addison Wesley,
ISBN-10: 0131387685, ISBN-13: 978-0131387683.
Kitaplar - 3
 Wen-mei W. Hwu (Editor), “GPU Computing Gems”,
ISBN-10: 0123849888, ISBN-13: 978-0123849885.
Chapters
1. Scientific Simulation
2. Life Sciences
3. Statistical Modeling
4. Emerging Data-Intensive Applications
5. Electronic Design Automation
6. Ray Tracing and Rendering
7. Computer Vision
8. Video and Image Processing
9. Signal and Audio Processing
10.Medical Imaging
Kaynaklar
 NVIDIA Developer Zone,
http://developer.nvidia.com/page/home.html
 OpenCL Developer Zone,
http://www.khronos.org/opencl/
GPU Programlamaya Giriş
1.
i.
ii.
iii.
GPU’ların tarihi ve GPU’lar üzerinde genel
amaçlı programlama (GPGPU)
GPGPU uygulama alanları, avantaj ve
dezavantajları
PC ve GPU mimarisi
Graphics Processing Unit (GPU) (1)
 Graphics Processing Unit/Grafik İşleme Ünitesi (GPU)
yoğun matematiksel hesaplamaları yapmak üzere
tasarlanmış tek-çip işlemcilerdir.
Ref: http://www.eng.unt.edu/ian/classes/spring07/csce4930-5933/
Graphics Processing Unit (GPU) (2)
 GPU’lar aslen grafik canlandırma (rendering) ve oyunlar için
geliştirilmişlerdir.
 PC’ler, oyun konsolları, gömülü sistemler ve cep
telefonlarında bulunurlar.
 Ev kullanıcıları için genelde oyun amaçlı kullanılırlarken
profesyonel kullanıcılar tarafından CAD uygulamaları and
CGI için kullanılırlar.
 Piyasadaki büyük oyuncular: ATI/AMD, Intel ve NVIDIA
Graphics Processing Unit (GPU) (3)
 GPU pazarı hareketlenmektedir,
 CPU üreticileri GPU’larla ilgilenmeye başlamıştır.
 AMD, ATI firmasını 2006 yılında satın almıştır.
 Intel CPU-GPU hibrit mimariler üzerinde
çalışmaktadır
Programlamada bir paradigma kayması?
Daha önceden mümkün olmayan uygulamalar
mümkün mü olacak?
Graphics Processing Unit (GPU) (4)
 GPU’lar oldukça hızlıdır:
 NVIDIA GTX 580: 5120 çekirdek, ~1581 GFLOPS (teorik)
 Intel i7 920 (2,66 GHz): 4 çekirdek, ~69 GFLOPS
 GPU’lar daha hızlı hızlanmaktadır!
 CPU: yıllık gelişme : 1.5×  On yıllık gelişme ~ 60×
 GPU: yıllık gelişme > 2.0×  On yıllık gelişme > 1000x
GPU vs. CPU Performance
GPU Performans Tahminleri
 Nvidia Chief Scientist William Dally’nin tahminlerine
göre grafik çipleri 2015 yılında;
 5000 çekirdeğe sahip olacak,
 yaklaşık 20TFLOPs işlem gücü sağlayacak,
 ve 11nm üretim teknolojisiyle üretilecekler.
En hızlı 500 süper bilgisayar-kasım 2010
Rank
Site
Computer/Year Vendor
Cores
Rmax
1
National Supercomputing
Center in Tianjin
China
Tianhe-1A - NUDT TH MPP, X5670
2.93Ghz 6C, NVIDIA GPU, FT-1000 8C /
2010
NUDT
186368
2566.00 4701.00
4040.00
2
DOE/SC/Oak Ridge National Jaguar - Cray XT5-HE Opteron 6-core 2.6
Laboratory
GHz / 2009
United States
Cray Inc.
224162
1759.00 2331.00
6950.60
3
National Supercomputing Nebulae - Dawning TC3600 Blade, Intel
Centre in Shenzhen (NSCS) X5650, NVidia Tesla C2050 GPU / 2010
China
Dawning
120640
1271.00 2984.30
2580.00
4
GSIC Center, Tokyo
Institute of Technology
Japan
TSUBAME 2.0 - HP ProLiant SL390s G7
Xeon 6C X5670, Nvidia GPU,
Linux/Windows / 2010
NEC/HP
73278
1192.00 2287.63
1398.61
5
DOE/SC/LBNL/NERSC
United States
Hopper - Cray XE6 12-core 2.1 GHz / 2010
153408
Cray Inc.
1054.00 1288.63
2910.00
Kaynak: www.top500.org
Rpeak
Power
Paralel İşleme: GPU
 Sağladıkları işlem gücü ve esneklikleri GPU’ları genel
amaçlı hesaplama işlemleri için ilgi çekici konuma
getirmiştir.
 Hedef: GPU’nun düşük maliyetle sağladığı gücü
uygulama geliştiricilere bir yardımcı işlemci olarak
sunmak.
Massively Parallel Computing
Çok Büyük Ölçekte Paralel Hesaplama
Courtesy David Luebke, University of Virginia
GPU Tabanlı Kümeler
Kümeler ve veri merkezi uygulamaları için NVIDIA
Tesla 1U işlem üniteleri:
Gömülü Sistemler: Tegra Platformu
Cep telefonları, tablet PC’ler ve benzeri cihazlar için tasarlanmış
system-on-a-chip serisi:
Tegra 2: 2 çekirdekli CPU + GPU (1920x1080 HD video decode)
Tegra 3: 4 çekirdekli CPU + GPU (2560x1600 HD video decode)
GPU’ları kullanmak zordur
 GPU’lar bilgisayar oyunları için tasarlanmıştır:
 Programlama modeli farklıdır ve grafik
uygulamalarına yönelik tasarlanmıştır
 Programlama ortamı kısıtlı kullanıma sahiptir
 Mimarileri:
 Doğası gereği paraleldir
 Hızla gelişmektedir (temel özellik kümeleri bile!)
 Çoğunlukla ticari gizlidir
 CPU için yazılmış bir kodu uyarlamak güçtür.
Courtesy David Luebke, University of Virginia
GPU’ları kullanmak zordu
 GPU’lar bilgisayar oyunları için tasarlanmakla beraber
artık genel amaçlı programlama da düşünülerek
tasarlanmaktadır.
 Programlama modeli ve geliştirme ortamları artık daha
genel ve kullanıcı dostudur.
 Mimarileri:
 Doğası gereği paraleldir (ancak programlamak daha
kolaydır)
 Hızla gelişmektedir (ancak standartlara sahiptir)
 Çoğunlukla ticari gizlidir (ancak mimariden bağımsız
programlayabiliriz)
 Programlama yapıları CPU’dakilere artık daha çok
benzediği için CPU için yazılmış bir kodu uyarlamak daha
kolaydır
The Ox vs. Chicken Analogy (1)
“ If you were plowing a field, which would you rather
use: Two strong oxen or 1024 chickens? ”
“Eğer bir tarlayı sürüyor olsaydınız 2 öküz kullanmayı
mı yoksa 1024 tavuk kullanmayı mı tercih ederdiniz?”
Seymour Cray (1925-1996)
Founder of Cray Research
The Ox vs. Chicken Analogy (2)
4 çekirdek
CPU + GPU Eş-işleme
Heterojen Hesaplama
The Ox vs. Chicken Analogy (3)
 CPU’nun iyi olduğu işler:
 Sıralı işlemler,
 I/O işlemleri,
 Program akışı.
 GPU ise çok büyük ölçekte paralel hesaplama
(massively parallel calculations) konusunda iyidir.
GPU Programlama
 Programlama grafik API’ı üzerinden yapılmak
zorundaydı. Bu esnek değildi ve pek çok limiti vardı.
 GPGPU: General Purpose computation on the GPU
– GPU üzerinde genel amaçlı programlama
CUDA
 Compute Unified Device Architecture
 NVIDIA tarafından geliştirilmiştir
 Temel olarak genişletilmiş C programlama dilidir
OpenCL
 Apple önderliğinde AMD, IBM, Intel ve NVIDIA’dan
teknik takımların desteği ile geliştirilmiştir.
 OpenCL 1.0 Mayıs 2009’da yayınlanmıştır.
 OpenCL 1.1 ise Haziran 2010’da yayınlanmıştır.
 Halen geliştirilmeye devam etmektedir.
Stream Framework
 AMD/ATI’in GPU programlama çözümüdür.
 Stanford Üniversitesi tarafından geliştirilmiş olan
Brook üzerine inşa edilmiştir.
 ATI Stream OpenCL desteklemektedir.
DirectCompute
 Microsoft tarafından geliştirilmiştir ve Windows 7
destekler.
 DirectX 11 API’nın bir parçasıdır.
 GPU donanımının tipinden bağımsızdır.
Google Arama Sonuçları
21 Şubat 2011 tarihi Google arama sonuçları:
GPU Üreticileri ve GPGPU
 NVIDIA: Kolay kullanıma sahip ve hızlı performanslı
ürünleri ile şu an lider konumdadır.
 AMD/ATI: Yakın performans sağlamasına rağmen
geliştirme araçları daha az gelişkin durumdadır.
 Intel: Yakın zamanda rekabete katılacağı
beklenmektedir.
CPU-GPU Hibrit İşlemciler:
AMD Fusion
 AMD tarafından Fusion APU yani hızlandırılmış işlemci birimi olarak
tanımlanan CPU+GPU tabanlı yeni nesil mikroişlemci tasarımları için ilk
etapta dört yeni model lanse edildi.
5 Ocak 2011, kaynak:DonanımHaber
CPU-GPU Hibrit İşlemciler:
Intel Larrabee
 Intel Larrabee x86 uyumlu mimarisi ve önbellek
tasarımı CPU benzeri, geniş SIMD vektör uniteleri ve
and texture donanımı GPU benzeri bir işlemcidir.
Intel Larrabee projesini durdurarak geleneksel ayrık
CPU-GPU mimarilerine devam etmeye karar verdi.
CPU-GPU Hibrit İşlemciler:
NVIDIA
Jen-Hsun Huang, CEO, NVIDIA:
“Now is time for innovation, not for integration”
“Şimdi entegrasyon zamanı değil yenilik zamanı”
Heterojen Hesaplama
Grafik
Paralel İşleme
GPU
(Paralel İşleme)
Kontrol ve İletişim
CPU
(Sıralı İşleme)
Üretkenlik Uygulamaları
Veri Yoğun Uygulamalar
GPU Programlamaya Giriş
1.
i.
ii.
iii.
GPU’ların tarihi ve GPU’lar üzerinde genel
amaçlı programlama (GPGPU)
GPGPU uygulama alanları, avantaj ve
dezavantajları
PC ve GPU mimarisi
GPU Hesaplama Alanları
Petrol ve
Gaz
Finans
Medikal
Biofizik
Hesaplama
Ses
Video
Görüntü
İşleme
GT200 Mimarisi
Yeni Nesil Fermi Mimarisi
 “Fermi” kod isimli GPUlar Mart 2010’da GTX 400





serisinde piyasaya sürüldü, yeni GTX 500 serisi de
bu mimariyi kullanmaktadır.
GPU’lar GF10x olarak adlandırılır.
Daha yüksek sayıda çekirdeğe sahiptirler.
C++ doğal desteği vardır.
8 kata kadar double precision performansı
sağlayabilirler.
Daha büyük shared memory’leri vardır.
Yeni Nesil Fermi Mimarisi
Son kullanıcı kartlarında (GeForce serisi), double precision performansı
Fermi mimarisinin sağladığı kapasitenin ¼’üne sınırlandırılmıştır.
GPU Hesaplama Örnekleri (1)
CPU
Intel i7 920, 2.66 GHz, Windows 7 Professional (32 Bit)
GPU1
NVIDIA Quadro FX 5800, 240 Cores, Processor Clock: 1.3 GHz
Memory: (512bit), 4GB
GPU2
NVIDIA GeForce GTX 285 , 240 cores, Processor Clock: 1.476 GHz
Memory Clock: 1.242 GHz (512bit), 1 GB
GPU3
NVIDIA GeForce 9800GT, 112 cores, Processor Clock: 1.5 GHz
Memory Clock: 900 MHz (256bit), 1 GB
GPU4
ATI HD 5750, 720 Stream Processing Units, Engine Clock: 700 MHz
Memory Clock: 1.15 GHz, 1 GB
GPU Hesaplama Örnekleri (2)
Video arkaplan çıkarımı
GPU Hesaplama Örnekleri (3)
3158
Video arkaplan çıkarımı
2722
3500
1315
160X120
320X240
860
640X480
102
35
9
7
156
51
16
11
440
720X576
116
30
22
332
237
570
440
216
138
500
345
102
27
20
1000
458
348
1500
637
1130
1438
2000
1731
2500
125
30
7
5
Number of Cameras
3000
OpenCL
OpenCL
0
Serial
OpenMP
CPU
Cuda
OpenCL
GPU1
Cuda
OpenCL
GPU2
Cuda
GPU3
Device/Framework
GPU4
(ATI)
Video arkaplan çıkarımı algoritması için gerçek zamanlı olarak
maksimum desteklenen kamera sayısı (I/O not included).
En pahalı kart işinizi en iyi görecek kart olmayabilir
GPU Hesaplama Örnekleri (4)
257
330
233
228
222
250
247
300
98
160X120
320X240
13
11
37
73
7
5
9
6
24
18
32
132
103
27
20
87
100
50
135
112
79
108
128
103
102
150
125
200
30
Number of Cameras
350
312
338
345
400
355
Video arkaplan çıkarımı
0
Serial
OpenMP
CPU
Cuda
OpenCL
GPU1
Cuda
OpenCL
GPU2
Device/Framework
Cuda
OpenCL
GPU3
OpenCL
GPU4 (ATI)
Video arkaplan çıkarımı algoritması için gerçek zamanlı olarak
maksimum desteklenen kamera sayısı (I/O included).
Hafıza işlemleri gerçek performansı önemli biçimde etkileyebilir
640X480
720X576
GPU Hesaplama Örnekleri (5)
596
Video arkaplan çıkarımı
446
532
600
160X120
320X240
180
224
640X480
720X576
20
26
20
27
94
102
5
7
100
30
200
156
197
300
271
345
400
125
Number of Camera
397
500
0
Serial
OpenMP
CPU
Cuda
Cuda
Cuda
GPU1
Device/Framework
GPU2
GPU3
Video arkaplan çıkarımı algoritması için gerçek zamanlı olarak
maksimum desteklenen kamera sayısı (Asynchronous I/O).
Düzgün bir tasarım ve optimizasyon performansı önemli biçimde etkileyebilir
GPU Hesaplama Örnekleri (6)
8,00
7,80
7,30
9,00
8,30
10,00
9,00
Video arkaplan çıkarımı
7,00
4,37
3,89
5,00
4,00
1,00
0,96
0,92
0,79
2,00
1,73
3,00
CUDA
1,54
Gain
6,00
1,00
0,00
160X120 320X240 640X480 720X576 160X120 320X240 640X480 720X576 160X120 320X240 640X480 720X576
GPU1 (FX 5800)
GPU2 (GTX 285)
Device / Video Size
GPU3 (9800 GT)
GPUs vs. OpenMP CPU (Intel i7 920) versiyonları kazanç sonuçları
Küçük verilerle en iyi kazanç elde edilemeyebilir.
GPU Hesaplama Örnekleri (7)
89,84
Pearson cross correlation
61,94
80,00
71,29
74,15
90,00
48,97
15,93
12,01
5,06
1024
4096
6,45
6,81
8192
12,24
6,60
6,75
4096
2048
7,00
7,04
2048
CUDA
6,51
6,79
10,00
10,18
13,25
20,00
8,49
10,65
30,00
Open CL
20,03
25,84
40,00
38,37
32,28
40,98
50,00
16,90
21,18
Gain
60,00
1024
70,00
GPU1 (FX 5800)
GPU2 (GTX 285)
GPU3 (9800 GT)
Device / Number of Images
8192
8192
4096
2048
1024
8192
4096
2048
1024
0,00
GPU4 (ATI 5750)
160x120 imgeler için Pearson cross correlation gerçeklenmesinin
OpenMP CPU versiyonuna kıyasla kazanç miktarları.
Özet
 GPU’ların hesaplama hızlarını önemli ölçüde hızlandırma




potansiyelleri vardır.
Algorithmaların paralelleştirilebiliyor olması gereklidir.
Hafıza işlemleri darboğaz yaratabilir.
Geliştirme, optimizasyon and hata ayıklama daha güç
olabilir.
Uygulama için uygun GPU en pahalısı olmayabilir. Farklı
GPU’lar test edilerek karar verilmelidir.
Tüm problemler GPU’da gerçeklemeye uygun değildir.
GPU kullanımına eldeki probleme göre karar verilmesi faydalı olacaktır.
GPU Programlamaya Giriş
1.
i.
ii.
iii.
GPU’ların tarihi ve GPU’lar üzerinde genel
amaçlı programlama (GPGPU)
GPGPU uygulama alanları, avantaj ve
dezavantajları
PC ve GPU mimarisi
Bant Genişliği
 Farklı parçalar arasındaki bant genişliği sistem
performansını önemli ölçüde etkiler
 Bu büyük veriler işleyen çok büyük ölçüde paralel
sistemler için özellikle geçerlidir.
 Tamponlama (buffering), yeniden sıralama, önbellek
(cache) kullanma gibi yöntemler bu dezavantajı bir
miktar gizlemeye yardımcı olabilir.
 Nihayetinde, performans veri sağlanabilecek hızla
sınırlıdır.
PCIe PC Mimarisi
• PCIe birleştirme iskeletini
oluşturur
– Northbridge/Southbridge :
PCIe anahtarlarıdır (switch)
– Bazı Southbridge dizaynları
kendi içinde PCI-PCIe
köprüsü barındırarak eski
PCI kartlarını destekler
– Bazı PCIe karları PCI-PCIe
köprüsü barınıdıran PCI
kartlarıdır
Source: Jon Stokes, PCI Express: An Overview:
http://arstechnica.com/articles/paedia/hardware/
pcie.ars
PCIe linkleri ve şeritleri (lane)
 Her link bir ya da daha fazla
şeritten oluşur
 Her şerit 1-bit genişliğindedir
 PCIe xN: N adet şeritten oluşur.
Güncel sistemler: x8, x16
PCIe tipi
x1
Veri transfer hızı (tek yön)
250 MB/s
x2
500 MB/s
x4
1GB/s
x8
2 GB/s
x16
4 GB/s
© David Kirk/NVIDIA and Wen-mei W. Hwu, 2007-2009
ECE 498AL, University of Illinois, Urbana-Champaign
Güncel Intel Mimarisi
Northbridge (82925X):
PCIe - GPU ve DRAM bağlantısı.
PCIe x16, 8 GB/s (4 GB/s tek yöne)
Southbridge (ICH6RW):
diğer çevre birimleri
bağlantısı
CUDA ve OpenCL Programlama Modelleri
CUDA Derleyicisi (1)
void serial_function(… ) {
...
}
void other_function(int ... ) {
...
}
void saxpy_serial(float ... ) {
for (int i = 0; i < n; ++i)
y[i] = a*x[i] + y[i];
}
void main( ) {
float x;
saxpy_serial(..);
...
}
Paralel CUDA
koduna
çevirilir
C CUDA
Key Kernels
Rest of C
Application
NVCC
(Open64)
CPU Compiler
CUDA object
files
CPU object
files
Linker
CPU-GPU
Executable
CUDA Derleyicisi (2)
• “.cu” uzantılı kaynak kodları NVCC
kullanılarak derlenir
• NVCC bir derleyici sürücüsüdür
– Gerekli araçları ve derleyicileri (cudacc, g++,
cl, ...) çağırır
• NVCC çıktısı:
– C kodu (host CPU kodu)
•
Daha sonradan uygulamanın geri kalanı ile birlikte derlenmelidir.
– PTX
• Obje kodu
• ya da, çalışma zamanında yorumlanan PTX
kaynağı
CUDA Derleyicisi (3)
Device Emulation Mode: Artık desteklenmiyor

An executable compiled in device emulation mode (nvcc
-deviceemu) runs completely on the host using the
CUDA runtime



No need of any device and CUDA driver
Each device thread is emulated with a host thread
Running in device emulation mode, one can:




Use host native debug support (breakpoints, inspection, etc.)‫‏‬
Access any device-specific data from host code and vice-versa
Call any host function from device code (e.g. printf) and vice-versa
Detect deadlock situations caused by improper usage of
__syncthreads
OpenCL (1)
OpenCL (2)
OpenCL heterojen bir ortam sunar, aynı kod CPU ve GPU
ortamlarında çalıştırılabilir.
OpenCL (3)
Tecrübelerimize göre:
 Programlaması daha güçtür.
 CUDA’ya göre daha düşük performanslıdır.
 Farklı platformlar ve heterojen ortamlarda çalışmak
istiyorsanız iyi bir çözümdür.
Alptekin Temizel
[email protected]
CUDA Aygıtları ve Threadleri

Hesaplama aygıtı (device)





CPU’ya (host) yardımcı işlemcidir,
Kendi DRAM’i vardır (device memory)‫‏‬,
Pek çok thread’i parallel işler,
Genelde GPU olmasına rağmen farklı bir paralel işleme aygıtı da
olabilir.
Uygulamanın veri-paralel kısımları pek çok thread’in aynı
anda çalıştığı kernel’larda işlenir.
© David Kirk/NVIDIA and Wen-mei W. Hwu, 2007-2009
ECE 498AL, University of Illinois, Urbana-Champaign
61
GPU ve CPU Threadleri arasındaki farklar
 GPU threadleri çok daha yalındır (lightweight)

Yaratılma yükleri çok düşüktür.
 GPU verimli çalışabilmek için 1000’lerce thread’e ihtiyaç
duyar

Çok çekirdekli CPU’lar yalnızca bir kaç threadle bile en iyi
verimliliklerine ulaşabilirler.
Paralel Thread Dizilimleri
• Bir CUDA kernel’ı thread dizilimleri (thread
arrays) tarafından çalıştırılır
–
–
Tüm thread’ler aynı kodu çalıştırır
(Single Process Multiple Data - SPMD)
Her thread’i kendine ait hafıza adresleri hesaplayabilmek
ve kontrol kararları alabilmek için bir ID’si vardır.
threadID
0 1 2 3 4 5 6 7
…
float x = input[threadID];
float y = func(x);
output[threadID] = y;
…
© David Kirk/NVIDIA and Wen-mei W. Hwu, 2007-2009
63
ECE 498AL, University of Illinois, Urbana-Champaign
Thread Blokları: Ölçeklenebilir Ortak Çalışma

Thread dizilimleri bloklara bölünür
Bir block içerisindeki threadler shared memory, atomic
operations ve barrier synchronization yardımı ile ortak
çalışabilir.
 Farklı bloklardaki threadler ortak çalışamaz.

Thread Block 1
Thread Block 0
threadID
0
1
2
3
4
5
6
…
float x =
input[threadID];
float y = func(x);
output[threadID] = y;
…
7
0
1
2
3
4
5
6
Thread Block N - 1
7
…
float x =
input[threadID];
float y = func(x);
output[threadID] = y;
…
0
…
1
2
3
4
5
6
7
…
float x =
input[threadID];
float y = func(x);
output[threadID] = y;
…
© David Kirk/NVIDIA and Wen-mei W. Hwu, 2007-2009
64
ECE 498AL, University of Illinois, Urbana-Champaign
CUDA Hafıza Modeli
Global memory
 host ve device arasındaki
temel haberleşme alanıdır
(R/W).
 Tüm threadlerden
erişilebilir.
 Uzun gecikme süresi
vardır.
Host
Grid
Block (0, 0)
Block (1, 0)
Shared Memory
Registers
Registers
Thread (0, 0) Thread (1, 0)
Shared Memory
Registers
Registers
Thread (0, 0) Thread (1, 0)
Global Memory
© David Kirk/NVIDIA and Wen-mei W. Hwu, 2007-2009
65
ECE 498AL, University of Illinois, Urbana-Champaign
Genel Bir Programlama Stratejisi(1)

Global memory aygıt üzerinde yer alır (DRAM) ve
erişim hızı shared memory’ye göre çok daha yavaştır.
 Hesaplama yaparken karlı bir yöntem veriyi parçalara
ayırarak shared memory’den faydalanmaktır.


Öncelikle veri shared memory’ye sığacak parçalara ayrılır.
Her bir veri parçası bir thread block tarafından işlenir:
 Veri parçası bir çok thread tarafından shared
memory’ye kopyalanır. Bir çok thread kullanımı hafıza
erişiminde paralellik sağlar.
 Hesaplama shared memory’deki veri parçasının bir çok
thread tarafından işlenmesiyle gerçekleşir. Veri
üzerinden birden fazla geçiş yapılabilir.
 İşlenmiş veri parçası shared memory’den global
memory’ye geri aktarılır.
© David Kirk/NVIDIA and Wen-mei W. Hwu, 2007-2009
ECE 498AL, University of Illinois, Urbana-Champaign
Genel Bir Programlama Stratejisi(2)
 Constant memory de DRAM üzerinde yer alır, bu
nedenle shared memory’ye göre oldukça yavaştır.
Ancak tamponlanır!
 Read-only veriler için avantajlıdır.

 Texture: Veri okuma için kullanılan bir obje
yapısıdır. Pek çok şekilde erişime (Filtreleme,
sarma modları ve 1D,2D,3D erişim gibi) izin verir.
© David Kirk/NVIDIA and Wen-mei W. Hwu, 2007-2009
ECE 498AL, University of Illinois, Urbana-Champaign
Genel Bir Programlama Stratejisi(3)
 Hafıza kullanımı veri erişim yapısına göre
tasarlanmalıdır:
R/Only  constant memory (tamponlanmış ise
çok hızlıdır)
 R/W, blok içerisinde paylaşım  shared memory
(çok hızlı)
 R/W, yalnız thread içerisinde  register (çok hızlı)
 R/W inputs/results  global memory (yavaş)

Genel Bir Programlama Stratejisi(4)
 Hesaplama kodlarını yazmadan önce hafıza
operasyonları için gerekli kodları yazın,
 Hafıza erişimlerini optimize edin,
 Hesaplama kodlarını yazıp entegre edin,
 Profiler’ı kullanarak sistem darboğazlarını analiz
edin.
Memory access optimization is extremely important