นักพัฒนา Arma 3 แก้ไขปัญหาการประมวลผล AI แบบขนานในการอัปเดตประสิทธิภาพครั้งใหญ่

ทีมชุมชน BigGo
นักพัฒนา Arma 3 แก้ไขปัญหาการประมวลผล AI แบบขนานในการอัปเดตประสิทธิภาพครั้งใหญ่

การอัปเดต Arma 3 เวอร์ชัน 2.20 ล่าสุดของ Bohemia Interactive ได้จุดประกายการสนทนาทางเทคนิคที่น่าสนใจเกี่ยวกับหนึ่งในความท้าทายที่ยืนยงที่สุดของวงการเกม นั่นคือการทำให้ระบบปัญญาประดิษฐ์และระบบสคริปต์ทำงานอย่างมีประสิทธิภาพข้ามหลายคอร์ของโปรเซสเซอร์ แม้ว่าการอัปเดตจะนำมาซึ่งการปรับปรุงประสิทธิภาพที่สำคัญผ่านการใช้ multithreading ที่ดีขึ้น แต่การสนทนาของชุมชนเผยให้เห็นข้อมูลเชิงลึกเพิ่มเติมว่าทำไม AI จึงยังคงยากต่อการประมวลผลแบบขนาน

การปรับปรุงของ Arma 3 Update 2.20:

  • ความสามารถในการประมวลผลแบบหลายเธรดที่ดีขึ้น
  • ระบบพารามิเตอร์ที่ได้รับการปรับปรุงใหม่ตั้งแต่เวอร์ชัน 1.50.128419
  • Activities Group Manager (AGM) ใหม่เพื่อการจัดการทรัพยากรที่ดีขึ้น
  • ระบบการสตรีมข้อมูลที่ได้รับการปรับปรุง (CPT)
  • การประมวลผลแบบเธรดของระบบจำลองอนุภาคที่ได้รับการอัปเดต
  • การจัดการพารามิเตอร์บรรทัดคำสั่งที่ดีขึ้น
แผนผังการทำงานที่แสดงความสัมพันธ์ระหว่าง main thread และ worker thread ซึ่งสะท้อนถึงการปรับปรุงทางเทคนิคในประสิทธิภาพ threading ของ AI
แผนผังการทำงานที่แสดงความสัมพันธ์ระหว่าง main thread และ worker thread ซึ่งสะท้อนถึงการปรับปรุงทางเทคนิคในประสิทธิภาพ threading ของ AI

ปัญหาหลักของการประมวลผล AI แบบขนาน

ปัญหาพื้นฐานอยู่ที่วิธีการออกแบบระบบ AI ของเกมแบบดั้งเดิม เกมเอนจินส่วนใหญ่ รวมถึงของ Arma 3 ให้ตัวละคร AI เข้าถึงข้อมูลทั้งหมดของโลกเกมได้อย่างสมบูรณ์และทันที สิ่งนี้สร้างคอขวดเพราะเมื่อหน่วย AI หลายตัวพยายามแก้ไขออบเจ็กต์เกมเดียวกันพร้อมกัน ความขัดแย้งจึงเกิดขึ้น ลองนึกภาพว่าเหมือนกับคนหลายคนพยายามแก้ไขเอกสารเดียวกันในเวลาเดียวกัน ความวุ่นวายจะเกิดขึ้นหากไม่มีการประสานงานที่เหมาะสม

นักพัฒนาชุมชนได้ระบุว่าการเลือกออกแบบแบบนี้ แม้จะดูเหมือนมีเหตุผล แต่จริงๆ แล้วป้องกันการประมวลผลแบบขนานที่มีประสิทธิภาพ เมื่อหน่วย AI ต้องโต้ตอบกับทรัพยากรที่ใช้ร่วมกัน เช่น จำนวนกระสุน คะแนนสุขภาพ หรือออบเจ็กต์ในโลกเกม ระบบจะต้องทำการดำเนินการเหล่านี้แบบอนุกรมเพื่อป้องกันการเสียหายของข้อมูล

แผนผังการทำงานที่แสดงรายละเอียดกระบวนการต่อเนื่องในการดำเนินงานของ AI โดยเน้นความซับซ้อนในการประสานงานทรัพยากรที่ใช้ร่วมกันระหว่างหน่วย AI
แผนผังการทำงานที่แสดงรายละเอียดกระบวนการต่อเนื่องในการดำเนินงานของ AI โดยเน้นความซับซ้อนในการประสานงานทรัพยากรที่ใช้ร่วมกันระหว่างหน่วย AI

แนวทางทางเลือกสำหรับการใช้เธรดของ AI

การสนทนาได้เผยให้เห็นโซลูชันที่มีแนวโน้มดีหลายแบบที่นักพัฒนาเกมอื่นๆ อาจพิจารณา แนวทางหนึ่งเกี่ยวข้องกับการให้ตัวละคร AI แต่ละตัวมีสำเนาข้อมูลโลกเกมในเครื่องที่พวกเขาสามารถอ่านได้ ขณะที่กำหนดให้พวกเขาส่งคำขอสำหรับการเปลี่ยนแปลงใดๆ ที่ต้องการทำ วิธีนี้จะขจัดความขัดแย้งโดยตรงที่ทำให้เกิดปัญหาการใช้เธรด

หากตัวละครแต่ละตัวทำสำเนาของโลกสำหรับสิ่งที่พวกเขารู้ จะไม่มีสิ่งใดป้องกันการประมวลผลแบบขนาน แม้ว่าสิ่งนี้จะหมายถึงการใช้หน่วยความจำแบบกำลังสอง แต่คุณสามารถจำกัดสิ่งนี้ได้ หากมีสิ่งต่างๆ เกิดขึ้นมาก เป็นเรื่องสมเหตุสมผลที่ตัวละครจะสูญเสียการติดตามบางส่วน

วิธีการอื่นใช้ระบบที่มีการหน่วงเวลาเฟรม โดยหน่วย AI อ่านข้อมูลจากเฟรมก่อนหน้าขณะเขียนการเปลี่ยนแปลงสำหรับเฟรมปัจจุบัน สิ่งนี้สร้างการแยกตามธรรมชาติระหว่างการดำเนินการอ่านและเขียน แม้ว่าจะสามารถสร้างความท้าทายด้านเวลาสำหรับการโต้ตอบที่ซับซ้อน

แนวทางเทคนิคหลักที่ได้หารือกัน:

  • โมเดล Actor-Copy: หน่วย AI แต่ละตัวจะได้รับสำเนาข้อมูลโลกของตัวเอง และส่งคำขอเปลี่ยนแปลง
  • ระบบ Frame-Delayed: AI อ่านข้อมูลจากเฟรม N-1 และเขียนข้อมูลไปยังเฟรม N
  • การแทนที่ Fork-Join: ระบบคิวแทนการประมวลผลแบบแบตช์
  • ขอบเขตการทำธุรกรรม: จุดควบคุมการโต้ตอบระหว่างหน่วย AI
  • การแลกเปลี่ยนหน่วยความจำ: การใช้ RAM เพิ่มขึ้นเพื่อการทำงานแบบขนานที่ดีขึ้น
แผนภาพของ main thread ที่ทำงานร่วมกับ worker threads แสดงแนวคิดของข้อมูลที่เก็บไว้ในเครื่องในการประมวลผลแบบขนานของ AI
แผนภาพของ main thread ที่ทำงานร่วมกับ worker threads แสดงแนวคิดของข้อมูลที่เก็บไว้ในเครื่องในการประมวลผลแบบขนานของ AI

ความท้าทายในการนำไปใช้ในโลกจริง

การสนทนาของชุมชนเน้นย้ำว่าโซลูชันเหล่านี้ไม่ใช่แค่ทฤษฎี แต่มาพร้อมกับการแลกเปลี่ยนในทางปฏิบัติ การใช้หน่วยความจำเพิ่มขึ้นอย่างมีนัยสำคัญเมื่อหน่วย AI แต่ละตัวรักษามุมมองโลกของตัวเอง นักออกแบบเกมยังต้องยอมรับว่าพฤติกรรม AI อาจจะแม่นยำน้อยลง เนื่องจากหน่วยต่างๆ ทำงานกับข้อมูลที่ล้าสมัยหรือไม่สมบูรณ์เล็กน้อย

ภาษาโปรแกรมอย่าง Rust กำลังทำให้รูปแบบเหล่านี้เข้าถึงได้ง่ายขึ้นโดยบังคับให้นักพัฒนาคิดอย่างรอบคอบเกี่ยวกับความเป็นเจ้าของข้อมูลตั้งแต่เริ่มต้น วินัยที่บังคับโดยคอมไพเลอร์นี้มักนำไปสู่การออกแบบที่สามารถประมวลผลแบบขนานได้ตามธรรมชาติ แม้ว่าจะต้องคิดใหม่เกี่ยวกับแนวทางสถาปัตยกรรมเกมแบบดั้งเดิม

บทเรียนสำหรับการพัฒนาเกม

การอัปเดตประสิทธิภาพของ Arma 3 ทำหน้าที่เป็นกรณีศึกษาสำหรับอุตสาหกรรมเกมในวงกว้าง แม้ว่า Bohemia Interactive จะได้ก้าวหน้าอย่างน่าประทับใจในการปรับปรุงเอนจินอายุ 12 ปีของพวกเขา แต่การสนทนาของชุมชนเผยให้เห็นว่าการตัดสินใจทางสถาปัตยกรรมบางอย่างที่ทำในช่วงต้นของการพัฒนายังคงจำกัดศักยภาพด้านประสิทธิภาพ

เกมเอนจินสมัยใหม่จำเป็นต้องสร้างสมดุลระหว่างความเข้ากันได้แบบย้อนหลังกับความต้องการด้านประสิทธิภาพมากขึ้น เมื่อจำนวนคอร์ของโปรเซสเซอร์เพิ่มขึ้นต่อไปในขณะที่ประสิทธิภาพคอร์เดียวหยุดนิ่ง ความท้าทายด้านการใช้เธรดเหล่านี้จะกลายเป็นสิ่งสำคัญมากขึ้นสำหรับการรักษาประสบการณ์การเล่นเกมที่ราบรื่น

การสนทนาทางเทคนิคที่ดำเนินต่อไปเกี่ยวกับการอัปเดตของ Arma 3 แสดงให้เห็นว่าความเชี่ยวชาญของชุมชนสามารถให้ความกระจ่างแก่ปัญหาทางวิศวกรรมที่ซับซ้อน โดยให้ข้อมูลเชิงลึกที่มีค่าสำหรับนักพัฒนาที่เผชิญกับความท้าทายที่คล้ายกันทั่วทั้งอุตสาหกรรมเกม

อ้างอิง: OPREP - PERFORMANCE OPTIMIZATIONS IN 2.20