คุณพูดถึง "ความยากในการมัลติเธรด" แต่คุณกำลังพูดถึงความยากลำบากอะไรบ้าง? ในแบบที่คุณอ้างถึงปัญหาผีซึ่งอาจไม่มีอยู่ ความท้าทายที่แท้จริงคือสิ่งที่คุณทำด้วยตัวคุณเอง - หากคุณตั้งใจแน่วแน่ที่จะรับพลังงานทุกหยดสุดท้ายจากฮาร์ดแวร์ชิ้นหนึ่งซึ่งเกี่ยวข้องกับการใช้ฮาร์ดแวร์เพื่อผลที่ดีที่สุด แต่ยังขยายช่องว่างระหว่างเครื่องที่ทรงพลังที่สุด และทรงพลังน้อยที่สุด ความหมายของสิ่งนี้คือถ้าคุณมีเกมที่ใช้ประโยชน์จาก PS3 มากที่สุด (ตัวอย่าง) คุณจะไม่สามารถเรียกใช้บนมือถือราคาถูกได้ดังนั้นปัญหาของคุณก็คือ "ฉันจะได้ 1 โปรแกรม เพื่อทำงานกับฮาร์ดแวร์ที่แตกต่างกันมาก "แต่กลายเป็น" ฉันจะใช้ความคิดเกม 1 ได้หลายวิธีเพื่อให้ทำงานบนฮาร์ดแวร์ที่ขับเคลื่อนแตกต่างกัน "
ในขณะที่ไลบรารี่อย่าง SDL มี API wrapper ข้ามแพลตฟอร์มสำหรับทำเกลียวฉันคิดว่ามันไร้เดียงสาที่จะคิดว่าสิ่งนี้นำไปสู่การพัฒนาเกมโดยตรงบนแพลตฟอร์มที่แตกต่างกันอย่างมากมาย (เดสก์ท็อป / มือถือ)
การพัฒนาเกมง่าย ๆ - แน่นอน มัลติเธรดที่ดีที่สุดไม่ใช่ แต่คุณไม่จำเป็นต้องใช้มัลติเธรดเพื่อสร้างเกม เพื่อให้ได้ประสิทธิภาพสูงมันช่วยได้อย่างแน่นอน แต่เกมที่ยอดเยี่ยมจำนวนมากทำงานในหัวข้อเดียว
เป็นวิธีที่ดีที่สุดในการแก้ไขปัญหาการพัฒนาด้วยวิธีนี้ (ให้ข้ามเธรด API ใด ๆ ) พิจารณาดังต่อไปนี้:
- จำนวนแกนที่แตกต่างกัน
- ความสามารถในการประมวลผลที่แตกต่างกันอย่างมากมายต่อคอร์
- สถาปัตยกรรมระบบที่แตกต่างโดยทั่วไปด้วยเช่น เวลาแฝงที่แตกต่างกันสำหรับการเข้าถึงแคช RAM และ I / O
แทนที่จะพยายามกำหนดระบบให้กับเธรดให้กำหนดภารกิจให้กับเธรด ให้แต่ละข้อมูลที่จำเป็นในการเรียกใช้และส่งงานให้กับฮาร์ดแวร์ที่มีอยู่ โดยปกติคุณจะมีเธรดพูลเพื่อแยกคอร์หรือตัวประมวลผลต่าง ๆ ออกและตัวจัดการงานที่มีคิวของงานและให้เธรดเหล่านั้นขึ้นกับเธรดต่างๆเมื่อเธรดส่งสัญญาณว่างานเสร็จก่อนหน้าและเป็น พร้อมสำหรับการใหม่ ฮาร์ดแวร์ที่มีคอร์มากขึ้นจะทำให้งานเสร็จเร็วขึ้นและสามารถแสดงผลได้เร็วขึ้น การให้ระบบนี้ทำงานอย่างมีประสิทธิภาพสูงสุดบนระบบที่มีคุณสมบัติแตกต่างกันจะกลายเป็นปัญหาการปรับให้เหมาะสมขั้นสูง แต่อาจขึ้นอยู่กับฮิวริสติกบางอย่าง (เช่นงานที่ไม่ทำงาน)
อย่างไรก็ตามการแยกส่วนของคุณสมบัติเกมออกเป็นงานที่ไม่ต่อเนื่องนั้นค่อนข้างซับซ้อนและมักไม่คุ้มค่ากับความพยายามเว้นแต่คุณจะแน่ใจว่าคุณต้องการประสิทธิภาพดังนั้นส่วนใหญ่จะไม่พยายาม
อ่านเพิ่มเติมบางส่วน:
http://www.gamasutra.com/view/feature/1830/multithreaded_game_engine_.php - ดูส่วน 'data parallel' ด้วยโมเดลนี้ข้อมูลจะถูกแบ่งออกเป็นหลาย ๆ งานที่เหมือนกันและส่งไปยังแต่ละเธรด
http://software.intel.com/en-us/articles/designing-the-framework-of-a-parallel-game-engine/ - ค่อนข้างหนาแน่นอธิบายสิ่งต่าง ๆ ในระดับระบบปฏิบัติการมากกว่าระดับเกม
http://drdobbs.com/high-performance-computing/216500409 - ไม่ใช่เกมที่เฉพาะเจาะจง แต่มีความเกี่ยวข้องอย่างสมบูรณ์ในแง่ของการบอกคุณว่าคุณต้องแบ่งงานอย่างไร
http://www.itfgaming.com/news/tech-focus-crysis-2-and-the-future-of-cryengine-3 - ครึ่งทางของการสัมภาษณ์ครั้งนี้เป็นเรื่องเล็ก ๆ น้อย ๆ เกี่ยวกับวิธีที่พวกเขาอพยพไปยังระบบที่อิงกับภารกิจ .