3 puan yazan GN⁺ 2025-12-10 | Henüz yorum yok. | WhatsApp'ta paylaş
  • GPU çalıştırmasını durdurup durumu inceleyebilen bir hata ayıklayıcı eksikliğiyle başlanıp, AMD GPU'de bunu doğrudan uygulama süreci anlatılıyor
  • DRM arayüzü ve libdrm ile GPU ile doğrudan haberleşilerek, bağlam oluşturma, tampon ayırma ve komut gönderme adımları aşama aşama kurgulanıyor
  • TBA/TMA kayıtları ve trap handler kullanılarak GPU çalıştırması durduruluyor, CPU ile senkronizasyonla durum okunup geri yüklenebilen bir yapı kuruluyor
  • SPIR-V kod derleme ve RADV entegrasyonu sayesinde gerçek shader hata ayıklama ortamı genişletilerek breakpoint·stepping·watchpoint yetenekleri uygulanabilir hale getiriliyor
  • GPU iç yapısını doğrudan kontrol eden bu yaklaşım, AMD GPU için eksiksiz bir hata ayıklayıcı geliştirme olasılığını kanıtlıyor ve ileride Vulkan entegrasyonuyla gelişmeye açık

GPU Hata Ayıklamanın Gerekçesi ve Yaklaşım

  • CPU gibi GPU çalıştırmasını durdurup durumu denetleyebilen bir araç eksikliğinden yola çıkılıyor
    • GPU'nun paralel çalıştırma modeli hata ayıklamayı çok daha karmaşık hale getiriyor
  • AMD ROCm ortamında rocgdb var olsa da yalnızca ROCm ile sınırlı kapsam destekleniyor
  • Marcell Kiss'in blog serisini inceleyerek GPU ile doğrudan iletişim kuran bir hata ayıklayıcı geliştirmeye çalışıldı

GPU ile Doğrudan İletişim

  • RADV sürücüsünün davranışı takip edilerek GPU ile doğrudan haberleşme yöntemi öğreniliyor
  • /dev/dri/cardX açılarak KMD (kernel mode driver) ile bağlantı kurulduktan sonra amdgpu_device_initialize çağrılıyor
  • libdrm ile bağlam oluşturma (amdgpu_cs_ctx_create) ve tampon ayrılması yapılır
    • Kod tamponu ve komut tamponu olmak üzere iki tampon oluşturulur
  • Tamponlar GPU/CPU sanal adres alanlarına eşlenir
    • amdgpu_bo_va_op yerine doğrudan IOCTL çağrılarıyla eşleme yapılır
  • clang ve objdump kullanılarak shader assembly kodu derlenir ve ikili çıktı çıkarılır
  • PM4 Packet formatı ile GPU komutları oluşturulup shader yürütme komutları gönderilir

GPU Trap ve Debugfs Kullanımı

  • RDNA3 ISA'nın TBA/TMA kayıtları ile trap handler ayarlanır
    • TBA: trap handler adresi
    • TMA: trap handler için geçici bellek adresi
  • Kullanıcı alanından doğrudan erişim mümkün olmadığından debugfs arayüzü kullanılır
    • /sys/kernel/debug/dri/{PCI address}/regs2 dosyası üzerinden kayıt erişimi sağlanır
    • amdgpu_debugfs_regs2_write ile kayıt yazımı yapılır
  • VMID bazında TBA/TMA ayarlanarak trap handler etkinleştirilir
    • Her VMID, GPU işlem bağlamını ayırır

Trap Handler Uygulaması

  • Trap handler, GPU bir istisnayla karşılaştığında çalışan ayrıcalıklı bir shader programıdır
  • TTMP kayıtlarıyla GPU durumu (STATUS, EXEC, VCC vb.) saklanır
  • global_store_addtid_b32 komutu ile thread başına register değerleri belleğe yazılır
  • GPU veri yazdığında CPU bunu tespit eder ve SQ_CMD kaydıyla GPU geçici olarak durdurulur
    • Ardından CPU veriyi analiz ettikten sonra tekrar SQ_CMD ile GPU çalıştırması başlatılır
  • Trap handler, dönüşte program sayacı ve kayıt durumu geri yükleme yapar

SPIR-V Kod Çalıştırma ve RADV Entegrasyonu

  • Elle assembly yerine SPIR-V kod derleme desteği getirilir
    • RADV'nin ACO derleyicisiyle SPIR-V, GPU ikili koduna dönüştürülür
    • RADV_FORCE_FAMILY ortam değişkeniyle sanal cihaz oluşturulur
  • RADV'nin null_winsys modu ile gerçek donanım erişimi olmadan yalnızca derleme yapılır
  • Derleme sonucundan shader kodu, kaynak ayarları ve hata ayıklama bilgileri çıkarılır

Hata Ayıklayıcı Özelliklerini Genişletme

  • Stepping: RSRC1.DEBUG_MODE, RSRC3.TRAP_ON_START bitleriyle komut bazlı yürütme kontrolü sağlanır
  • Breakpoints: Kod tamponundaki adrese göre program sayacı konumu hesaplandıktan sonra trap işlenir
  • Source Mapping: ACO derleyicisinin hata ayıklama bilgileri ile kaynak kod satır eşlemesi yapılır
  • Watchpoints: GPU sayfa koruması veya SQ_WATCH kaydıyla adres izleme işlevi uygulanabilir
  • Değişken adı/ tipi takibi: Mesa'nın NIR optimizasyon aşamasında hata ayıklama bilgisi iletiminin geliştirilmesi gerekiyor
  • Vulkan entegrasyonu: RADV temeliyle çerçeve bazlı hata ayıklama, tampon/ doku/sabit veri bilgileri kullanılabilir

Bonus: Kullanıcı Modu Sayfa Gezinme Kodu

  • RDNA3(gfx11) GPU'lar için sayfa tablosu gezinme kodu örneği veriliyor
    • PDE/PTE yapı tanımları ve decode fonksiyonları içerir
    • Sanal adresten fiziksel adrese çevirme işlemi uygulanır
  • VMID bazında sayfa tablosu kayıtları okunarak GPU bellek eşleme yapısı analiz edilebilir

Sonuç

  • AMD GPU'da çekirdek ve donanım seviyesine doğrudan erişimle tam bir hata ayıklayıcı geliştirme olasılığı kanıtlandı
  • CPU ve GPU arasında çift yönlü iletişim döngüsü kurularak çalıştırmayı durdurma, durum analizi ve yeniden başlatma gerçekleşti
  • İleride RADV ve Vulkan entegrasyonu ile geliştirici dostu bir GPU hata ayıklama ortamına dönüşme potansiyeli bulunmaktadır

Henüz yorum yok.

Henüz yorum yok.