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/
1. GPU Programlamaya Giriş i. GPU ların tarihi ve GPU lar üzerinde genel amaçlı programlama (GPGPU) ii. iii. 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 R max R peak Power 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 Laboratory United States Jaguar - Cray XT5-HE Opteron 6-core 2.6 GHz / 2009 Cray Inc. 224162 1759.00 2331.00 6950.60 3 National Supercomputing Centre in Shenzhen (NSCS) China Nebulae - Dawning TC3600 Blade, Intel X5650, NVidia Tesla C2050 GPU / 2010 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 Cray Inc. 153408 1054.00 1288.63 2910.00 Kaynak: www.top500.org
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 Paralel İşleme GPU (Paralel İşleme) Grafik Kontrol ve İletişim CPU (Sıralı İşleme) Üretkenlik Uygulamaları Veri Yoğun Uygulamalar
1. GPU Programlamaya Giriş i. GPU ların tarihi ve GPU lar üzerinde genel amaçlı programlama (GPGPU) ii. iii. 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 GPU1 GPU2 GPU3 GPU4 Intel i7 920, 2.66 GHz, Windows 7 Professional (32 Bit) NVIDIA Quadro FX 5800, 240 Cores, Processor Clock: 1.3 GHz Memory: (512bit), 4GB NVIDIA GeForce GTX 285, 240 cores, Processor Clock: 1.476 GHz Memory Clock: 1.242 GHz (512bit), 1 GB NVIDIA GeForce 9800GT, 112 cores, Processor Clock: 1.5 GHz Memory Clock: 900 MHz (256bit), 1 GB 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ı
125 30 7 5 102 27 20 216 138 116 30 22 102 35 9 7 156 51 16 11 345 458 348 332 237 440 637 570 440 Number of Cameras 860 1130 1438 1315 1731 2722 3158 GPU Hesaplama Örnekleri (3) Video arkaplan çıkarımı 3500 3000 2500 2000 160X120 1500 1000 320X240 640X480 720X576 500 0 Serial OpenMP Cuda OpenCL Cuda OpenCL Cuda OpenCL OpenCL CPU GPU1 GPU2 GPU3 GPU4 (ATI) Device/Framework 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
7 5 9 6 30 27 20 24 18 13 11 32 37 79 73 Number of Cameras 87 102 103 108 98 125 128 135 112 103 132 222 228 233 247 257 312 345 338 330 355 GPU Hesaplama Örnekleri (4) Video arkaplan çıkarımı 400 350 300 250 200 150 160X120 100 50 0 Serial OpenMP Cuda OpenCL Cuda OpenCL Cuda OpenCL OpenCL CPU GPU1 GPU2 GPU3 GPU4 (ATI) Device/Framework 320X240 640X480 720X576 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
GPU Hesaplama Örnekleri (5) Video arkaplan çıkarımı Number of Camera 125 30 7 5 345 102 27 20 532 397 197 156 596 446 224 180 271 94 26 20 600 500 400 300 160X120 320X240 200 640X480 720X576 100 0 Serial OpenMP Cuda Cuda Cuda CPU GPU1 GPU2 GPU3 Device/Framework 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
0,79 0,92 0,96 1,00 1,54 1,73 Gain 3,89 4,37 7,30 7,80 8,30 9,00 GPU Hesaplama Örnekleri (6) Video arkaplan çıkarımı 10,00 9,00 8,00 7,00 6,00 5,00 4,00 CUDA 3,00 2,00 1,00 0,00 160X120 320X240 640X480 720X576 160X120 320X240 640X480 720X576 160X120 320X240 640X480 720X576 GPU1 (FX 5800) GPU2 (GTX 285) GPU3 (9800 GT) Device / Video Size GPUs vs. OpenMP CPU (Intel i7 920) versiyonları kazanç sonuçları Küçük verilerle en iyi kazanç elde edilemeyebilir.
1024 2048 4096 8192 1024 2048 4096 8192 1024 2048 4096 8192 1024 2048 4096 8192 8,49 10,65 6,51 6,79 7,00 7,04 6,60 6,75 6,45 6,81 5,06 10,18 13,25 12,24 12,01 16,90 21,18 15,93 20,03 25,84 32,28 Gain 40,98 38,37 48,97 61,94 74,15 71,29 89,84 GPU Hesaplama Örnekleri (7) Pearson cross correlation 90,00 80,00 70,00 60,00 50,00 40,00 Open CL 30,00 CUDA 20,00 10,00 0,00 GPU1 (FX 5800) GPU2 (GTX 285) GPU3 (9800 GT) GPU4 (ATI 5750) Device / Number of Images 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.
1. GPU Programlamaya Giriş i. GPU ların tarihi ve GPU lar üzerinde genel amaçlı programlama (GPGPU) ii. iii. 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 x2 x4 x8 x16 Veri transfer hızı (tek yön) 250 MB/s 500 MB/s 1GB/s 2 GB/s 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 NVCC (Open64) CUDA object files Linker Rest of C Application CPU Compiler CPU object files 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: (. etc Use host native debug support (breakpoints, inspection, 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,,( memory Kendi DRAM i vardır (device 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 ECE 498AL, University of Illinois, Urbana-Champaign 63
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. threadid Thread Block 0 Thread Block 1 Thread Block N - 1 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 float x = input[threadid]; float y = func(x); output[threadid] = y; float x = input[threadid]; float y = func(x); output[threadid] = y; float x = input[threadid]; float y = func(x); output[threadid] = y; David Kirk/NVIDIA and Wen-mei W. Hwu, 2007-2009 ECE 498AL, University of Illinois, Urbana-Champaign 64
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) Shared Memory Registers Registers Thread (0, 0) Thread (1, 0) Global Memory Block (1, 0) Shared Memory Registers Registers Thread (0, 0) Thread (1, 0) David Kirk/NVIDIA and Wen-mei W. Hwu, 2007-2009 ECE 498AL, University of Illinois, Urbana-Champaign 65
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