รองรับฟังก์ชัน DP4a ในตัว WGSL
DP4a (Dot Product of 4 Elements and Accumulate) หมายถึงชุดคำสั่งของ GPU ที่ใช้กันโดยทั่วไปในการอนุมานการเรียนรู้เชิงลึกสำหรับการวัดปริมาณ ซึ่งจะสร้างผลิตภัณฑ์จุดจำนวนเต็ม 8 บิตเพื่อเร่งการคำนวณโมเดลที่แบ่งเป็นเชิงตัวเลขจำนวน 8 บิตดังกล่าว โซลูชันนี้ช่วยประหยัดหน่วยความจำและแบนด์วิดท์เครือข่ายได้ (สูงสุด 75%) รวมทั้งปรับปรุงประสิทธิภาพของโมเดลแมชชีนเลิร์นนิงในด้านต่างๆ เมื่อเทียบกับเวอร์ชัน f32 ด้วยเหตุนี้ ระบบจึงใช้ AI อย่างแพร่หลายในเฟรมเวิร์ก AI ยอดนิยมหลายรายการในขณะนี้
เมื่อมีส่วนขยายภาษา WGSL ของ "packed_4x8_integer_dot_product"
ใน navigator.gpu.wgslLanguageFeatures
ตอนนี้คุณสามารถใช้สเกลาร์จำนวนเต็ม 32 บิตที่บรรจุเวกเตอร์ 4 คอมโพเนนต์ของจำนวนเต็ม 8 บิตเป็นอินพุตสำหรับคำแนะนำผลิตภัณฑ์แบบจุดในโค้ดเครื่องมือเฉดสี WGSL ที่มีฟังก์ชัน dot4U8Packed
และ dot4I8Packed
ในตัว นอกจากนี้ คุณยังใช้วิธีการบรรจุและคลายการแพคข้อมูลพร้อมเวกเตอร์คอมโพเนนต์ที่บรรจุมาในตัวของจำนวนเต็ม 8 บิตที่มี pack4xI8
, pack4xU8
, pack4xI8Clamp
, pack4xU8Clamp
, unpack4xI8
และ unpack4xU8
ฟังก์ชัน WGSL ในตัวได้อีกด้วย
ขอแนะนำให้ใช้ requires-directive เพื่อบ่งบอกโอกาสในการถ่ายโอนไม่ได้ด้วย requires packed_4x8_integer_dot_product;
ที่ด้านบนของโค้ด Shader ของ 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
}`,
});
ขอขอบคุณเป็นพิเศษ ขอขอบคุณทีม Web Graphics ของ Intel ในเซี่ยงไฮ้ที่ผลักดันข้อกำหนดและการติดตั้งนี้ให้เสร็จสมบูรณ์
พารามิเตอร์ตัวชี้แบบไม่จำกัดใน WGSL
ส่วนขยายภาษา WGSL "unrestricted_pointer_parameters"
จะลดข้อจำกัดเกี่ยวกับตัวชี้ที่สามารถส่งไปยังฟังก์ชัน WGSL ดังนี้
ตัวชี้พารามิเตอร์ของ
storage
,uniform
และworkgroup
ซึ่งเป็นพื้นที่ที่อยู่ไปยังฟังก์ชันที่ผู้ใช้ประกาศการส่งต่อตัวชี้ไปยังโครงสร้างสมาชิกและอาร์เรย์องค์ประกอบไปยังฟังก์ชันที่ผู้ใช้ประกาศ
ดูตัวชี้เป็นพารามิเตอร์ของฟังก์ชัน | ทัวร์ชม WGSL เพื่อดูข้อมูลเพิ่มเติม
คุณตรวจหาฟีเจอร์ได้โดยใช้ navigator.gpu.wgslLanguageFeatures
เราขอแนะนำให้ใช้ requires-directive เสมอเพื่อบ่งบอกโอกาสที่จะไม่สามารถถ่ายโอนได้ โดยใช้ requires unrestricted_pointer_parameters;
ที่ด้านบนของโค้ด Shader ของ WGSL โปรดดูตัวอย่างต่อไปนี้ การเปลี่ยนแปลงข้อมูลจำเพาะของ WGSL และปัญหาการแต้มสี: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
เมื่อมีส่วนขยายภาษา "pointer_composite_access"
WGSL ใน navigator.gpu.wgslLanguageFeatures
โค้ดเฉดสี WGSL จะรองรับการเข้าถึงคอมโพเนนต์ของประเภทข้อมูลที่ซับซ้อนโดยใช้ไวยากรณ์จุด (.
) เดียวกัน ไม่ว่าคุณจะทำงานกับข้อมูลโดยตรงหรือใช้ตัวชี้ไปยังข้อมูลดังกล่าว วิธีการมีดังนี้
หาก
foo
เป็นตัวชี้:foo.bar
เป็นวิธีการเขียน(*foo).bar
ที่สะดวกกว่า โดยปกติจะต้องใช้เครื่องหมายดอกจัน (*
) ในการเปลี่ยนตัวชี้เป็น "การอ้างอิง" ที่เปลี่ยนการอ้างอิงได้ แต่ปัจจุบันทั้งตัวชี้และการอ้างอิงมีความคล้ายคลึงกันมากขึ้นและแทบจะสับเปลี่ยนกันได้หาก
foo
ไม่ใช่ตัวชี้: โอเปอเรเตอร์จุด (.
) จะทำงานเหมือนกับที่คุณคุ้นเคยสำหรับการเข้าถึงสมาชิกโดยตรง
ในทำนองเดียวกัน ถ้า pa
เป็นตัวชี้ที่จัดเก็บที่อยู่เริ่มต้นของอาร์เรย์ การใช้ pa[i]
จะช่วยให้คุณสามารถเข้าถึงตำแหน่งหน่วยความจำซึ่งเป็นที่เก็บองค์ประกอบ 'i
ของอาร์เรย์นั้นได้โดยตรง
ขอแนะนำให้ใช้ requires-directive เพื่อบ่งบอกโอกาสในการถ่ายโอนไม่ได้ด้วย requires pointer_composite_access;
ที่ด้านบนของโค้ด Shader ของ 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.
}`
});
แยกสถานะอ่านอย่างเดียวสำหรับลายฉลุและความลึก
ก่อนหน้านี้ ไฟล์แนบที่มีลายฉลุแบบอ่านอย่างเดียวใน Render Pass จะต้องมีทั้ง 2 ด้าน (ความลึกและลายฉลุ) ต้องเป็นแบบอ่านอย่างเดียว ยกเลิกการจำกัดนี้แล้ว ตอนนี้คุณสามารถใช้ลักษณะความลึกในแบบอ่านอย่างเดียวสำหรับการติดตามเงาการสัมผัสแล้วได้ ในขณะที่บัฟเฟอร์ฉลุลายจะเขียนเพื่อระบุพิกเซลเพื่อประมวลผลต่อไป ดูปัญหา dawn:2146
ข้อมูลอัปเดตรุ่งเช้า
ตอนนี้ระบบจะเรียกใช้ Callback ของข้อผิดพลาดที่ไม่ได้บันทึกด้วย wgpuDeviceSetUncapturedErrorCallback()
ทันทีที่เกิดข้อผิดพลาด ซึ่งเป็นสิ่งที่นักพัฒนาแอปคาดหวังและต้องการแก้ไขข้อบกพร่องอย่างต่อเนื่อง ดูเปลี่ยน dawn:173620
ติดตั้งใช้งานเมธอด wgpuSurfaceGetPreferredFormat()
จาก webgpu.h API แล้ว ดูปัญหา dawn:1362
ซึ่งกล่าวถึงไฮไลต์สำคัญเพียงบางส่วนเท่านั้น ดูรายการคอมมิตทั้งหมด
มีอะไรใหม่ใน WebGPU
รายการทั้งหมดที่กล่าวถึงในซีรีส์ What's New in WebGPU
Chrome 128
- การทดสอบกับกลุ่มย่อย
- ลดการให้น้ำหนักพิเศษในการตั้งค่าสำหรับเส้นและจุด
- ซ่อนคำเตือนข้อผิดพลาดที่ไม่ได้บันทึกไว้สำหรับ DevTools หาก preventDefault
- การสุ่มตัวอย่างแบบสอดแทรกของ WGSL ก่อนหรือแบบใดแบบหนึ่ง
- ข้อมูลอัปเดตเมื่อรุ่งเช้า
Chrome 127
- การทดสอบการรองรับ OpenGL ES บน Android
- แอตทริบิวต์ข้อมูลของ GPU
- การปรับปรุงการทำงานร่วมกันของ WebAssembly
- ข้อผิดพลาดของโปรแกรมเปลี่ยนไฟล์คำสั่งที่ปรับปรุงใหม่
- ข้อมูลอัปเดตเมื่อรุ่งเช้า
Chrome 126
- เพิ่มขีดจำกัด maxTextureArraydataLayer
- การเพิ่มประสิทธิภาพการอัปโหลดบัฟเฟอร์สำหรับแบ็กเอนด์ Vulkan
- ปรับปรุงเวลาคอมไพล์ Shader
- บัฟเฟอร์คำสั่งที่ส่งต้องไม่ซ้ำกัน
- ข้อมูลอัปเดตเมื่อรุ่งเช้า
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 บิตที่กรองได้
- รูปแบบเวอร์เท็กซ์ unorm10-10-10-2
- รูปแบบพื้นผิวของrgb10a2uint
- ข้อมูลอัปเดตเมื่อรุ่งเช้า
Chrome 118
- การรองรับ HTMLImageElement และ ImageData ใน
copyExternalImageToTexture()
- เวอร์ชันทดลองสำหรับพื้นผิวพื้นที่เก็บข้อมูลแบบอ่านอย่างเดียวและอ่านอย่างเดียว
- ข้อมูลอัปเดตเมื่อรุ่งเช้า
Chrome 117
- ยกเลิกการตั้งค่าบัฟเฟอร์ Vertex
- ยกเลิกการตั้งค่ากลุ่มการเชื่อมโยง
- ปิดข้อผิดพลาดจากการสร้างไปป์ไลน์แบบไม่พร้อมกันเมื่ออุปกรณ์สูญหาย
- การอัปเดตการสร้างโมดูลตัวปรับแสงเงา SPIR-V
- การปรับปรุงประสบการณ์ของนักพัฒนาแอป
- ไปป์ไลน์การแคชที่มีเลย์เอาต์ที่สร้างขึ้นโดยอัตโนมัติ
- ข้อมูลอัปเดตเมื่อรุ่งเช้า
Chrome 116
- การผสานรวม WebCodecs
- อุปกรณ์ที่สูญหายส่งคืนโดย GPUAdapter
requestDevice()
- เล่นวิดีโอได้อย่างราบรื่นหากมีการเรียกใช้
importExternalTexture()
- ความสอดคล้องตามข้อกำหนด
- การปรับปรุงประสบการณ์ของนักพัฒนาแอป
- ข้อมูลอัปเดตเมื่อรุ่งเช้า
Chrome 115
- ส่วนขยายภาษา WGSL ที่รองรับ
- การสนับสนุนรุ่นทดลองสำหรับ Direct3D 11
- รับ GPU แบบแยกกันโดยค่าเริ่มต้นเมื่อใช้พลังงานจากไฟฟ้า AC
- การปรับปรุงประสบการณ์ของนักพัฒนาแอป
- ข้อมูลอัปเดตเมื่อรุ่งเช้า
Chrome 114
- เพิ่มประสิทธิภาพ JavaScript
- getCurrentTexture() ในผืนผ้าใบที่ไม่ได้กำหนดค่าไว้แสดงข้อผิดพลาดที่ไม่ถูกต้อง
- ข้อมูลอัปเดตเกี่ยวกับ WGSL
- ข้อมูลอัปเดตเมื่อรุ่งเช้า