การรองรับฟังก์ชันบิวท์อิน DP4a ใน WGSL
DP4a (Dot Product of 4 Elements and Accumulate) หมายถึงชุดคำสั่ง GPU ที่ใช้กันโดยทั่วไปในการอนุมานการเรียนรู้เชิงลึกสำหรับการหาปริมาณ โดยจะดำเนินการ Dot Product ของจำนวนเต็ม 8 บิตอย่างมีประสิทธิภาพเพื่อเร่งการคำนวณโมเดลที่หาปริมาณ int8 ดังกล่าว ซึ่งช่วยประหยัดหน่วยความจำและแบนด์วิดท์เครือข่ายได้ (สูงสุด 75%) และปรับปรุงประสิทธิภาพของโมเดลแมชชีนเลิร์นนิงในการอนุมานเมื่อเทียบกับเวอร์ชัน f32 ด้วยเหตุนี้ ปัจจุบันจึงมีการใช้งานอย่างแพร่หลายในเฟรมเวิร์ก AI ยอดนิยมมากมาย
เมื่อส่วนขยายภาษา WGSL "packed_4x8_integer_dot_product" language extension อยู่ใน navigator.gpu.wgslLanguageFeatures ตอนนี้คุณสามารถใช้สเกลาร์จำนวนเต็ม 32 บิตเพื่อแพ็กเวกเตอร์ 4 องค์ประกอบของจำนวนเต็ม 8 บิตเป็นอินพุตสำหรับคำสั่ง Dot Product ในโค้ด Shader WGSL ด้วยฟังก์ชันบิวท์อิน dot4U8Packed และ dot4I8Packed นอกจากนี้ คุณยังใช้คำสั่งการแพ็กและการแกะแพ็กกับเวกเตอร์ 4 องค์ประกอบที่แพ็กแล้วของจำนวนเต็ม 8 บิตด้วย pack4xI8, pack4xU8, pack4xI8Clamp, pack4xU8Clamp, unpack4xI8, และ unpack4xU8 ฟังก์ชันบิวท์อิน WGSL ได้ด้วย
เราขอแนะนำให้ใช้ requires-directive เพื่อส่งสัญญาณถึงความเป็นไปได้ที่จะเกิดการไม่สามารถใช้งานร่วมกันได้ด้วย requires packed_4x8_integer_dot_product; ที่ด้านบนของโค้ด Shader WGSL ดูตัวอย่างต่อไปนี้และ ปัญหา tint: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ไปยังฟังก์ชันที่ผู้ใช้ประกาศการส่งตัวชี้ไปยังสมาชิกโครงสร้างและองค์ประกอบอาร์เรย์ไปยังฟังก์ชันที่ผู้ใช้ประกาศ
ดูข้อมูลเพิ่มเติมได้ที่ Pointers As Function Parameters | Tour of WGSL
คุณตรวจหาฟีเจอร์นี้ได้โดยใช้ navigator.gpu.wgslLanguageFeatures เราขอแนะนำให้ใช้ requires-directive เสมอเพื่อส่งสัญญาณถึงความเป็นไปได้ที่จะเกิดการไม่สามารถใช้งานร่วมกันได้ด้วย requires unrestricted_pointer_parameters; ที่ด้านบนของโค้ด Shader WGSL ดูตัวอย่างต่อไปนี้ การเปลี่ยนแปลงข้อกำหนด WGSL และ ปัญหา 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);
}`
});
Syntax Sugar สำหรับการอ้างอิงแบบคอมโพสิตใน WGSL
เมื่อส่วนขยายภาษา WGSL "pointer_composite_access" อยู่ใน navigator.gpu.wgslLanguageFeatures ตอนนี้โค้ด Shader WGSL รองรับการเข้าถึงคอมโพเนนต์ของประเภทข้อมูลที่ซับซ้อนโดยใช้ไวยากรณ์จุด (.) เดียวกัน ไม่ว่าคุณจะทำงานกับข้อมูลโดยตรงหรือใช้ Pointer ไปยังข้อมูลนั้น วิธีการมีดังนี้
หาก
fooเป็น Pointerfoo.barจะเป็นวิธีที่สะดวกกว่าในการเขียน(*foo).barโดยปกติแล้วจะต้องใช้ดอกจัน (*) เพื่อเปลี่ยน Pointer ให้เป็น "การอ้างอิง" ที่สามารถอ้างอิงได้ แต่ตอนนี้ทั้ง Pointer และการอ้างอิงมีความคล้ายคลึงกันมากขึ้นและสามารถใช้แทนกันได้เกือบทั้งหมดหาก
fooไม่ใช่ Pointer โอเปอเรเตอร์จุด (.) จะทำงานเหมือนกับที่คุณคุ้นเคยสำหรับการเข้าถึงสมาชิกโดยตรง
ในทำนองเดียวกัน หาก pa เป็นตัวชี้ที่จัดเก็บที่อยู่เริ่มต้นของอาร์เรย์ การใช้ pa[i] จะช่วยให้คุณเข้าถึงตำแหน่งหน่วยความจำที่จัดเก็บองค์ประกอบที่ 'i'th ของอาร์เรย์นั้นได้โดยตรง
เราขอแนะนำให้ใช้ requires-directive เพื่อส่งสัญญาณถึงความเป็นไปได้ที่จะเกิดการไม่สามารถใช้งานร่วมกันได้ด้วย requires pointer_composite_access; ที่ด้านบนของโค้ด Shader WGSL ดูตัวอย่างต่อไปนี้และ ปัญหา tint: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
ข้อมูลอัปเดตเกี่ยวกับ Dawn
ตอนนี้ระบบจะเรียกใช้การเรียกกลับข้อผิดพลาดที่ไม่ได้ดักจับซึ่งตั้งค่าด้วย wgpuDeviceSetUncapturedErrorCallback() ทันทีเมื่อเกิดข้อผิดพลาด ซึ่งเป็นสิ่งที่นักพัฒนาแอปคาดหวังและต้องการอย่างสม่ำเสมอสำหรับการแก้ไขข้อบกพร่อง ดูการเปลี่ยนแปลง dawn:173620
เราได้นำเมธอด wgpuSurfaceGetPreferredFormat() จาก webgpu.h API มาใช้แล้ว ดู ปัญหา dawn:1362
ข้อมูลนี้ครอบคลุมเฉพาะไฮไลต์สำคัญบางส่วนเท่านั้น ดูรายการคอมมิตทั้งหมด
มีอะไรใหม่ใน WebGPU
รายการทุกอย่างที่กล่าวถึงในซีรีส์มีอะไรใหม่ใน WebGPU
Chrome 147-148
Chrome 146
- รองรับโหมดความเข้ากันได้ของ WebGPU ใน OpenGL ES 3.1
- สิ่งแนบชั่วคราว
- ส่วนขยาย texture_and_sampler_let ของ WGSL
- ข้อมูลอัปเดตเกี่ยวกับ Dawn
Chrome 145
- ส่วนขยาย subgroup_uniformity ของ WGSL
- การแมปบัฟเฟอร์แบบซิงโครนัสเวอร์ชันทดลองใน Worker
- ข้อมูลอัปเดตเกี่ยวกับ Dawn
Chrome 144
- ส่วนขยาย subgroup_id ของ WGSL
- ส่วนขยาย uniform_buffer_standard_layout ของ WGSL
- WebGPU ใน Linux
- writeBuffer และ writeTexture เร็วขึ้น
- ข้อมูลอัปเดตเกี่ยวกับ Dawn
Chrome 143
- การสลับคอมโพเนนต์พื้นผิว
- นำการใช้งานพื้นที่เก็บข้อมูลพื้นผิวแบบอ่านอย่างเดียว bgra8unorm ออก
- ข้อมูลอัปเดตเกี่ยวกับ Dawn
Chrome 142
Chrome 141
- Tint IR เสร็จสมบูรณ์แล้ว
- การวิเคราะห์ช่วงจำนวนเต็มในคอมไพเลอร์ WGSL
- การอัปเดต SPIR-V 1.4 สำหรับแบ็กเอนด์ Vulkan
- ข้อมูลอัปเดตเกี่ยวกับ Dawn
Chrome 140
- คำขออุปกรณ์ใช้ตัวดัดแปลง
- คำย่อสำหรับการใช้พื้นผิวในที่ที่ใช้มุมมองพื้นผิว
- textureSampleLevel ของ WGSL รองรับพื้นผิว 1 มิติ
- เลิกใช้งานการใช้งานพื้นที่เก็บข้อมูลพื้นผิวแบบอ่านอย่างเดียว bgra8unorm
- นำแอตทริบิวต์ isFallbackAdapter ของ GPUAdapter ออก
- ข้อมูลอัปเดตเกี่ยวกับ Dawn
Chrome 139
- การรองรับพื้นผิว 3 มิติสำหรับรูปแบบที่บีบอัด BC และ ASTC
- ฟีเจอร์ใหม่ "core-features-and-limits"
- ช่วงทดลองใช้จากต้นทางสำหรับโหมดความเข้ากันได้ของ WebGPU
- ข้อมูลอัปเดตเกี่ยวกับ Dawn
Chrome 138
- คำย่อสำหรับการใช้บัฟเฟอร์เป็นทรัพยากรการผูก
- การเปลี่ยนแปลงข้อกำหนดด้านขนาดสำหรับบัฟเฟอร์ที่แมปเมื่อสร้าง
- รายงานสถาปัตยกรรมสำหรับ GPU ล่าสุด
- เลิกใช้งานแอตทริบิวต์ isFallbackAdapter ของ GPUAdapter
- ข้อมูลอัปเดตเกี่ยวกับ Dawn
Chrome 137
- ใช้มุมมองพื้นผิวสำหรับการผูก externalTexture
- บัฟเฟอร์คัดลอกโดยไม่ต้องระบุออฟเซ็ตและขนาด
- workgroupUniformLoad ของ WGSL โดยใช้ตัวชี้ไปยังอะตอม
- แอตทริบิวต์ powerPreference ของ GPUAdapterInfo
- นำแอตทริบิวต์ compatibilityMode ของ GPURequestAdapterOptions ออก
- ข้อมูลอัปเดตเกี่ยวกับ Dawn
Chrome 136
- แอตทริบิวต์ isFallbackAdapter ของ GPUAdapterInfo
- การปรับปรุงเวลาในการคอมไพล์ Shader ใน D3D12
- บันทึกและคัดลอกรูปภาพ Canvas
- ยกเลิกข้อจำกัดโหมดความเข้ากันได้
- ข้อมูลอัปเดตเกี่ยวกับ Dawn
Chrome 135
- อนุญาตให้สร้างเลย์เอาต์ไปป์ไลน์ด้วยเลย์เอาต์กลุ่มการผูกเป็น Null
- อนุญาตให้ Viewport ขยายออกไปนอกขอบเขตของเป้าหมายการแสดงผล
- เข้าถึงโหมดความเข้ากันได้เวอร์ชันทดลองใน Android ได้ง่ายขึ้น
- นำขีดจำกัด maxInterStageShaderComponents ออก
- ข้อมูลอัปเดตเกี่ยวกับ Dawn
Chrome 134
- ปรับปรุงปริมาณงานแมชชีนเลิร์นนิงด้วยกลุ่มย่อย
- นำการรองรับประเภทพื้นผิวที่กรองได้แบบลอยตัวออกเนื่องจากสามารถผสมได้
- ข้อมูลอัปเดตเกี่ยวกับ Dawn
Chrome 133
- รูปแบบจุดยอด unorm8x4-bgra และ 1 คอมโพเนนต์เพิ่มเติม
- อนุญาตให้ขอขีดจำกัดที่ไม่รู้จักด้วยค่าที่ไม่ได้กำหนด
- การเปลี่ยนแปลงกฎการจัดแนวของ WGSL
- การปรับปรุงประสิทธิภาพของ WGSL ด้วยการทิ้ง
- ใช้ displaySize ของ VideoFrame สำหรับพื้นผิวภายนอก
- จัดการรูปภาพที่มีการวางแนวที่ไม่ใช่ค่าเริ่มต้นโดยใช้ copyExternalImageToTexture
- การปรับปรุงประสบการณ์ของนักพัฒนาแอป
- เปิดใช้โหมดความเข้ากันได้ด้วย featureLevel
- การล้างฟีเจอร์กลุ่มย่อยเวอร์ชันทดลอง
- เลิกใช้งานขีดจำกัด maxInterStageShaderComponents
- ข้อมูลอัปเดตเกี่ยวกับ Dawn
Chrome 132
- การใช้งานมุมมองพื้นผิว
- การผสมพื้นผิวแบบลอยตัว 32 บิต
- แอตทริบิวต์ adapterInfo ของ GPUDevice
- การกำหนดค่าบริบท Canvas ด้วยรูปแบบที่ไม่ถูกต้องจะทำให้เกิดข้อผิดพลาด JavaScript
- ข้อจำกัดของตัวกรองตัวอย่างในพื้นผิว
- การทดลองใช้กลุ่มย่อยแบบขยาย
- การปรับปรุงประสบการณ์ของนักพัฒนาแอป
- การรองรับรูปแบบพื้นผิวแบบปกติ 16 บิตเวอร์ชันทดลอง
- ข้อมูลอัปเดตเกี่ยวกับ Dawn
Chrome 131
- ระยะทางคลิปใน WGSL
- getConfiguration() ของ GPUCanvasContext
- ดั้งเดิมที่เป็นจุดและเส้นต้องไม่มีการเบี่ยงเบนความลึก
- ฟังก์ชันบิวท์อินการสแกนแบบรวมสำหรับกลุ่มย่อย
- การรองรับ multi-draw indirect เวอร์ชันทดลอง
- ตัวเลือกการคอมไพล์โมดูล Shader แบบเข้มงวด
- นำ requestAdapterInfo() ของ GPUAdapter ออก
- ข้อมูลอัปเดตเกี่ยวกับ Dawn
Chrome 130
- การผสมแหล่งที่มาคู่
- การปรับปรุงเวลาในการคอมไพล์ Shader ใน Metal
- การเลิกใช้งาน requestAdapterInfo() ของ GPUAdapter
- ข้อมูลอัปเดตเกี่ยวกับ Dawn
Chrome 129
Chrome 128
- การทดลองใช้กลุ่มย่อย
- เลิกใช้งานการตั้งค่าการเบี่ยงเบนความลึกสำหรับเส้นและจุด
- ซ่อนคำเตือนข้อผิดพลาดที่ไม่ได้ดักจับในเครื่องมือสำหรับนักพัฒนาเว็บหาก preventDefault
- การสุ่มตัวอย่างการประมาณค่าของ WGSL ก่อนและอย่างใดอย่างหนึ่ง
- ข้อมูลอัปเดตเกี่ยวกับ Dawn
Chrome 127
- การรองรับ OpenGL ES ใน Android เวอร์ชันทดลอง
- แอตทริบิวต์ info ของ GPUAdapter
- การปรับปรุงการทำงานร่วมกันของ WebAssembly
- ข้อผิดพลาดของตัวเข้ารหัสคำสั่งที่ปรับปรุงแล้ว
- ข้อมูลอัปเดตเกี่ยวกับ Dawn
Chrome 126
- เพิ่มขีดจำกัด maxTextureArrayLayers
- การเพิ่มประสิทธิภาพการอัปโหลดบัฟเฟอร์สำหรับแบ็กเอนด์ Vulkan
- การปรับปรุงเวลาในการคอมไพล์ Shader
- บัฟเฟอร์คำสั่งที่ส่งต้องไม่ซ้ำกัน
- ข้อมูลอัปเดตเกี่ยวกับ Dawn
Chrome 125
Chrome 124
- พื้นที่เก็บข้อมูลพื้นผิวแบบอ่านอย่างเดียวและอ่าน-เขียน
- การรองรับ Service Worker และ Shared Worker
- แอตทริบิวต์ข้อมูลตัวดัดแปลงใหม่
- การแก้ไขข้อบกพร่อง
- ข้อมูลอัปเดตเกี่ยวกับ Dawn
Chrome 123
- การรองรับฟังก์ชันบิวท์อิน DP4a ใน WGSL
- พารามิเตอร์ตัวชี้ที่ไม่จำกัดใน WGSL
- Syntax Sugar สำหรับการอ้างอิงแบบคอมโพสิตใน WGSL
- สถานะอ่านอย่างเดียวแยกกันสำหรับด้านข้างของสเตนซิลและความลึก
- ข้อมูลอัปเดตเกี่ยวกับ Dawn
Chrome 122
- ขยายการเข้าถึงด้วยโหมดความเข้ากันได้ (ฟีเจอร์อยู่ระหว่างการพัฒนา)
- เพิ่มขีดจำกัด maxVertexAttributes
- ข้อมูลอัปเดตเกี่ยวกับ Dawn
Chrome 121
- รองรับ WebGPU ใน Android
- ใช้ DXC แทน FXC สำหรับการคอมไพล์ Shader ใน Windows
- การค้นหาการประทับเวลาใน Compute Pass และ Render Pass
- จุดเริ่มต้นเริ่มต้นสำหรับโมดูล Shader
- รองรับ display-p3 เป็นพื้นที่สี GPUExternalTexture
- ข้อมูลฮีปหน่วยความจำ
- ข้อมูลอัปเดตเกี่ยวกับ Dawn
Chrome 120
- การรองรับค่าจุดลอยตัว 16 บิตใน WGSL
- ก้าวข้ามขีดจำกัด
- การเปลี่ยนแปลงสถานะความลึก-สเตนซิล
- ข้อมูลอัปเดตเกี่ยวกับตัวดัดแปลง
- การหาปริมาณการค้นหาการประทับเวลา
- ฟีเจอร์การล้างข้อมูล
Chrome 119
- พื้นผิวแบบลอยตัว 32 บิตที่กรองได้
- รูปแบบจุดยอด unorm10-10-10-2
- รูปแบบพื้นผิว rgb10a2uint
- ข้อมูลอัปเดตเกี่ยวกับ Dawn
Chrome 118
- การรองรับ HTMLImageElement และ ImageData ใน
copyExternalImageToTexture() - การรองรับพื้นที่เก็บข้อมูลพื้นผิวแบบอ่าน-เขียนและอ่านอย่างเดียวเวอร์ชันทดลอง
- ข้อมูลอัปเดตเกี่ยวกับ Dawn
Chrome 117
- ยกเลิกการตั้งค่าบัฟเฟอร์จุดยอด
- ยกเลิกการตั้งค่ากลุ่มการผูก
- ปิดเสียงข้อผิดพลาดจากการสร้างไปป์ไลน์แบบไม่พร้อมกันเมื่ออุปกรณ์สูญหาย
- การอัปเดตการสร้างโมดูล Shader SPIR-V
- การปรับปรุงประสบการณ์ของนักพัฒนาแอป
- การแคชไปป์ไลน์ด้วยเลย์เอาต์ที่สร้างขึ้นโดยอัตโนมัติ
- ข้อมูลอัปเดตเกี่ยวกับ Dawn
Chrome 116
- การผสานรวม WebCodecs
- อุปกรณ์ที่สูญหายซึ่ง GPUAdapter
requestDevice()ส่งคืน - ทำให้การเล่นวิดีโอราบรื่นหากมีการเรียกใช้
importExternalTexture() - การปฏิบัติตามข้อกำหนด
- การปรับปรุงประสบการณ์ของนักพัฒนาแอป
- ข้อมูลอัปเดตเกี่ยวกับ Dawn
Chrome 115
- ส่วนขยายภาษา WGSL ที่รองรับ
- การรองรับ Direct3D 11 เวอร์ชันทดลอง
- รับ GPU แบบแยกโดยค่าเริ่มต้นเมื่อใช้ไฟ AC
- การปรับปรุงประสบการณ์ของนักพัฒนาแอป
- ข้อมูลอัปเดตเกี่ยวกับ Dawn
Chrome 114
- เพิ่มประสิทธิภาพ JavaScript
- getCurrentTexture() ใน Canvas ที่ไม่ได้กำหนดค่าจะแสดง InvalidStateError
- ข้อมูลอัปเดตเกี่ยวกับ WGSL
- ข้อมูลอัปเดตเกี่ยวกับ Dawn