"Çok iş parçacıklı zorluklar" hakkında konuşuyorsunuz ama gerçekte hangi zorluklardan bahsediyorsunuz? Bir şekilde, hayali bir problemi bile varolmayabilir. Asıl zorluk, kendin için yapman gereken bir şey - kesinlikle donanımın her bir son damlasından kurtulmaya kararlıysanız, donanımı en iyi etki için kullanmayı gerektiren, ancak aynı zamanda en güçlü makine arasındaki boşluğu genişleten ve en az güçlü olan. Bunun bir anlamı, gerçekten PS3'ten en iyi şekilde yararlanan bir oyununuz varsa (örneğin), yine de ucuz bir cep telefonunda gerçekten çalıştıramazsınız, bu nedenle sorununuz artık "nasıl 1 program alabilirim?" çok farklı donanımlar üzerinde çalışmak "ama" farklı oyunlarda farklı güçlerle çalışan donanımlar üzerinde çalışabilmeleri için 1 oyun fikrini birkaç farklı yolla nasıl uygulayabilirim "olur.
SDL gibi bir kütüphane, iş parçacığı için bir platformlar arası sarmalayıcı API sağlarken, bunun doğrudan farklı platformlarda (masaüstü / mobil) oyunların kolayca geliştirilmesine yol açtığını varsaymanın saf olacağını düşünüyorum.
Oyunların kolay gelişimi - elbette. Optimal çoklu okuma, hayır. Ama yok gerek oyun yapmak mulithread. Yüksek performans elde etmek için kesinlikle yardımcı olur. Ancak birçok harika oyun tek bir iş parçacığında yayınlanıyor.
Aşağıdakileri göz önünde bulundurarak (çapraz platform iş parçacığı API'ları verildiğinde) bu şekilde gelişmenin üstesinden gelmenin en iyi yolu nedir:
- farklı sayıda çekirdek
- Çekirdek başına çok farklı işlem yetenekleri
- Örneğin, genellikle farklı bir sistem mimarisi. önbellek, RAM ve G / Ç erişimi için farklı gecikmeler
İş parçacıklarına sistem atamaya çalışmak yerine, iş parçacıklarına görevler atayabilirsiniz. Her göreve çalışması ve ihtiyaç duyduğu verileri, hangi donanımın mevcut olduğu ile ilişkilendirerek verin. Genellikle, çeşitli çekirdek veya işlemcileri soyutlamak için bir tür iş parçacığı havuzuna ve bir görev sırasına sahip olan ve iş parçacığı bir önceki işin tamamlandığını bildirdiğinde ve iş parçacığı işini bitirdiğinde çeşitli iş parçacıklarına yönlendiren bir görev yöneticisine sahip olacaksınız. yeni bir tane için hazır. Daha fazla çekirdeğe sahip donanım, işleri daha hızlı tamamlar ve daha hızlı bir şekilde işlem yapar. Bu sistemin farklı özelliklere sahip sistemlerde en iyi şekilde çalışması için uzmanlaşmak ileri bir optimizasyon problemi haline gelir, ancak belirli sezgisel taramalara dayanabilir (örneğin;
Bununla birlikte, oyun özelliklerinin ayrık görevlere ayrıştırılması oldukça karmaşık bir konudur ve performansa ihtiyacınız olduğundan emin olmadığınız sürece, çoğu zaman çabaya değmez, bu yüzden çoğu kişi bunu denemez.
Biraz daha okuma:
http://www.gamasutra.com/view/feature/1830/multithreaded_game_engine_.php - 'veri paralel' bölümüne bakın. Bu modelde, veriler birkaç benzer görev arasında bölünür ve bireysel konulara dağıtılır.
http://software.intel.com/en-us/articles/designing-the-framework-of-a-parallel-game-engine/ - oldukça yoğun, oyun seviyesinden ziyade işletim sistemi seviyesindeki şeyleri açıklar.
http://drdobbs.com/high-performance-computing/216500409 - oyuna özgü değil, görevleri nasıl bölmeniz gerektiğini söyleme açısından tamamen alakalı.
http://www.itfgaming.com/news/tech-focus-crysis-2-and-the-future-of-cryengine-3 - Bu görüşme aşağı yarı yolda bir görev tabanlı sistemine geçiş konusunda bir hadise olarak .