- Pemahaman dasar tentang GPU computing sangat penting bagi semua software engineer
- Tulisan ini terutama berfokus pada GPU Nvidia dan menggunakan terminologi Nvidia
- GPU dirancang untuk pemrosesan paralel skala besar dan throughput tinggi dalam grafis, komputasi numerik, deep learning, dan lainnya
Perbandingan CPU dan GPU
- CPU dirancang untuk eksekusi instruksi secara berurutan, dan mencakup berbagai fitur untuk mengurangi latensi eksekusi instruksi.
- GPU dirancang untuk pemrosesan paralel skala besar dan throughput tinggi, serta memiliki latensi eksekusi instruksi dari sedang hingga tinggi.
- GPU dapat menangani jauh lebih banyak operasi dan melakukannya jauh lebih cepat dibanding CPU.
# Arsitektur GPU
Arsitektur komputasi GPU
- GPU terdiri dari sekumpulan streaming multiprocessor (SM).
- Setiap SM mencakup beberapa streaming processor (core atau thread).
- SM memiliki jumlah memori on-chip yang terbatas (shared memory atau scratchpad), yang dibagikan oleh semua core.
Arsitektur memori GPU
- GPU memiliki beberapa jenis memori dalam berbagai lapisan.
- Setiap SM memiliki sejumlah besar register, yang dibagikan antar core.
- Constant cache digunakan untuk menyimpan cache data konstan yang dipakai saat eksekusi kode.
- Shared memory adalah memori SRAM on-chip yang cepat, berlatensi rendah, dan dapat diprogram.
- Cache L1 menyimpan cache data yang sering diakses dari cache L2.
- Cache L2 dibagikan oleh semua SM dan menyimpan cache data yang sering diakses dari global memory.
- Global memory adalah DRAM berkapasitas besar dan bandwidth tinggi, tetapi berada jauh dari SM sehingga memiliki latensi tinggi.
# Memahami model eksekusi GPU
Pengantar singkat tentang kernel CUDA dan thread block
- CUDA adalah antarmuka pemrograman untuk menulis program bagi GPU Nvidia.
- Kernel adalah komputasi yang diekspresikan dalam bentuk mirip fungsi C/C++ yang dijalankan secara paralel di GPU.
- Untuk menjalankan kernel, sejumlah thread yang disebut grid diluncurkan.
Tahapan eksekusi kernel di GPU
- Menyalin data dari host ke device
- Menjadwalkan thread block ke SM
- Single Instruction Multiple Thread (SIMT) dan warp
- Penjadwalan warp dan toleransi latensi
- Menyalin data hasil dari device ke memori host
# Konsep partisi sumber daya dan occupancy
- Tingkat pemanfaatan sumber daya GPU diukur dengan metrik "occupancy", yang menunjukkan rasio jumlah warp yang dialokasikan terhadap jumlah maksimum warp yang dapat didukung SM.
- Occupancy dibatasi oleh sumber daya eksekusi SM, register, shared memory, slot thread block, dan slot thread.
- Penting untuk meminimalkan latensi sambil mempertahankan occupancy yang tinggi melalui optimisasi kode.
# Ringkasan
- GPU terdiri dari banyak SM, dan setiap SM memiliki beberapa core pemrosesan.
- Global memory berada jauh dari chip dan memiliki latensi tinggi.
- Cache L1 dan L2 bekerja mirip dengan cache L1/L2 pada CPU.
- Setiap SM memiliki shared memory, yang dibagikan antar core.
- Untuk menjalankan kernel di GPU, grid thread diluncurkan.
- GPU menetapkan block yang akan dijalankan pada SM, dan semua thread dijalankan pada SM yang sama.
- Thread yang dialokasikan ke SM kemudian dikelompokkan lagi dalam unit berukuran 32 yang disebut warp.
- GPU melakukan partisi sumber daya dinamis antar thread berdasarkan kebutuhan thread dan batasan SM.
# Penutup
- GPU kini digunakan secara luas, dan arsitektur serta model eksekusinya secara mendasar berbeda dari CPU.
- Tulisan ini membahas berbagai aspek GPU serta memberikan wawasan tentang alasan GPU digunakan secara luas dan cara kerjanya.
Opini GN⁺
- GPU adalah teknologi esensial untuk deep learning dan komputasi numerik yang kompleks, dan tulisan ini membantu memahami arsitektur dasar serta model eksekusi GPU.
- Isinya sangat penting terutama bagi software engineer pemula yang tertarik pada pemrosesan paralel dan high-performance computing.
- Tulisan ini memberikan pengetahuan dasar tentang pemrograman GPU dan menjadi materi menarik yang dapat memicu rasa ingin tahu terhadap bidang ini.
1 komentar
Opini Hacker News