5 puan yazan GN⁺ 2023-10-22 | 1 yorum | WhatsApp'ta paylaş
  • GPU hesaplamaya dair temel bir anlayış, tüm yazılım mühendisleri için gereklidir
  • Bu yazı ağırlıklı olarak Nvidia GPU'larına odaklanıyor ve Nvidia'nın terminolojisini kullanıyor
  • GPU'lar; grafik, sayısal hesaplama, derin öğrenme ve benzeri alanlarda büyük ölçekli paralel işleme ile yüksek throughput için tasarlanmıştır

CPU ve GPU karşılaştırması

  • CPU, komutları sıralı şekilde yürütmek için tasarlanmıştır ve komut yürütme gecikmesini azaltmaya yönelik çeşitli özellikler içerir.
  • GPU, büyük ölçekli paralel işleme ve yüksek throughput için tasarlanmıştır; orta ila yüksek komut yürütme gecikmesine sahiptir.
  • GPU, CPU'ya göre çok daha fazla sayıda işlemi çok daha hızlı işleyebilir.

# GPU mimarisi

GPU compute mimarisi

  • GPU, streaming multiprocessor (SM) dizilerinden oluşur.
  • Her SM, birden fazla streaming processor (çekirdek veya thread) içerir.
  • SM, tüm çekirdeklerin paylaştığı sınırlı miktarda çip içi bellek (shared memory veya scratchpad) barındırır.

GPU bellek mimarisi

  • GPU, çeşitli katmanlardan oluşan farklı bellek türlerine sahiptir.
  • Her SM, çekirdekler arasında paylaşılan büyük miktarda register barındırır.
  • Constant cache, kod yürütme sırasında kullanılan sabit verileri önbelleğe almak için kullanılır.
  • Shared memory, hızlı ve düşük gecikmeli, çip içi programlanabilir SRAM bellektir.
  • L1 cache, L2 cache'ten sık erişilen verileri önbelleğe alır.
  • L2 cache, tüm SM'ler tarafından paylaşılır ve global memory'den sık erişilen verileri önbelleğe alır.
  • Global memory, yüksek kapasiteli ve yüksek bant genişlikli DRAM'dir; SM'lerden uzakta bulunduğu için gecikmesi yüksektir.

# GPU yürütme modelini anlamak

CUDA kernel ve thread block'lara kısa giriş

  • CUDA, Nvidia GPU'ları için program yazmaya yönelik bir programlama arayüzüdür.
  • Kernel, GPU üzerinde paralel çalışan, C/C++ fonksiyonlarına benzer biçimde ifade edilen bir hesaplamadır.
  • Bir kernel'i çalıştırmak için grid adı verilen bir thread kümesi başlatılır.

GPU'da kernel yürütmenin aşamaları

  1. Veriyi host'tan device'a kopyalama
  2. Thread block'ları SM'lere zamanlama
  3. Single instruction multiple threads (SIMT) ve warp
  4. Warp scheduling ve gecikmeyi tolere etme
  5. Sonuç verisini device'tan host belleğine kopyalama

# Kaynak bölüşümü ve occupancy kavramı

  • GPU kaynak kullanım düzeyi, "occupancy" adlı metrikle ölçülür; bu, bir SM'in destekleyebildiği maksimum warp sayısına karşılık atanan warp sayısının oranını gösterir.
  • Occupancy; SM'in yürütme kaynakları, register'lar, shared memory, thread block slot'ları ve thread slot'ları tarafından sınırlanır.
  • Kod optimizasyonu yoluyla yüksek occupancy'yi korurken gecikmeyi en aza indirmek önemlidir.

# Özet

  • GPU, birden çok SM'den oluşur ve her SM birden fazla işlem çekirdeğine sahiptir.
  • Global memory, çipten uzaktadır ve gecikmesi yüksektir.
  • L1 ve L2 cache, CPU'daki L1/L2 cache'e benzer şekilde çalışır.
  • Her SM'de, çekirdekler arasında paylaşılan shared memory bulunur.
  • GPU'da bir kernel çalıştırmak için bir thread grid'i başlatılır.
  • GPU, SM'lerde çalıştırılacak block'ları atar ve bir block içindeki tüm thread'ler aynı SM üzerinde çalışır.
  • Bir SM'e atanan thread'ler, warp adı verilen 32'lik gruplar hâlinde ayrıca gruplanır.
  • GPU, thread gereksinimlerine ve SM sınırlarına göre thread'ler arasında dinamik kaynak bölüşümü yapar.

# Kapanış

  • GPU'lar bugün yaygın biçimde kullanılmaktadır ve mimarileri ile yürütme modelleri CPU'lardan temelden farklıdır.
  • Bu yazı, GPU'nun çeşitli yönlerini ele alarak neden yaygın kullanıldığını ve nasıl çalıştığını anlamaya yönelik içgörü sunar.

GN⁺ görüşü

  • GPU'lar, derin öğrenme ve karmaşık sayısal hesaplamalar için vazgeçilmez bir teknolojidir; bu yazı, GPU'nun temel mimarisini ve yürütme modelini anlamaya yardımcı olur.
  • Paralel işleme ve yüksek performanslı hesaplamaya ilgi duyan başlangıç seviyesindeki yazılım mühendisleri için özellikle önemli noktalar içerir.
  • Bu yazı, GPU programlamaya dair temel bilgiler sunan ve bu alana yönelik merakı artıran ilgi çekici bir kaynaktır.

1 yorum

 
GN⁺ 2023-10-22
Hacker News görüşü
  • Bu yazının Nvidia’ya fazla odaklandığı ve Sycl, Sapphire Rapids, AMD’nin MI300’ü gibi diğer geçerli alternatifleri görmezden geldiği eleştiriliyor.
  • Veri aktarımı sırasında GPU’nun boşta kalmasını önleyen asenkron kopyalamadan yeterince bahsedilmediği belirtiliyor.
  • Yazı, GPU programlamaya iyi bir giriş olarak övülüyor; ancak daha ileri tekniklerin de incelenmesi gerektiği öneriliyor.
  • Bazı okurlar, kuyruk teorisindeki Little’s law’un GPU’lara uygulandığı yönündeki iddianın doğruluğunu sorguluyor.
  • Bellek mimarisine ilişkin açıklamanın, önbelleğin thread’ler arasında tutarlılık garantisi sağlamadığını belirtmediği için eleştirildiği ifade ediliyor.
  • GPU’nun yeteneklerini daha iyi yansıtmak için adının PPU (Parallel Processing Units) olarak değiştirilmesi öneriliyor.
  • Yazı, GPU programlamayı anlatan en iyi açıklamalardan biri olarak övülüyor ve mentorlukta kullanılması tavsiye ediliyor.
  • SIMD programlama “vahşi” olarak tanımlanıyor; tüm pikseller için kolay hesaplamalar sunarken dallanma koşullarında zorlandığı belirtiliyor.
  • Belirli dizi hesaplama işlerinde GPU kullanmanın verimliliği sorgulanıyor; veriyi GPU’ya gönderip GPU’dan geri alma gerekliliği de hesaba katılıyor.