Hangi hesaplamaların CPU'da ve hangilerinin GPU'da yapıldığını nasıl kontrol edebilirim?


14

Şu anki kavrayışım, bir gölgelendirici dosyasında yapılan herhangi bir şeyin GPU'da yapılması ve (Java, benim durumumda) kodumda yapılan herhangi bir şeyin CPU'da yapılmasıdır.

Bu doğru bir açıklama mı?


2
Ayrıca GPU'da , esasen GPU'da kod çalıştırmanıza izin veren OpenCL gibi bir şey kullanarak bilgi işlem yapabilirsiniz .
Soapy

Yanıtlar:


20

Bunun özü bu.

Prensip olarak, platform akla gelebilecek her şeyi yapabilirdi. Örneğin, x86'dan GPU koduna derlenmiş kodun tam zamanında çevirisini yapan gelişmiş bir işletim sistemi düşünülebilir. Benzer şekilde, OpenGL sürücüleri ana CPU'da ne isterse çalışabilir.

Ama gerçekten, az önce tanımladığınız, olan şey.


5
IIRC, gölgelendiriciler GPU'ya gönderilmeden önce CPU üzerinde derlenir . Ve bu, işletim sistemi olmayan GPU sürücüsü tarafından yapılır.
MSalters

Doğru. Java kodu zaten derlenmiş olsa bile, gölgelendiriciler program sırasında birçok derleme hatası ele aldım.
Bassinator

1
Teorik: Diyelim ki çok CPU yoğunluklu ama sadece bir komut satırı arayüzü olan bir programım var (grafiksel çalışma yok). Bazı çalışmaları GPU'ya yükleyebilir miyim? Aslında bunu yapmayı planlamıyorum, sadece ilgimi çeken kavramsal bir şey.
Bassinator

2
Evet! @Return true öğesinin yayınladığı bağlantı, bunu yapan bir Java kitaplığı içindir. Daha genel olarak, OpenGL'ye bir "hesaplama gölgelendiricisi" yazabilir veya OpenCL kullanabilirsiniz. Her durumda, kodunuzun paralelleştirilebilen bir kısmını ayırmanız ve bilgiyi içine ve dışına aktarmanız gerekir. (GPU'lar çoğunlukla "utanç verici bir şekilde paralel" görevler için mükemmeldir.)
David Van Brink,

1
Bu yanıta eklenecek bir yıldız işareti, bazı uygulamaların bir "preshader" fikrini desteklemesi - yani gölgelendiricinin bir parçası olan ancak belirli bir çizim çağrısındaki tüm çağrılarda sonucu sabit olacak (tek biçimli görünümü çoğaltma gibi) projeksiyon matrisleri). Bu şekilde eğimli bir gölgelendirici derleyicisi, böyle kod parçalarını tanımlayabilir ve GPU'ya gönderilen işte elde edilen sabit çıktı da dahil olmak üzere CPU tarafına bir kez çalıştırılmak üzere kaldırabilir. "Gölgelendirici = GPU" varsayımının sadece ayrıntılı olarak olsa da bükülebileceği yaygın bir durum budur.
DMGregory

7

Genel olarak, Evet. Java, cpu üzerinde çalışan programları yazmak için kullanılır. Gölgelendirici dilleri (cg, hlsl, et al) gpu üzerinde çalışan programları yazmak için kullanılır.

Kuralın bir istisnası , boşluğu doldurabilecek üçüncü taraf apisleri kullanmak olacaktır .


1
Çok ilginç bir ipucu, "aparapi" için bağlantı. GPU'da biraz JVM kodu çalıştırın ... ilgi çekici!
david van brink

3

david van brink genel olarak sorunuzu yanıtladı.

Ancak söylediği gibi, OpenGL sürücüsü CPU'da bir şeyler çalıştırabilir ve aslında çok şey olur. Özellikle bazı tuhaf eski işlevlerin grafik kartlarına uygulanamayacağı uyumluluk bağlamlarıyla. Yazılım öykünmesi gerektirirler. Örneğin, CPU üzerinde bu noktalama yürütülmeden önce duydum. Ayrıca toplama ile sürprizler bekleyebilirsiniz.
Bu sürprizler MacOS'ta 2.1 bağlamı kullanarak daha da fazla olabilir, çünkü Apple OpenGL'nin görüşlerini donanım aralıklarında oldukça iyi bir şekilde birleştirdi ve bazı küçük donanımlarda taklit edilmesi gereken bazı şeyler yok. İçerik oluşturma kodu açık bir şekilde bir yazılım cihazı belirtiyorsa, ENTIRE OpenGL 2.1 spesifikasyonunun CPU üzerinde tam olarak çalıştırılması mümkün olacak kadar ileri gider.

Tersine, vexcl veya boost compute veya microsoft'un AMP veya nVidia itme gibi bilgi işlem kitaplıkları aracılığıyla yürütülen kod, API kurulum bayraklarına bağlı olarak GPU veya CPU üzerinde yürütülebilir.

Ve son dokunuş için, CPU'nun içinde SIMD olarak adlandırdığımız bir DSP mimarisine de sahipsiniz. Intel'in ispc derleyicisi, en iyi şekilde yararlanmanıza yardımcı olmak için derleme zamanında çok sayıda performans tanılamasıyla SIMD şeritlerinde çalışması için "sağlanan" kod oluşturulmasına yardımcı olur. Buna OpenMP ekleyin ve GPU'ların kavramlarına yaklaşan çok iş parçacıklı SIMD alabilirsiniz. Üst düzey bir CPU'nuz ve düşük uçlu GPU'nuz varsa, bu aslında daha performanslı olabilir.
http://ispc.github.io/

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.