DirectX 12 D3D12 ได้รับคุณสมบัติใหม่ที่ให้การควบคุมการจัดสรรหน่วยความจำมากขึ้นสำหรับ GPU หรือ CPU แบบไดนามิก
ในการอัปเดตหลักของ Windows 10 OS ที่กำลังจะมาถึง DirectX12 และโดยเฉพาะอย่างยิ่ง Direct3D (D3D12) จะไม่ได้รับแฟล็กใหม่ แต่จะเปลี่ยนวิธีการจัดสรรทรัพยากรหน่วยความจำ ดูเหมือนว่า Microsoft กังวลอย่างถูกต้องเกี่ยวกับวิธีที่หน่วยความจำและกำลังประมวลผลได้รับการร้องขอและจัดสรรให้กับแอปพลิเคชัน ซึ่งมักจะสร้างปัญหาคอขวดได้ อนึ่งแฟล็กใหม่เหล่านี้จะไม่ส่งผลกระทบโดยตรงต่อหน่วยความจำ แต่จะส่งผลกระทบต่อวิธีการจัดสรรและจัดการมากกว่า
Microsoft ได้พัฒนาแพลตฟอร์ม DirectX ซ้ำล่าสุดซึ่งเป็นมาตรฐานชั้นนำสำหรับการเล่นเกมบนเดสก์ท็อปมายาวนาน Microsoft DirectX 12 เวอร์ชันล่าสุดได้รับคุณสมบัติใหม่หลายอย่างเมื่อเร็ว ๆ นี้ เมื่อเร็ว ๆ นี้เราได้กล่าวถึงไฟล์ คุณลักษณะใหม่ที่โดดเด่นและสำคัญที่สุดสำหรับ DirectX 12 ซึ่งจะเป็นประโยชน์อย่างมากต่อนักพัฒนาและผู้ใช้ปลายทาง สัปดาห์นี้ Microsoft ระบุว่าการอัปเดตที่สำคัญครั้งต่อไปสำหรับ Windows 10 ควรมีการตั้งค่าสถานะใหม่สองรายการสำหรับ DirectX12 Direct3D ที่น่าสนใจคือนักพัฒนาที่ต้องการสำรวจสิ่งเดียวกันในวันนี้จำเป็นต้องดาวน์โหลดและติดตั้ง Windows 10 Insider Preview build ล่าสุดและ SDK Preview Build สำหรับ Windows 10 (20H1) จากโปรแกรม Windows Insider
Windows 10 DirectX 12 Direct3D เพื่อรับสองแฟล็กใหม่สำหรับการจัดสรรหน่วยความจำแบบไดนามิกระหว่าง CPU และ GPU:
ในการอัปเดต Windows 10 ที่กำลังจะมาถึงนี้ D3D12 จะเพิ่มค่าสถานะใหม่สองรายการในการแจงนับ D3D12_HEAP_FLAG อนึ่งแฟล็กใหม่เหล่านี้เป็นคุณสมบัติ "อนิจจัง" พูดง่ายๆก็คือการตั้งค่าสถานะใหม่จะไม่ส่งผลโดยตรงต่อหน่วยความจำที่เป็นผลลัพธ์ แฟล็กใหม่จะส่งผลต่อวิธีการจัดสรรหน่วยความจำแทน ยิ่งไปกว่านั้นค่าสถานะเหล่านี้จะไม่สะท้อนจาก ID3D12Heap :: GetDesc หรือ ID3D12Resource :: GetHeapProperties.
D3D12_HEAP_FLAG_CREATE_NOT_RESIDENT:
ในการทำซ้ำในปัจจุบันเมื่อใดก็ตามที่นักพัฒนาร้องขอ D3D เพื่อจัดสรรฮีปหรือทรัพยากรที่มุ่งมั่นสิ่งสุดท้ายที่เกิดขึ้นก่อนที่เขาจะได้รับวัตถุกลับคืนมาคือหน่วยความจำที่ถูกทำให้มีถิ่นที่อยู่ สิ่งนี้คล้ายกับ ID3D12Device :: MakeResident กำลังดำเนินการ ไม่จำเป็นต้องเพิ่มกระบวนการดังกล่าวนำเสนอสองประเด็นทันที:
- การออกแบบบล็อกเธรดของ CPU จนกว่าหน่วยความจำจะพร้อมใช้งานอย่างเต็มที่ นี่ไม่ใช่สถานการณ์ในอุดมคติหรือต้องการ
- กระบวนการนี้ยังช่วยให้นักพัฒนาสามารถ overcommit หน่วยความจำเกินกว่าที่งบประมาณของกระบวนการปัจจุบันระบุว่าเขาควรใช้
ที่เพิ่มเข้ามาใหม่ ID3D12Device3 :: EnqueueMakeResident ช่วยให้แอปสามารถสร้างทางเลือกที่แตกต่างกันได้ แอปอาจรอการอยู่อาศัยโดยใช้ GPU แทน CPU หรือขอให้การดำเนินการที่อยู่อาศัยล้มเหลวแทนที่จะใช้งบประมาณเกิน การจัดสรรหน่วยความจำในสถานะที่ไม่มีถิ่นที่อยู่ส่งผลให้ทั้งสองได้รับประโยชน์จากการใช้ทรัพยากรครั้งแรก
D3D12_HEAP_FLAG_CREATE_NOT_ZEROED:
แฟล็กนี้พยายามแก้ไขเนื้อหาที่เป็นศูนย์ที่คอมมิตรีซอร์สและฮีปที่สร้างขึ้นใหม่โดย D3D ที่ได้รับ Microsoft พยายามเพิ่มประสิทธิภาพกระบวนการนี้โดยการเปิดใช้หน่วยความจำที่ใช้ซ้ำได้มากขึ้นซึ่งไม่เคยออกนอกขอบเขตของกระบวนการที่กำหนดโดยไม่มีศูนย์ อย่างไรก็ตามสิ่งนี้ไม่ได้ผลและบังคับให้วิศวกรของ Microsoft ต้องกลับไปคืนหน่วยความจำที่เป็นศูนย์เท่านั้น ไม่จำเป็นต้องพูดถึงวิธีนี้ค่อนข้างน่าเบื่อเนื่องจากตัวจัดการหน่วยความจำจำเป็นต้องเขียนศูนย์ลงในหน่วยความจำอย่างชัดเจนก่อนที่จะส่งคืนให้กับนักพัฒนาเพื่อนำกลับมาใช้ใหม่
ในฐานะวิธีการเพิ่มประสิทธิภาพกระบวนการนักพัฒนาจะได้รับความสามารถในการเลือกไม่ใช้กระบวนการที่น่าเบื่อโดยเพียงแค่ระบุแฟล็กใหม่ในระหว่างการจัดสรรฮีป / ทรัพยากร โดยพื้นฐานแล้วการจัดสรรใหม่แบบไดนามิกสามารถลดขั้นตอนการศูนย์ตลอดเวลาที่จำเป็นให้เหลือน้อยที่สุดและจัดสรรหน่วยความจำว่างบางส่วนที่กระบวนการของนักพัฒนาใช้โดยไม่ต้องบังคับผ่านกระบวนการ re-zero
Microsoft ได้เพิ่มแฟล็กใหม่เหล่านี้แล้วและไม่ต้องการไดรเวอร์ใหม่ ยิ่งไปกว่านั้นไม่มีการทุ่มเท ตรวจสอบคุณสมบัติการสนับสนุน ตัวเลือกสำหรับสิ่งเหล่านี้ โดยพื้นฐานแล้ว แฟล็กใหม่เหล่านี้จะพร้อมใช้งานทุกเมื่อที่มีการเปิดเผย ID3D12Device8 หรือการตรวจสอบ D3D12_FEATURE_D3D12_OPTIONS7 สำเร็จ ความต้องการแฟล็กใหม่ทั้งหมดคือนักพัฒนาควรรันกระบวนการบน D3D12 เวอร์ชันที่เข้าใจ