GPUs นั้นดีมากในการทำงานแบบขนาน อันไหนดี ... ถ้าคุณกำลังทำงานขนานกัน
เป็นเกมที่เกี่ยวกับอย่างน้อยชนิด parallelizable ของการประยุกต์ใช้ คิดถึงห่วงหลักของเกม AI (สมมติว่าผู้เล่นจัดการเป็นกรณีพิเศษของ AI) ต้องตอบสนองต่อการชนที่ตรวจพบโดยฟิสิกส์ ดังนั้นจึงต้องเรียกใช้ในภายหลัง หรืออย่างน้อยที่สุดฟิสิกส์จำเป็นต้องเรียกกิจวัตรของ AI ภายในขอบเขตของระบบฟิสิกส์ (ซึ่งโดยทั่วไปจะไม่ใช่ความคิดที่ดีด้วยเหตุผลหลายประการ) กราฟิกไม่สามารถทำงานได้จนกว่าฟิสิกส์จะทำงานเนื่องจากฟิสิกส์เป็นสิ่งที่ปรับปรุงตำแหน่งของวัตถุ แน่นอน AI ต้องทำงานก่อนเรนเดอร์เช่นกันเนื่องจาก AI สามารถวางไข่วัตถุใหม่ได้ เสียงต้องทำงานหลังจาก AI และการควบคุมเครื่องเล่น
โดยทั่วไปเกมสามารถเธรดตัวเองในวิธีที่น้อยมาก สามารถหมุนกราฟิกในเธรด วนรอบเกมสามารถผลักข้อมูลจำนวนมากที่เธรดกราฟิกและพูดว่า: render สิ่งนี้ มันสามารถทำการแก้ไขพื้นฐานบางอย่างเพื่อให้วนรอบเกมหลักไม่จำเป็นต้องซิงค์กับกราฟิก เสียงเป็นอีกหัวข้อ ลูปเกมบอกว่า "เล่นสิ่งนี้" และเล่น
หลังจากนั้นก็เริ่มเจ็บปวด หากคุณมีอัลกอริทึมการกำหนดเส้นทางที่ซับซ้อน (เช่นสำหรับ RTS) คุณสามารถเธรดเหล่านั้นได้ อาจใช้เวลาสองสามเฟรมเพื่อให้อัลกอริธึมเสร็จสมบูรณ์ แต่อย่างน้อยก็พร้อมกัน ยิ่งไปกว่านั้นมันค่อนข้างยาก
ดังนั้นคุณจะดูที่ 4 เธรด: เกมกราฟิกเสียงและการประมวลผล AI ระยะยาว นั่นไม่มาก และที่ไม่ได้เกือบพอสำหรับ GPUs ซึ่งจะมีหลายร้อยตัวอักษรของหัวข้อในการบินในครั้งเดียว นั่นคือสิ่งที่ทำให้ GPU มีประสิทธิภาพ: สามารถใช้เธรดเหล่านั้นทั้งหมดได้ในครั้งเดียว และเกมก็ทำอย่างนั้นไม่ได้
ตอนนี้บางทีคุณอาจจะ "กว้าง" สำหรับการดำเนินการบางอย่าง ตัวอย่างเช่น AIs มักจะเป็นอิสระจากกัน ดังนั้นคุณสามารถประมวลผล AIs หลายโหลพร้อมกัน จนกระทั่งคุณต้องทำให้มันขึ้นอยู่กับแต่ละอื่น ๆ ถ้าคุณกำลังมีปัญหา วัตถุฟิสิกส์มีความเป็นอิสระในทำนองเดียวกัน ... เว้นแต่จะมีข้อ จำกัด ระหว่างพวกเขาและ / หรือพวกเขาชนกับบางสิ่ง จากนั้นพวกเขากลายเป็นที่พึ่งมาก
นอกจากนี้ยังมีความจริงที่ว่า GPU ไม่สามารถเข้าถึงอินพุตของผู้ใช้ซึ่งฉันเข้าใจว่าเป็นสิ่งสำคัญสำหรับเกม ดังนั้นจะต้องมีการจัด นอกจากนี้ยังไม่มีการเข้าถึงไฟล์โดยตรงหรือวิธีการพูดคุยกับระบบปฏิบัติการจริง ดังนั้นจะต้องมีวิธีที่จะให้สิ่งนี้ โอ้และการประมวลผลเสียงทั้งหมดนั้นเหรอ? GPU ไม่ส่งเสียง ดังนั้นผู้ที่ต้องกลับไปที่ซีพียูและจากนั้นออกไปที่ชิปเสียง
โอ้และการเข้ารหัสสำหรับ GPU นั้นแย่มาก เป็นการยากที่จะแก้ไขให้ถูกต้องและสิ่งที่ "ถูกต้อง" สำหรับสถาปัตยกรรม GPU หนึ่งอาจเป็นสิ่งที่ผิดอย่างยิ่งสำหรับอีกสิ่งหนึ่ง และนั่นไม่ได้เป็นเพียงการเปลี่ยนจาก AMD ไปเป็น NVIDIA ที่สามารถเปลี่ยนจาก GeForce 250 เป็น GeForce 450 ได้นั่นคือการเปลี่ยนแปลงในสถาปัตยกรรมพื้นฐาน และมันอาจทำให้โค้ดของคุณทำงานได้ไม่ดีนัก ไม่อนุญาตให้ใช้ C ++ และ C สิ่งที่ดีที่สุดที่คุณจะได้รับคือ OpenCL ซึ่งเหมือนกับ C แต่ไม่มีนิชนี่ เช่นเดียวกับการเรียกซ้ำ ถูกต้อง: ไม่มีการเรียกซ้ำบน GPU
แก้จุดบกพร่อง? โอ้ฉันหวังว่าคุณจะไม่ชอบคุณสมบัติการดีบัก IDE ของคุณเพราะสิ่งเหล่านั้นจะไม่สามารถใช้งานได้อย่างแน่นอน แม้ว่าคุณจะใช้ GDB ให้จูบลาก่อน คุณจะต้องทำการprintf
ดีบั๊ก ... รอไม่ต้องprintf
ใช้ GPU ดังนั้นคุณจะต้องเขียนไปยังตำแหน่งหน่วยความจำและให้โปรแกรม CPU stub อ่านกลับ
ถูกต้องแล้ว: การดีบักแบบแมนนวล ขอให้โชคดี
นอกจากนี้ไลบรารีที่เป็นประโยชน์ที่คุณใช้ใน C / C ++? หรือบางทีคุณเป็นคน. NET มากกว่าใช้ XNA และอื่น ๆ หรืออะไรก็ตาม ไม่สำคัญเนื่องจากคุณไม่สามารถใช้สิ่งใด ๆกับ GPU ได้ คุณต้องโค้ดทุกอย่างตั้งแต่เริ่มต้น และถ้าคุณมี codebase ที่มีอยู่แล้วเหนียว: เวลาในการเขียนรหัสนั้นใหม่ทั้งหมด
ใช่แล้ว เป็นเรื่องที่น่ากลัวมากที่ได้ทำเกมประเภทใดก็ได้ที่ซับซ้อน และมันก็ไม่ได้ผลเพราะเกมแค่ขนานกันไม่พอที่จะช่วย