2 puan yazan GN⁺ 2025-11-12 | 1 yorum | WhatsApp'ta paylaş
  • CPU tabanlı 2D grafik render alma sürecinde verimliliği artırmak için seyrek şeritler (sparse strips) yapısını kullanan bir yaklaşım sunuluyor
  • GPU yerine CPU üzerinde yüksek performanslı render alma gerçekleştirmek için veri yapıları ve işleme yöntemlerine odaklanan bir çalışma
  • Seyrek veri gösterimi sayesinde bellek kullanımını azaltırken, karmaşık sahnelerde de hızlı render alma hızı sağlıyor
  • Mevcut CPU render alma yöntemlerine kıyasla paralel işleme verimliliğini ve önbellek kullanımını iyileştiren bir tasarım
  • Yalnızca CPU ile de yüksek kaliteli 2D grafiklerin gerçekleştirilebileceğini gösteren bir çalışma

Araştırmaya Genel Bakış

  • Bu makale, CPU üzerinde yüksek performanslı 2D grafik render alma hedefiyle GPU bağımlılığını azaltma yöntemlerini inceliyor
  • Temel kavram, piksel düzeyinde sürekli veri yerine yalnızca gerekli kısımları verimli biçimde depolayan seyrek şeritler (sparse strips) adlı veri yapısıdır
  • Bu yapı sayesinde bellek erişim maliyeti azaltılıyor ve render alma hızı artırılıyor

Seyrek Şerit Yapısı

  • Şerit (strip), 2D görüntüde art arda gelen piksel aralığını ifade eder; seyrek (sparse) biçimde ise yalnızca gerekli kısımlar saklanır
  • Bu yöntem, çok fazla boş alana sahip görüntülerde veya karmaşık vektör grafiklerde özellikle etkilidir
  • Geleneksel tam tampon tabanlı render almaya göre bellek kullanımını azaltır ve önbellek verimliliğini artırır

Performans ve Uygulama

  • CPU’nun SIMD komutları ve çoklu iş parçacığı kullanılarak paralel işleme performansı en üst düzeye çıkarılıyor
  • Deney sonuçlarına göre, aynı sahne GPU olmadan da gerçek zamanlı render alma düzeyinde performansla işlenebiliyor
  • Uygulama C++ tabanlı olarak yazılmış ve farklı çözünürlükler ile sahne karmaşıklıklarında test edilmiş

Olası Kullanım Alanları

  • UI render alma, vektör grafik motorları, oyun motorlarının 2D iş hattı gibi CPU merkezli ortamlarda kullanılabilir
  • GPU’nun kısıtlı olduğu gömülü sistemlerde veya sunucu ortamlarında da yüksek performanslı 2D grafik işleme desteği sağlayabilir

Sonuç

  • Seyrek şerit tabanlı yaklaşım, CPU render almadaki darboğazların hafifletildiğini ve bellek verimliliğinin artırıldığını ortaya koyuyor
  • GPU’ya bağımlı grafik işleme yapıları için alternatif bir model olma potansiyeli sunuyor
  • Ek sayısal değerler veya karşılaştırma verileri için PDF metnine bakılması gerekiyor

1 yorum

 
GN⁺ 2025-11-12
Hacker News görüşleri
  • Makalede tanımlanan struct Strip yapısı 64 bit (8 bayt) boyutundaymış gibi görünüyor, ancak metinde bir stripin 64 bayt olduğu yazıyor
    Hesaplayınca gerçekte 259×8 + 7296 ≈ 9KB gibi görünüyor. Birimlerden biri yanlış gibi

    • Yazarıyım. Doğru, bit ve bayt karıştırılmış. İşaret ettiğin için teşekkürler
    • Tüm koda bakacak vaktim yok ama makalede multithreading ile ilgili bir bölüm var
      Basit bir yazım hatası da olabilir, ancak her stripin cache line (64 bayt) biriminde ayrılmış olması da mümkün.
      Böylece false sharing önlenir; renderer bunu bilerek böyle yapmış olabilir
    • Ben de aynı fikirdeyim. O paragrafta bellek kullanımı fazla tahmin edilmiş gibi görünüyor.
      Makale esas olarak çalışma süresi karşılaştırmalarına odaklanmış, depolama alanı karşılaştırmalarına değil
  • Blaze: Parallel Rasterization on CPU buna ek olarak bakmaya değer

    • Faydalı bilgi için teşekkürler. Bu projeyi bilmiyordum, benchmark sonuçları oldukça etkileyici
    • Demo gerçekten şaşırtıcı derecede hızlı
  • Proje ilginç. 3.9 bölümüne bakınca çıktı bitmap biçiminde, yani sonuçta görüntüyü GPU'ya kopyalamak gerekecek gibi duruyor
    Skia WebGPU'ya geçiyor ve WebGPU compute shader desteklediği için 2D grafikler taşınabilirlik ve performans açısından giderek çözülmüş bir problem gibi görünüyor
    Yine de CPU renderer'ın hâlâ faydalı olduğu durumlar var — örneğin web ortamında sayfa yüklenirken shader'ları çalışma anında derlemek gerekiyor
    Teorik olarak, JS JIT gibi CPU renderer ile başlayıp GPU shader'ları hazır olduğunda geçiş yapılan bir yapı da mümkün olabilir
    Bir diğer avantaj da ikili dosya boyutunun küçük olması. WebGPU (dawn tabanlı) oldukça büyük
    İlgili bağlantı

    • Doğru, çıktı bitmap ve GPU'ya yüklenmesi gerekiyor.
      Daha büyük projede bir de Vello Hybrid adlı sürüm var; geometri işlemlerini CPU'da, piksel boyamayı ise GPU'da yapıyor
      Shader derlenirken CPU renderer kullanma fikrini de düşündük ama henüz uygulamadık
    • CPU renderer'ın özellikle yararlı olduğu yerlerden biri test runner. Çıktı bir görsel veya ekran görüntüsüyse GPU'ya kopyalamak gerekmiyor
      Hatta GPU'da render edersen görüntüyü geri kopyalaman gerekir, bu da verimsiz olur
    • Birleşik bellek mimarisinde (ör. Apple Silicon) GPU'ya kopyalamak gerekmez. Aynı belleği paylaştıkları için maliyet neredeyse yoktur
  • Yakın zamanda milyonlarca tepe noktası içeren yüksek hassasiyetli N-body yörüngelerini render eden bir kod yazdım,
    bu makalede önerilen RLE gösterimini GPU'da uygularsan sadeliği koruyup yine de iyi çalışıp çalışmayacağını merak ediyorum
    Demo videosu

  • İlginç. Karşılaştırılan renderer'ların tek çekirdek performansını görmek isterdim.
    Bence bu kod verimliliğini daha iyi gösterir. Popüler renderer'lar daha yavaş olabilir ama CPU kullanımları daha düşük olabilir

    • Makalede tek çekirdek performans karşılaştırması bölümü var
      Ayrıca Blend2D resmi benchmark'ı ya da
      benim ek renderer'lar da dahil ederek hazırladığım vello_chart içinde de sonuçları görebilirsiniz
  • Danışmanlardan biri olan Raph Levien, eski Libart kütüphanesinin yazarı mı acaba?

  • Konu dışı biraz ama GitHub'daki PDF önizleme ne zamandan beri yalnızca bazı sayfaları yüklemeye başladı merak ediyorum
    Eskisi gibi tüm PDF'yi tek seferde indirip tarayıcının render etmesi bence daha iyiydi

  • Renderer'ın doğruluğunu (correctness) doğrulayabilecek benchmark'lar var mı merak ediyorum

    • Cornell box aslında başlangıçta tam da bu amaç için yapılmıştı
      Gerçek bir sahnenin radiosity değerleri ölçülüp simülasyon sonuçlarıyla karşılaştırılıyor
      Gerçek zamanlı render etmede de bazen Arnold veya Octane gibi offline renderer'lar referans alınır
      Cornell box wiki
    • “Doğruluk”tan ne kastettiğine bağlı
      Gerçekliği kusursuz yeniden üreten bir renderer yok; hepsi bir miktar trade-off yapıyor