DirectX 12 D3D12 ได้รับคุณสมบัติใหม่ที่ให้การควบคุมการจัดสรรหน่วยความจำมากขึ้นสำหรับ GPU หรือ CPU แบบไดนามิก

ฮาร์ดแวร์ / DirectX 12 D3D12 ได้รับคุณสมบัติใหม่ที่ให้การควบคุมการจัดสรรหน่วยความจำมากขึ้นสำหรับ GPU หรือ CPU แบบไดนามิก อ่าน 3 นาที

DirectX 12



ในการอัปเดตหลักของ 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 เพื่อรับ 2 ธงใหม่สำหรับการจัดสรรหน่วยความจำแบบไดนามิกระหว่าง CPU และ GPU:

ในการอัปเดต Windows 10 ที่กำลังจะมาถึงนี้ D3D12 จะเพิ่มค่าสถานะใหม่สองรายการในการแจงนับ D3D12_HEAP_FLAG อนึ่งแฟล็กใหม่เหล่านี้เป็นคุณสมบัติ 'อนิจจัง' พูดง่ายๆก็คือการตั้งค่าสถานะใหม่จะไม่ส่งผลโดยตรงต่อหน่วยความจำที่เป็นผลลัพธ์ แฟล็กใหม่จะส่งผลต่อวิธีการจัดสรรหน่วยความจำแทน ยิ่งไปกว่านั้นค่าสถานะเหล่านี้จะไม่สะท้อนจาก ID3D12Heap :: GetDesc หรือ ID3D12Resource :: GetHeapProperties .



D3D12_HEAP_FLAG_CREATE_NOT_RESIDENT:

ในการทำซ้ำในปัจจุบันเมื่อใดก็ตามที่นักพัฒนาร้องขอ D3D เพื่อจัดสรรฮีปหรือทรัพยากรที่มุ่งมั่นสิ่งสุดท้ายที่เกิดขึ้นก่อนที่เขาจะได้รับวัตถุกลับคืนมาคือหน่วยความจำที่ถูกสร้างขึ้นมา สิ่งนี้คล้ายกับ ID3D12Device :: MakeResident กำลังดำเนินการ ไม่จำเป็นต้องเพิ่มกระบวนการดังกล่าวนำเสนอสองประเด็นทันที:



  1. การออกแบบจะบล็อกเธรด CPU จนกว่าหน่วยความจำจะพร้อมใช้งานอย่างเต็มที่ นี่ไม่ใช่สถานการณ์ในอุดมคติหรือต้องการ
  2. กระบวนการนี้ยังช่วยให้นักพัฒนาสามารถ overcommit หน่วยความจำเกินกว่าที่งบประมาณของกระบวนการปัจจุบันระบุว่าเขาควรใช้

ที่เพิ่มเข้ามาใหม่ ID3D12Device3 :: EnqueueMakeResident ช่วยให้แอปสามารถสร้างทางเลือกต่างๆ แอปอาจรอการอยู่อาศัยโดยใช้ GPU แทน CPU หรือขอให้การดำเนินการที่อยู่อาศัยล้มเหลวแทนที่จะใช้งบประมาณเกิน การจัดสรรหน่วยความจำในสถานะที่ไม่มีถิ่นที่อยู่ส่งผลให้ทั้งสองได้รับประโยชน์จากการใช้ทรัพยากรครั้งแรก

D3D12_HEAP_FLAG_CREATE_NOT_ZEROED:

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

ในฐานะวิธีการเพิ่มประสิทธิภาพกระบวนการนักพัฒนาจะได้รับความสามารถในการเลือกไม่ใช้กระบวนการที่น่าเบื่อโดยเพียงแค่ระบุแฟล็กใหม่ระหว่างการจัดสรรฮีป / ทรัพยากร โดยพื้นฐานแล้วการจัดสรรใหม่แบบไดนามิกสามารถลดขั้นตอนการศูนย์ตลอดเวลาที่จำเป็นให้น้อยที่สุดและจัดสรรหน่วยความจำว่างบางส่วนที่กระบวนการของนักพัฒนาใช้โดยไม่ต้องบังคับผ่านกระบวนการ re-zero



Microsoft ได้เพิ่มแฟล็กใหม่เหล่านี้แล้วและไม่ต้องการไดรเวอร์ใหม่ ยิ่งไปกว่านั้นไม่มีการทุ่มเท ตรวจสอบคุณสมบัติการสนับสนุน ตัวเลือกสำหรับสิ่งเหล่านี้ โดยพื้นฐานแล้วแฟล็กใหม่เหล่านี้จะพร้อมใช้งานทุกเมื่อที่ ID3D12Device8 ถูกเปิดเผยหรือตรวจสอบ D3D12_FEATURE_D3D12_OPTIONS7 สำเร็จ ความต้องการแฟล็กใหม่ทั้งหมดคือนักพัฒนาควรรันกระบวนการบนเวอร์ชัน D3D12 ซึ่งเข้าใจกระบวนการ

แท็ก X12 โดยตรง directx ไมโครซอฟต์ Windows