Introduction to GPU Programming - Ege Üniversitesi Fen Fakültesi
Transkript
Introduction to GPU Programming - Ege Üniversitesi Fen Fakültesi
Alptekin Temizel atemizel@ii.metu.edu.tr 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 atemizel@ii.metu.edu.tr 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