DirectX 12 สร้างความปรองดองให้กราฟิกการ์ด เมื่อ GeForce และ Radeon ทำงานร่วมกันได้ในเกมเดียวกัน

DX12_image 003

เว็บไซต์ Tom’s Hardware ได้รายงานว่าได้มีการพูดคุยกับแหล่งข่าว และมีการพูดถึง APIs ของกราฟิกหนึ่งที่แหล่งข่าวไม่สามารถบอกชื่อของ API นี้ได้ แต่ทาง Tom’s Hardware ได้ประเมิณแล้วว่า API ที่แหล่งข่าวพูดถึงก็คือ DirectX 12

เราได้ลองเรียบเรียงเนื้อหาของบทความดังกล่าวได้ดังนี้ครับ

 เราได้ยินชื่อของ DirectX 12 มาตั้งแต่ปี 2013 แต่ในที่สุดแล้ว DirectX 12 ก็จะมาพร้อมกับระบบปฏิบัติการ Windows 10 ที่จะออกภายในปีนี้

API ใหม่นี้จะทำงานแตกต่างจาก API แบบเดิมอย่างมาก โดย API ใหม่นี้จะทำงานใกล้ชิดกับฮาร์ดแวร์มากว่า API แบบเก่า การทำงานก็จะมีลักษณะคล้ายกับ Mantle API ของเอเอ็มดีที่สามารถช่วยให้เฟรมเรตและค่าความหน่วงในการเล่นเกมได้ แต่นั่นก็ไม่ใช่ทั้งหมดที่ DirectX 12 มี

ใน DirectX 12 จะมีคุณสมบัติหนึ่งที่เรียกว่า Explicit Asynchronous Multi-GPU (***เป็นการประมวลผลโดยใช้ GPU ที่มีสเปคไม่เท่ากันช่วยกันประมวลผล ซึ่งตามปกติก็มีอยู่แล้ว แต่ไม่ใช่กับเกม) โดยคุณสมบัตินี้ทำให้ GPU ที่มีสถาปัตยกรรมแตกต่างกันสามารถทำงานร่วมกันได้ โดยตัว DirectX 12 จะมองทรัพยากรทางด้านกราฟิกทั้งหมดเป็นหน่วยประมวลผลหนึ่งชุด และนักพัฒนาเกมก็แบ่งงานออกเป็นส่วน ๆ ตามความเหมาะสม แล้วก็ใส่งานเข้าไปในหน่วยประมวลผลเพื่อให้ฮาร์ดแวร์จัดการกับงานต่าง ๆ

และส่วนหนึ่งในคุณสมบัติใหม่ในการทำงานแบบหลาย GPU นี้ก็คือการจัดการกับ Frame buffers (หน่วยความจำของ GPU) ซึ่งหน่วยความจำของ GPU ไม่จำเป็นต้องเก็บข้อมูลที่เหมือนกันอีกต่อไป ใน API แบบเก่าเพื่อที่จะได้รับประโยชน์จากการมีหลาย GPU (เช่น SLI) เราต้องให้ GPU ทั้งสองทำงานร่วมกันโดย GPU แต่ละตัวจะสลับกันทำหน้าที่ในการเรนเดอร์ หรือที่เรียกว่าเทคนิคแบบ AFR (Alternate Frame Rendering) ทำให้หน่วยความจำของ GPU แต่ละตัวจะมีข้อมูลเช่นเท็กซ์เจอร์ และรูปทรงเรขาคณิตที่ซ้ำกัน ดังนั้นถึงมีกราฟิกการ์ดสองตัวที่มีหน่วยความจำตัวละ 4GB หน่วยความจำรวมก็ยังมีแค่ 4GB อยู่ดี

ใน DirectX 12 ได้นำปัญหาเรื่องหน่วยความจำที่เป็น 4+4=4 ออกไป โดยจะใช้เทคนิคในการแสดงผลแบบ SFR (Split Frame Rendering) ซึ่งก็คือเทคนิคในการแบ่งภาพออกเป็นส่วน ๆ (เพิ่มเติม: แต่เดิมเทคนิคนี้ก็เคยมีการใช้กันมาก่อนแล้ว ถ้าใช้ GPU สองตัวก็จะแบ่งพื้นที่เรนเดอร์กันคนละครึ่งเฟรมโดยแบ่งเป็นส่วนบนและส่วนล่าง) นักพัฒนาสามารถกำหนดด้วยตัวเองหรือกำหนดเป็นอัตโนมัติ ว่าจะให้แบ่งข้อมูลของเท็กซ์เจอร์และข้อมูลของรูปทรงเรขาคณิตระหว่าง GPU หรือจะให้ GPU ทั้งหมดทำงานร่วมกันในแต่ละเฟรม ซึ่ง GPU แต่ละตัวก็จะทำงานมาส่วนส่วนหนึ่งของหน้าจอโดยแบ่งไปตามจำนวนของ GPU ที่ติดตั้ง

แหล่งข่าวยังให้ความเห็นว่าเทคโนโลยีจะช่วยลดค่าความหน่วง (latency) อย่างมีนัยสำคัญ และได้อธิบายให้เข้าใจได้ ด้วยการยกตัวอย่าง การเรนเดอร์แบบ AFS จำนวนของเฟรมเรตจำเป็นต้องจัดเรียงลำดับอยู่ในคิวเพื่อส่งมอบภาพการเล่นที่ราบรื่น แต่สิ่งนี้หมายความว่าภาพที่ปรากฏอยู่บนจอจะล้าหลังอยู่ 4-5 เฟรม เมื่อผู้ใช้มีการกดเมาส์หรือคีย์บอร์ดเพื่อเคลื่อนไหว

นี่หมายความว่าจำเป็นต้องส่งมอบเฟรมเรตที่สูงมาก แต่ว่าความหน่วงของภาพยังคงอยู่ทำให้รู้สึกว่าเกมนี้ตอบสนองได้ไม่ดีนัก

แม้จะใช้เทคนิค SFR, อย่างไรก็ตามความลึกของคิวเฟรมภาพก็ยังคงมีอยู่เสมอ อย่างน้อยที่สุดก็ต้องมีหนึ่งคิว เมื่อแต่ละ GPU ทำงานบนตำแหน่างที่แตกต่างกันบนหน้าจอ ความลึกของคิวก็จะลดลง ส่วนเฟรมเรตความจะสูงขึ้นเมื่อทรัพยากรมีความเป็นอิสระมากขึ้น

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

เป็นที่น่าตั้งข้อสังเกตว่าเกมอย่าง CIV: Beyond Earth รันด้วย Mantle มีตัวเลือกในการเรนเดอร์แบบ SFR  และทำงานในแนวทางที่คล้ายกัน เพราะว่า API Mantle ของเอเอ็มดีรองรับ SFR คุณต้องไม่ลืมว่า SFR ไม่ใช่เทคนิคใหม่ อุตสาหกรรมภาพยนตร์ วงการถ่ายภาพ การสร้างแบบจำลองกราฟิกแบบ 3D และย้อนไปถึงเกมในยุค 90 ต่างก็รองรับการทำงานในลักษณะนี้

Multiple-GPU ที่มีทั้ง AMD และ NVIDIA ในเครื่องเดียวกัน

เราได้คุยกันว่าการที่ DirectX 12 รองรับ Multiple-GPU แบบข้ามแพลตฟอร์ม ข้ามสถาปัตยกรรมนี้ จะหมายรวมไปถึงการทำงานกราฟิกชิป GeForce ของเอ็นวิเดีย กับ Radeon ของเอเอ็มดี สามารถช่วยการเรนเดอร์เกมเดียวกัน เฟรมเดียวกันไหม

นี่เป็นเรื่องที่น่าสนใจอย่างยิ่ง เมื่อ DirectX 12 ออกมาจะทำให้คุณสามารถใช้ประโยชน์จากเทคโนโลยีของฮาร์ดแวร์ทั้งสองได้ เช่นถ้าคุณต้องการใช้คุณสมบัติจาก GeForce Experience และ 3D Vision ในขณะเดียวกันคุณก็สามารถใช้คุณสมบัติ TureAuido และ FreeSync แต่สิ่งที่เกิดก็คือการ์ดตัวหนึ่งจะทำหน้าที่เป็นการ์ดหลักส่วนการ์ดอื่น ๆ จะเป็นตัวเสริม

สิ่งที่เราเห็นก็คือ DirectX 12 มีความสามารถในการรวมทรัพยากรของกราฟิกทั้งในส่วนของการประมวลผลและหน่วยความจำได้อย่างมีประสิทธิภาพมากที่สุด นี่ไม่ได้มีประโยชน์ต่อเดสก์ท็อปพีซีที่ใช้กราฟิกการ์ดแบบแยกเท่านั้น คอมพิวเตอร์โน้ตบุ๊กที่มีกราฟิการ์ดชิปในระบบสองตัว กราฟิกการ์ดแบบแยกกับกราฟิกการ์ดที่อยู่ในซีพียูก็สามารถที่ได้ประโยชน์จากคุณสมบัตินี้ด้วยเช่นกัน การมาของ DirectX 12 นี้อาจจะทำให้เทคโนโลยีอย่าง SLI และ CrossFire ล้าสมัยได้ในอนาคต

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

การใช้คิวเฟรมยังคงเป็นเรื่องที่ยุ่งยากสำหรับนักพัฒนาบางส่วน เช่นบางเกมก็ยังไม่มีความสามารถในการรองรับคุณสมบัติของการทำงานร่วมกับกราฟิกการ์ดแบบ SLI หรือ CrossFire แต่การใช้ SFR ใน DirectX 12 ควรจะแก้ปัญหาพวกนี้ได้

นี่คือข้อมูลทั้งหมดที่เราสามารถพูดถึงในตอนนี้ได้และเราคงจะได้เรียนรู้อะไรเพิ่มเติมได้จากงาน GDC (Game Developer Conference) ในครั้งต่อไป

เรียบเรียงข้อมูลจาก Toms’s Hardware.com

 

DX12_image 013

ข้อมูลเพิ่มเติมของ DirectX 12

จากบทความดังกล่างทีมงานของเราจึงได้ลองไปค้นหาข้อมูลเพิ่มเติมเกี่ยวกับ DirectX 12 ดูว่ามีความเป็นไปได้มากน้อยแค่ไหนที่คุณสมบัติเรื่อง Explicit Asynchronous Multi-GPU จะมีอยู่และสามารถใช้งานร่วมกับ GPU ที่มีสถาปัตยกรรมแตกต่างกันได้

และเท่าที่พอจะหาข้อมูลได้มากที่สุดย้อนไปยังงาน GDC 2014

ในงานครั้งนั้นถือว่าเป็นการเปิดตัว DirectX 12 อย่างเป็นทางการครั้งแรก โดยผู้ที่ขึ้นไปพูดบนเวทีนอกจากจะเป็นคนของไมโครซอฟท์เองแล้วก็ยังมีพันธมิตรรายใหญ่ ไม่ว่าจะเป็น AMD, Intel, NVIDIA และ Qualcomm ด้วย

โดยในงานนี้ก่อนที่ไมโครซอฟท์จะได้พูดถึงตัว DirectX 12 ไมโครซอฟท์ได้พูดถึงทิศทางการพัฒนาของฮาร์ดแวร์ที่ใช้ในการประมวลผลก่อนเป็นอันแรก ด้วยเรื่อง Silicon Trends ซึ่งประกอบไปด้วยประเด็นสำคัญก็คือประสิทธิภาพของตัว GPU นั้นมีการเติบโตและเพิ่มขึ้นอย่างรวดเร็ว แต่การเพิ่มขึ้นของประสิทธิภาพจาก CPU เมื่อเทียบกันแบบคอร์ต่อคอร์ถือว่ามีการเพิ่มขึ้นในอัตราที่ช้ามาก อย่างไรก็ดีตัว GPU เองก็ถูกท้าทายด้วยเรื่อง ความละเอียดของจอภาพที่เพิ่มขึ้น ความต้องการของคุณภาพกราฟิกที่สวยงามขึ้น และปริมาณงานมากเท่าไรที่สามารถรองรับได้

ต่อมาก็ได้พูดถึงว่านักพัฒนาเกมต้องการอะไร ซึ่งโมโครซอฟท์ก็ได้สรุปความต้องการของนักพัฒนาเกมก็คือ ต้องการ API ที่มีลักษณะเหมือนของเครื่องเล่นเกมคอนโซล (คงจะพัฒนาได้ง่าย) การควบคุมได้มากขึ้น จัดการปัญหาเรื่องทรัพยากรระหว่างแอพพลิเคชันกับ GPU ทิศทางและความสอดคล้อง การเรนเดอร์ขั้นสูง เครื่องมือในการจัดการและดีบั๊ก และความสะดวกสบายในการใช้งาน

แล้วก็สรุปในส่วนของไมโครซอฟต์ว่าสิ่งที่นักพัฒนาต้องการนั้นจะมีอยู่ใน DirectX 12 โดย DirectX 12 นี้จะครอบคลุมทุกแพลตฟอร์มที่ใช้ระบบปฏิบัติการวินโดวส์ของไมโครซอฟท์ตั้งแต่สมาร์ทโฟน แท็บเล็ต เดสก็ท็อป และเครื่องเล่นเกมคอนโซลอย่าง Xbox

จากนั้นเริ่มพูดถึงภาพรวมของคุณสมบัติบางส่วนที่เป็นจุดเด่นใน DirectX 12 นี้ และหนึ่งเรื่องที่น่าสนใจก็คือหัวข้อ Rendering Overhead หรือการใช้ทรัพยากรในการเรนเดอร์กราฟิกนั่นเอง ซึ่งไมโครซอฟท์ก็ได้แยกไว้เป็นประเด็นดังนี้

  • ลดขั้นตอนของ Pipeline (ในการสร้างภาพหนึ่งภาพจะมีสิ่งที่เรียกว่า Graphic Pipeline ที่มีขั้นตอนมากมาย บางขั้นตอนอาจจะทำพร้อมกันได้โดยไม่ต้องรอช่วยลดเวลา)
  • การนำคำสั่งกลับมาใช้ใหม่ (อันนี้เข้าใจว่าเป็นการทำซ้ำในบางส่วนโดยไม่ต้องโหลดข้อมูลใหม่เข้ามาทั้งหมด)
  • รองรับการทำงานแบบมัลติเธรดที่ดีขึ้น มีความยืดหยุดมากขึ้น มีการปรับปริมาณการใช้คอร์ของ CPU ให้เหมาะสมมากยิ่งขึ้น (ถ้าสังเกตดูเกมหรือกราฟิกจะเห็นได้ว่าบางครั้งเราแถบไม่ได้ประโยชน์อะไรจากซีพียู 4 คอร์ จะมีเพียงบางคอร์เท่านั้นที่ทำงานหนักอย่างโดดเด่น ส่วนคอร์อื่น ๆ นั้นทำงานต่างกันเกินกว่า 50% แต่ใน DirextX 12 คอร์ของซีพียูทุกคอร์จะถูกจัดสรรงานให้ทำอย่างเหมาะสมเป็นการเพิ่มประสิทธิภาพโดยรวม)
  • การใช้ทรัพยากรด้านกราฟิกจะมีความยืดหยุดมากขึ้น และมีประสิทธิภาพเพิ่มขึ้น โดยในประเด็นนี้มีการพูดถึงในส่วนของ CPU ว่าจะมีการกระจายงานที่ดีขึ้นเหมือนหัวข้อที่แล้ว และในส่วนของ GPU พูดแบบกว้าง ๆ กว่าจะขอบข่ายและพื้นที่ที่ใหญ่ขึ้น (แต่ถ้าได้อ่านจากบทความด้านบนก็มีความเป็นไปได้ในเรื่องของ Multi-GPU)
  • ประเด็นต่อมาพูดถึงเรื่องของ Shader และการแคชข้อมูลของ Pipeline ตรงนี้พูดโดยรวม ๆ ว่าในระหว่างที่ผู้ใช้เล่นเกมจะไม่ต้องมีการมาแปลชุดคำสั่งใหม่อีก เหมือนกับว่าถ้ามีข้อมูลอยู่แล้วใช้อยู่ก็สามารถนำมาใช้ได้เลย

DX12_image 004

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

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

ถัดมาก็เป็นการขึ้นเวทีของอินเทล ซึ่งได้มีการพูดถึงว่ามีการพัฒนาร่วมกันมาอย่างยาวนาน (ใช่ครับเรายังจำโลกในแบบ WinTel ได้) และก็ได้มาสรุปตรงที่ DirectX 12 จะช่วยให้เราใช้ประโยชน์จากคอร์ของซีพียูและส่วนที่เป็นกราฟิกที่รวมอยู่ในซีพียูได้ดีมากยิ่งขึ้น

จากนั้นก็เป็นคิวของเอ็นวิเดียครับ ซึ่งก็ออกมาพูดคล้าย ๆ กันกับทางเอเอ็มดี โดยเฉพาะมีการตอกย้ำเรื่องการใช้งานแบบ Multi-Core การรองรับ GPU ที่มีขนาดใหญ่ (หมายถึงการรวมกันของ GPU หลายชุด) พัฒนาได้ง่าย

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

แต่ว่าทั้งหมดนี้ก็พอจะทำให้เราชื่อได้ว่าสิ่งที่เว็บไซต์ Tom’s Hardware นำเสนอมานั้นมีโอกาสเกิดขึ้นได้อย่างแน่นอน แต่ว่ามันจะเกิดขึ้นได้ง่ายหรือยากอย่างไรก็คงต้องติดตามกันไปเรื่อย ๆ ครับ

สำหรับในตอนนี้เราก็เฝ้าติดตามกันไปก่อนครับ คิดว่าพอถึงช่วงงาน COMPUTEX 2015 ในเดือนมิถุนายน นี้เราก็คงจะได้เห็นความชัดเจนหรือการเปลี่ยนแปลงบางอย่างครับ

 

*** หมายเหตุเพิ่มเติม ***

อันที่จริงการทำงานแบบ ไฮบริจด์ครอสไฟร์ ของเอเอ็มดีที่ใช้ GPU ใน APU ทำงานร่วมกับ GPU ที่เป็นการ์ดแบบแยก ที่มีใช้กันอยู่ทุกวันนี้ก็พอจะทำให้มองเห็นภาพการทำงานของ DirectX 12 ได้บ้างนะครับ แต่ที่ DirectX 12 เหนือกว่านั้นก็คือไม่ได้สนใจว่าจะเป็นสถาปัตยกรรมแบบเดียวกันหรือไม่ เพราะในกรณีของไฮบริจด์ครอส์ไฟร์ เราก็ต้องดูว่าการ์ดที่นำมาใช้ร่วมกันนั้นมันเข้ากันได้หรือไม่

 

You may also like...