การรองรับฟังก์ชันในตัวของ DP4a ใน WGSL
DP4a (Dot Product of 4 Elements and Accumulate) หมายถึงชุดคำสั่ง GPU ที่ใช้กันโดยทั่วไปในการอนุมานการเรียนรู้เชิงลึกสำหรับการวัดปริมาณ โดยจะดำเนินการผลคูณแบบจุดที่เป็นจำนวนเต็ม 8 บิตได้อย่างมีประสิทธิภาพเพื่อเร่งการคำนวณโมเดลแบบ int8 ดังกล่าว ช่วยประหยัดหน่วยความจำและแบนด์วิดท์ของเครือข่าย (สูงสุด 75%) และปรับปรุงประสิทธิภาพของโมเดลแมชชีนเลิร์นนิงในการแบ่งเขตพื้นที่เสมือนเมื่อเทียบกับเวอร์ชัน f32 ด้วยเหตุนี้ ปัจจุบันเฟรมเวิร์ก AI ยอดนิยมจึงนิยมใช้กันมาก
เมื่อมีส่วนขยายภาษา WGSL ของ "packed_4x8_integer_dot_product"
แสดงใน navigator.gpu.wgslLanguageFeatures
ตอนนี้คุณสามารถใช้สเกลาร์จำนวนเต็ม 32 บิตที่รวมเวกเตอร์ 4 คอมโพเนนต์ของจำนวนเต็ม 8 บิตเป็นอินพุตสำหรับคำแนะนำผลิตภัณฑ์จุดในโค้ดตัวปรับแสง WGSL ด้วยฟังก์ชันในตัว dot4U8Packed
และ dot4I8Packed
คุณยังสามารถใช้วิธีการบรรจุและคลายการแพคข้อมูลที่ประกอบด้วยเวกเตอร์ 4 ส่วนประกอบของจำนวนเต็ม 8 บิตที่อัดแน่นไปด้วยฟังก์ชัน WGSL ในตัว pack4xI8
, pack4xU8
, pack4xI8Clamp
, pack4xU8Clamp
, unpack4xI8
และ unpack4xU8
ฟังก์ชัน WGSL
ขอแนะนำให้ใช้ requires-directive เพื่อส่งสัญญาณความเป็นไปได้ที่จะดำเนินการไม่ได้ด้วย requires packed_4x8_integer_dot_product;
ที่ด้านบนของโค้ดตัวปรับแสง WGSL ดูตัวอย่างต่อไปนี้และการแต้มสี:1497
if (!navigator.gpu.wgslLanguageFeatures.has("packed_4x8_integer_dot_product")) {
throw new Error(`DP4a built-in functions are not available`);
}
const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();
const shaderModule = device.createShaderModule({ code: `
requires packed_4x8_integer_dot_product;
fn main() {
const result: u32 = dot4U8Packed(0x01020304u, 0x02040405u); // 42
}`,
});
ขอขอบคุณเป็นพิเศษจากทีมเว็บกราฟิกของ Intel ในเซี่ยงไฮ้ที่ช่วยขับเคลื่อนข้อกำหนดและการติดตั้งใช้งานนี้จนเสร็จ
พารามิเตอร์ตัวชี้แบบไม่จำกัดใน WGSL
ส่วนขยายภาษา WGSL ของ "unrestricted_pointer_parameters"
จะลดข้อจำกัดในการส่งผ่านไปยังฟังก์ชัน WGSL ดังนี้
ตัวชี้พารามิเตอร์ของช่องว่างที่อยู่
storage
,uniform
และworkgroup
ไปยังฟังก์ชันที่ผู้ใช้ประกาศการส่งต่อตัวชี้เพื่อจัดโครงสร้างสมาชิกและองค์ประกอบอาร์เรย์ไปยังฟังก์ชันที่ผู้ใช้ประกาศ
ดูข้อมูลเพิ่มเติมได้ที่ตัวชี้เป็นพารามิเตอร์ฟังก์ชัน | ทัวร์ชม WGSL
ฟีเจอร์นี้ตรวจจับได้โดยใช้ navigator.gpu.wgslLanguageFeatures
ขอแนะนำให้ใช้คำสั่งที่จำเป็นเสมอเพื่อส่งสัญญาณความเป็นไปได้ที่จะดำเนินการไม่ได้ด้วย requires unrestricted_pointer_parameters;
ที่ด้านบนของโค้ดตัวปรับแสง WGSL ดูตัวอย่างต่อไปนี้ การเปลี่ยนแปลงข้อมูลจำเพาะของ WGSL และ issue tint:2053
if (!navigator.gpu.wgslLanguageFeatures.has("unrestricted_pointer_parameters")) {
throw new Error(`Unrestricted pointer parameters are not available`);
}
const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();
const shaderModule = device.createShaderModule({ code: `
requires unrestricted_pointer_parameters;
@group(0) @binding(0) var<storage, read_write> S : i32;
fn func(pointer : ptr<storage, i32, read_write>) {
*pointer = 42;
}
@compute @workgroup_size(1)
fn main() {
func(&S);
}`
});
น้ำตาลไวยากรณ์สำหรับการยกเลิกการอ้างอิงคอมโพสิตใน WGSL
เมื่อมีส่วนขยายภาษา WGSL ของ "pointer_composite_access"
แสดงอยู่ใน navigator.gpu.wgslLanguageFeatures
รหัสตัวปรับแสงเงา WGSL จะรองรับการเข้าถึงองค์ประกอบของประเภทข้อมูลที่ซับซ้อนโดยใช้ไวยากรณ์ของจุด (.
) เดียวกัน ไม่ว่าคุณจะทำงานกับข้อมูลโดยตรงหรือชี้ไปที่ข้อมูลนั้นก็ตาม วิธีการมีดังนี้
หาก
foo
เป็นตัวชี้ แสดงว่าfoo.bar
เป็นวิธีที่สะดวกกว่าในการเขียน(*foo).bar
โดยปกติ คุณต้องใช้เครื่องหมายดอกจัน (*
) เพื่อเปลี่ยนตัวชี้ให้เป็น "การอ้างอิง" ซึ่งสามารถยกเลิกการอ้างอิงได้ แต่ตอนนี้ทั้งตัวชี้และการอ้างอิงมีความคล้ายคลึงกันมากขึ้นและแทบจะใช้แทนกันได้หาก
foo
ไม่ใช่ตัวชี้: โอเปอเรเตอร์จุด (.
) จะทำงานเหมือนกับที่ใช้ในการเข้าถึงสมาชิกโดยตรง
ในทำนองเดียวกัน ถ้า pa
เป็นตัวชี้ที่จัดเก็บที่อยู่เริ่มต้นของอาร์เรย์ การใช้ pa[i]
จะช่วยให้คุณสามารถเข้าถึงตำแหน่งหน่วยความจำได้โดยตรง ซึ่งจะจัดเก็บองค์ประกอบที่ 'i
ของอาร์เรย์นั้น
ขอแนะนำให้ใช้ requires-directive เพื่อส่งสัญญาณความเป็นไปได้ที่จะดำเนินการไม่ได้ด้วย requires pointer_composite_access;
ที่ด้านบนของโค้ดตัวปรับแสง WGSL ดูตัวอย่างต่อไปนี้และสีแต้มของปัญหา:2113
if (!navigator.gpu.wgslLanguageFeatures.has("pointer_composite_access")) {
throw new Error(`Pointer composite access is not available`);
}
const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();
const shaderModule = device.createShaderModule({ code: `
requires pointer_composite_access;
fn main() {
var a = vec3f();
let p : ptr<function, vec3f> = &a;
let r1 = (*p).x; // always valid.
let r2 = p.x; // requires pointer composite access.
}`
});
สถานะแยกต่างหากสำหรับอ่านอย่างเดียวสำหรับมุมมองที่เป็นลายฉลุและความลึก
ก่อนหน้านี้ ไฟล์แนบประเภทความลึกแบบอ่านอย่างเดียวในหน้าจอแสดงผลจะต้องใช้ทั้ง 2 ด้าน (ความลึกและลายฉลุ) แบบอ่านอย่างเดียว จึงได้ยกเลิกข้อจำกัดนี้แล้ว แต่ตอนนี้ คุณสามารถใช้มุมมองความลึกในแบบอ่านอย่างเดียว เช่น การติดตามเงาสัมผัส และจะเขียนบัฟเฟอร์ลายฉลุเพื่อระบุพิกเซลสำหรับการประมวลผลต่อไป ดูรุ่งอรุณปัญหา:2146
ข้อมูลอัปเดตเกี่ยวกับ Dawn
ตอนนี้ระบบจะเรียกใช้โค้ดเรียกกลับของข้อผิดพลาดที่ไม่ได้บันทึกที่ตั้งค่าด้วย wgpuDeviceSetUncapturedErrorCallback()
ทันทีเมื่อเกิดข้อผิดพลาด ซึ่งเป็นสิ่งที่นักพัฒนาซอฟต์แวร์คาดหวังและต้องการแก้ไขข้อบกพร่องอยู่เสมอ ดู change dawn:173620
ใช้งานเมธอด wgpuSurfaceGetPreferredFormat()
จาก webgpu.h API แล้ว ดูปัญหารุ่งเช้า:1362
ทั้งหมดนี้พูดถึงไฮไลต์สำคัญเพียงบางส่วน ดูรายการสัญญาผูกมัดอย่างละเอียด
มีอะไรใหม่ใน WebGPU
รายการของทุกอย่างที่มีการพูดถึงในซีรีส์มีอะไรใหม่ใน WebGPU
Chrome 125
Chrome 124
- พื้นผิวพื้นที่เก็บข้อมูลแบบอ่านอย่างเดียวและอ่านอย่างเดียว
- การสนับสนุน Service Worker และตัวช่วยแบบแชร์
- แอตทริบิวต์ข้อมูลอะแดปเตอร์ใหม่
- แก้ไขข้อบกพร่อง
- ข้อมูลอัปเดตยามเช้า
Chrome 123
- การรองรับฟังก์ชันในตัวของ DP4a ใน WGSL
- พารามิเตอร์ตัวชี้แบบไม่จำกัดใน WGSL
- น้ำตาลไวยากรณ์สำหรับการยกเลิกการอ้างอิงคอมโพสิตใน WGSL
- สถานะแบบอ่านอย่างเดียวสำหรับมุมมองที่เป็นลายฉลุและความลึก
- ข้อมูลอัปเดตยามเช้า
Chrome 122
- ขยายการเข้าถึงด้วยโหมดความเข้ากันได้ (ฟีเจอร์อยู่ระหว่างการพัฒนา)
- เพิ่มขีดจํากัด maxVertexAttributes
- ข้อมูลอัปเดตยามเช้า
Chrome 121
- รองรับ WebGPU ใน Android
- ใช้ DXC แทน FXC สำหรับการคอมไพล์ตัวปรับแสงเงาใน Windows
- การค้นหาการประทับเวลาในการประมวลผลและแสดงผลบัตร
- จุดแรกเข้าเริ่มต้นไปยังโมดูลตัวปรับแสงเงา
- รองรับ display-p3 เป็นพื้นที่สี GPUExternalTexture
- ข้อมูลฮีพของหน่วยความจำ
- ข้อมูลอัปเดตยามเช้า
Chrome 120
- รองรับค่าจุดลอยตัว 16 บิตใน WGSL
- ก้าวข้ามขีดจำกัด
- การเปลี่ยนแปลงสถานะของฉลุลายความลึก
- การอัปเดตข้อมูลอะแดปเตอร์
- การวัดปริมาณของการค้นหาการประทับเวลา
- ฟีเจอร์ทำความสะอาดฤดูใบไม้ผลิ
Chrome 119
- พื้นผิวแบบลอยแบบ 32 บิตที่กรองได้
- รูปแบบ Verm10-10-10-2
- รูปแบบพื้นผิวของ rgb10a2uint
- ข้อมูลอัปเดตยามเช้า
Chrome 118
- การรองรับ HTMLImageElement และ ImageData ใน
copyExternalImageToTexture()
- การสนับสนุนแบบทดลองสำหรับพื้นผิวพื้นที่เก็บข้อมูลแบบอ่านอย่างเดียวและอ่านอย่างเดียว
- ข้อมูลอัปเดตยามเช้า
Chrome 117
- ยกเลิกการตั้งค่าบัฟเฟอร์เวอร์เท็กซ์
- ยกเลิกการตั้งค่ากลุ่มการเชื่อมโยง
- ปิดเสียงข้อผิดพลาดจากการสร้างไปป์ไลน์แบบไม่พร้อมกันเมื่ออุปกรณ์สูญหาย
- การอัปเดตการสร้างโมดูลตัวปรับแสงเงา SPIR-V
- การปรับปรุงประสบการณ์ของนักพัฒนาซอฟต์แวร์
- การแคชไปป์ไลน์ด้วยเลย์เอาต์ที่สร้างขึ้นโดยอัตโนมัติ
- ข้อมูลอัปเดตยามเช้า
Chrome 116
- การผสานรวม WebCodecs
- อุปกรณ์ที่สูญหายได้รับคืนโดย GPUAdapter
requestDevice()
- เล่นวิดีโอได้ลื่นไหลแม้เรียกใช้
importExternalTexture()
- ความสอดคล้องของข้อกำหนด
- การปรับปรุงประสบการณ์ของนักพัฒนาซอฟต์แวร์
- ข้อมูลอัปเดตยามเช้า
Chrome 115
- ส่วนขยายภาษา WGSL ที่รองรับ
- การสนับสนุนแบบทดลองสำหรับ Direct3D 11
- รับ GPU แบบแยกกันโดยค่าเริ่มต้นเมื่อใช้ไฟ AC
- การปรับปรุงประสบการณ์ของนักพัฒนาซอฟต์แวร์
- ข้อมูลอัปเดตยามเช้า
Chrome 114
- เพิ่มประสิทธิภาพ JavaScript
- getCurrentTexture() ใน Canvas ที่ไม่ได้กำหนดค่าแสดงข้อผิดพลาด invalidStateError
- ข้อมูลอัปเดตเกี่ยวกับ WGSL
- ข้อมูลอัปเดตยามเช้า