Anda berbicara tentang "kesulitan multithreading" tetapi kesulitan apa yang sebenarnya Anda bicarakan? Dengan cara Anda mengutip masalah hantu yang bahkan mungkin tidak ada. Tantangan sebenarnya adalah tantangan yang Anda buat untuk diri sendiri - jika Anda benar-benar bertekad untuk mengeluarkan setiap tetes daya terakhir dari perangkat keras, yang memang melibatkan penggunaan perangkat keras untuk efek terbaik, tetapi itu juga memperlebar jarak antara mesin paling kuat dan yang paling kuat. Implikasinya adalah jika Anda memiliki game yang benar-benar memanfaatkan PS3 (misalnya), Anda tidak dapat menjalankannya di ponsel murah, jadi masalahnya bukan lagi "bagaimana saya bisa mendapatkan 1 program untuk bekerja di perangkat keras yang sangat berbeda "tetapi menjadi" bagaimana saya bisa menerapkan 1 ide permainan beberapa cara berbeda sehingga bekerja pada perangkat keras yang berbeda daya ".
Sementara perpustakaan seperti SDL menyediakan API pembungkus lintas-platform untuk threading, saya pikir akan naif untuk menganggap bahwa ini mengarah langsung ke pengembangan game yang mudah di berbagai platform yang sangat berbeda (desktop / seluler).
Pengembangan game yang mudah - tentu saja. Multithreading optimal, tidak. Tapi Anda tidak perlu multithreading untuk membuat game. Untuk membuat yang berkinerja tinggi, tentu membantu. Tetapi banyak game hebat berjalan dalam satu utas.
Apa cara terbaik untuk mengatasi pengembangan dengan cara ini (diberikan API threading lintas-platform) dengan mempertimbangkan hal berikut:
- jumlah core yang berbeda
- kemampuan pemrosesan yang sangat berbeda per inti
- Arsitektur sistem yang umumnya berbeda dengan misalnya. latensi berbeda untuk cache, RAM, dan akses I / O
Alih-alih mencoba menetapkan sistem ke utas, tetapkan tugas ke utas. Berikan setiap tugas data yang dibutuhkan untuk menjalankan dan mengolah tugas ke perangkat keras mana pun yang tersedia. Biasanya Anda akan memiliki semacam kumpulan utas untuk mengabstraksi berbagai inti atau prosesor, dan seorang pengelola tugas yang memiliki antrian tugas dan menghasilkannya hingga ke berbagai utas ketika utas memberi sinyal bahwa itu telah menyelesaikan tugas sebelumnya dan siap untuk yang baru. Perangkat keras dengan lebih banyak inti jelas akan menyelesaikan tugas lebih cepat dan dapat membuat lebih cepat. Mengkhususkan sistem ini untuk bekerja secara optimal pada sistem dengan karakteristik yang berbeda menjadi masalah optimisasi lanjutan, tetapi dapat didasarkan pada heuristik tertentu (mis. Tugas yang tidak
Namun, penguraian fitur permainan menjadi tugas-tugas tersendiri adalah masalah yang cukup kompleks dan seringkali tidak sepadan dengan usaha kecuali Anda sangat yakin bahwa Anda membutuhkan kinerja, sehingga sebagian besar bahkan tidak akan mencobanya.
Beberapa bacaan lebih lanjut:
http://www.gamasutra.com/view/feature/1830/multithreaded_game_engine_.php - lihat bagian 'data paralel'. Dengan model ini, data dibagi ke beberapa tugas yang identik dan dialirkan ke masing-masing utas.
http://software.intel.com/en-us/articles/designing-the-framework-of-a-parallel-game-engine/ - cukup padat, menjelaskan hal-hal di level OS daripada level game.
http://drdobbs.com/high-performance-computing/216500409 - tidak spesifik untuk game, tetapi sepenuhnya relevan dalam hal memberi tahu Anda bagaimana Anda harus membagi tugas.
http://www.itfgaming.com/news/tech-focus-crysis-2-and-the-future-of-cryengine-3 - setengah jalan wawancara ini adalah anekdot tentang bagaimana mereka bermigrasi ke sistem berbasis tugas .