Birden çok çekirdeğin avantajlarından yararlanmak için ortak yaklaşım açıkçası sadece yanlış yönlendirilmiş. Alt sistemlerinizi farklı iş parçacıklarına ayırmak işin bir kısmını birden fazla çekirdeğe bölecektir, ancak bazı büyük sorunları var. İlk olarak, çalışmak çok zor. Kim kendi yerine basit bir render veya fizik kodu yazarken, kilitlerle, senkronizasyon ve iletişim ile uğraşmak ister? İkincisi, yaklaşım aslında ölçeklenmiyor. En iyi ihtimalle, bu belki üç ya da dört çekirdekten faydalanmanıza izin verecek ve eğer gerçekten ne yaptığınızı biliyorsanız. Bir oyunda yalnızca çok sayıda alt sistem var ve bunlardan daha az CPU işleminin büyük bölümünü kaplayanlar bile var. Bildiğim birkaç iyi alternatif var.
Birincisi, her ek CPU için bir çalışan iş parçacığı ile birlikte bir ana iş parçacığı olması. Alt sistem ne olursa olsun, ana iş parçacığı, bir tür sıra (lar) aracılığıyla işçi iş parçacıklarına izole edilmiş görevler verir; Bu görevlerin kendileri de başka görevler yaratabilir. İşçi iş parçacığının tek amacı, sıradaki işlerin her seferinde sırayla alınması ve gerçekleştirilmesidir. Yine de en önemli şey, bir iş parçacığının bir görevin sonucuna ihtiyaç duyduğu anda, görev tamamlanırsa sonucun ortaya çıkabileceğidir ve eğer değilse, görevi kuyruktan güvenle kaldırabilir ve devam edip bunu yapabilir. Görevin kendisi. Yani, tüm görevler birbirine paralel olarak planlanmayacaktır. Paralel olarak yürütülebilecek işlemlerden daha fazlasına sahip olmak iyidir.Bu durumda bir şey; daha fazla çekirdek ekledikçe ölçeklendirme olasılığı olduğu anlamına gelir. Bunun bir dezavantajı, zaten sizin için bunu sağlayan bir kütüphaneye veya dil çalışma zamanına erişiminiz olmadıkça, düzgün bir sıra ve işçi döngüsü tasarlamak için çok fazla çalışma gerektirmesidir. En zor kısım, görevlerinizin gerçekten yalıtılmış ve iş parçacığınızın güvenli olduğundan emin olmanız ve görevlerinizin kaba taneli ve ince taneli arasında mutlu bir orta zeminde olduğundan emin olmaktır.
Alt sistem iş parçacıklarına başka bir alternatif, her bir alt sistemi yalıtımlı olarak paralelleştirmektir. Diğer bir deyişle, oluşturma ve fiziği kendi iş parçacıklarında çalıştırmak yerine, tüm çekirdeklerinizi bir kerede kullanmak için fizik alt sistemini, tüm çekirdeklerinizi bir seferde kullanmak için oluşturma alt sistemini yazın, ardından iki sistemin sırayla çalışmasını sağlayın (veya araya sokulmasını, oyun mimarinizin diğer yönlerine bağlı olarak). Örneğin, fizik alt sisteminde, oyundaki tüm puan kütlelerini alabilir, onları çekirdekleriniz arasında bölebilir ve ardından tüm çekirdeklerin bir kerede güncellemesini sağlayabilirsiniz. Her çekirdek, verileriniz üzerinde iyi bir konuma sahip sıkı döngülerle çalışabilir. Bu kilit adım paralellik tarzı bir GPU'nun yaptıklarına benzer. Buradaki en zor kısım, çalışmanızı ince taneli parçalara ayırdığınızdan ve eşit şekilde böldüğünüzden emin olmaktır.aslında tüm işlemciler arasında eşit miktarda çalışmayla sonuçlanır.
Bununla birlikte, bazen politikaya, mevcut yasalara veya diğer sinir bozucu durumlara bağlı olarak, her alt sisteme bir konu vermek en kolay olanıdır. Bu durumda, CPU ağır iş yükleri için çekirdeklerden daha fazla işletim sistemi iş parçacığı oluşturmaktan kaçınmak en iyisidir (yalnızca çekirdekleriniz arasında dengelenebilecek hafif ipliklerle çalışma süreniz varsa, bu büyük bir sorun değildir). Ayrıca, aşırı iletişimden kaçının. Güzel bir numara, boru hattını denemek; Her büyük alt sistem bir seferde farklı bir oyun durumu üzerinde çalışıyor olabilir. Boru hatları, aynı anda aynı verilere erişmeleri gerekmediği için alt sistemleriniz arasında gerekli iletişim miktarını azaltır ve aynı zamanda darboğazların neden olduğu zararın bir kısmını geçersiz kılabilir. Örneğin, Fizik alt sisteminizin tamamlanması uzun zaman alıyorsa ve oluşturma alt sisteminiz her zaman bekliyorsa sona ererse, görüntü alt sistemi hala bir önceki karede çalışırken bir sonraki kare için fizik alt sistemini çalıştırırsanız, mutlak kare hızınız daha yüksek olabilir çerçevesi. Aslında, eğer bu gibi sıkıntılarınız varsa ve bunları başka bir yolla kaldıramazsanız, boru tesisatı alt sistem konularıyla uğraşmanın en meşru nedeni olabilir.