GPU'lar paralel işler için çok iyidir. Hangisi harika ... paralel işler yapıyorsanız.
Oyunlar en az paralelleştirilebilen uygulama türüyle ilgilidir. Ana oyun döngüsünü düşün. AI (oyuncunun AI'nın özel bir durumu olarak ele alındığını varsayalım) fiziğin tespit ettiği çarpışmalara cevap vermesi gerekir. Bu nedenle daha sonra çalışması gerekir. Veya en azından fiziğin, fizik sisteminin sınırları dahilinde AI rutinleri çağırması gerekir (bu, pek çok nedenden dolayı genellikle iyi bir fikir değildir). Grafikler fizik çalışana kadar çalışamaz, çünkü fizik nesnelerin konumunu güncelleyen şeydir. Elbette, AI'nın yeni nesneler üretebildiğinden, oluşturulmadan önce de çalışması gerekir. AI ve oynatıcı kontrollerinden sonra seslerin çalışması gerekir
Genel olarak, oyunlar kendilerini çok az yoldan oynatabilirler. Grafikler bir iplik halinde döndürülebilir; Oyun döngüsü, grafik iş parçacığında bir sürü veriyi zorlayabilir ve şöyle diyebilir: bunu yap. Bazı temel enterpolasyonlar yapabilir, böylece ana oyun döngüsünün grafiklerle senkronize olması gerekmez. Ses başka bir konu; oyun döngüsü “bunu oyna” diyor ve oynanıyor.
Ondan sonra, her şey acı çekmeye başlar. Karmaşık yama algoritmaları varsa (örneğin, RTS'ler için), bunları işleyebilirsiniz. Algoritmaların tamamlanması birkaç kare alabilir, ancak en azından eşzamanlı olurlar. Bunun ötesinde, oldukça zor.
Yani 4 konuya bakıyorsunuz: oyun, grafik, ses ve muhtemelen uzun vadeli AI işleme. Bu fazla değil. Ve bu , aynı anda yüzlerce ipliğin aynı anda uçabileceği GPU'lar için neredeyse yeterli değil . GPU'lara performanslarını veren budur: tüm bu konuları bir seferde kullanabilmek. Ve oyunlar basitçe bunu yapamaz.
Şimdi, belki de bazı işlemler için "geniş" gidebilirsiniz. Örneğin AI'ler genellikle birbirinden bağımsızdır. Böylece aynı anda birkaç düzine AI'yi işleyebilirsiniz. Onları gerçekte birbirlerine bağımlı hale getirmeniz gerekene kadar. O zaman başın belada. Fizik nesneleri benzer şekilde bağımsızdır ... aralarında bir kısıtlama yoksa ve / veya bir şeyle çarpışırsa. Sonra çok bağımlı hale gelirler.
Ayrıca, GPU’nun kullanıcı girişine erişimi olmadığı gerçeği var, ki anladığım kadarıyla oyunlar için çok önemli. Böylece temin edilmesi gerekecekti. Ayrıca doğrudan dosya erişimi veya işletim sistemi ile konuşmada herhangi bir gerçek yöntem yoktur; bu yüzden tekrar, bunu sağlamanın bir yolu olmalı. Oh, ve bütün bu ses işleme? GPU'lar ses çıkarmıyor. Bu yüzden bunların CPU'ya ve sonra ses çipine geri dönmesi gerekiyor.
Oh, GPU'ları kodlamak korkunç. Doğru elde etmek zor ve bir GPU mimarisi için "doğru" olan, diğeri için çok, çok yanlış olabilir . Ve bu sadece AMD'den NVIDIA'ya geçmiyor; Bu bir GeForce 250'den GeForce 450'ye geçiyor olabilir. Temel mimaride bir değişiklik. Ve kolayca kodunuzun iyi çalışmamasını sağlayabilir. C ++ ve hatta C'ye izin verilmiyor; elde edebileceğiniz en iyi şey, bir tür C gibi olan ancak bazı çeşitliliklerin olmadığı OpenCL'dir. Gibi özyineleme . Bu doğru: GPU'larda özyineleme yok.
Hata ayıklama? Oh, umarım IDE'nizin hata ayıklama özelliklerini beğenmezsiniz, çünkü bunlar kesinlikle kullanılamayacak. GDB kullanıyor olsanız bile, elveda öpücüğü verin. printf
Hata ayıklamaya başvurmak zorunda kalacaksın ... bekle, printf
GPU'larda yok . Bu nedenle, bellek konumlarına yazmanız ve CPU saplama programınızın onları tekrar okumasını sağlamanız gerekir.
Doğru: manuel hata ayıklama. Bununla iyi şanslar.
Ayrıca, C / C ++ ile kullandığınız bu yardımcı kitaplıklar? Belki de XNA ve benzerlerini kullanan daha çok bir .NET adamısınız. Ya da her neyse. Önemli değil, çünkü bunların hiçbirini GPU'da kullanamazsınız . Her şeyi sıfırdan kodlamanız gerekir. Zaten mevcut bir kod tabanına sahipseniz, zor: tüm kodları yeniden yazma zamanı.
Yani evet. Her türlü karmaşık oyun için gerçekten dehşet verici. Ve işe yaramadı bile, çünkü oyunlar yardım edecek kadar paralel değil.