การรองรับฟังก์ชันในตัวของ DP4a ใน WGSL
DP4a (Dot Product of 4 Elements and Accumulate) หมายถึงชุดคำสั่ง GPU ที่มักใช้ในการอนุมานด้วยการเรียนรู้เชิงลึกสำหรับการแปลงค่า โดยจะทําผลิตภัณฑ์จุดจำนวนเต็ม 8 บิตได้อย่างมีประสิทธิภาพเพื่อเร่งการประมวลผลโมเดลที่แปลงค่าเป็น int8 ซึ่งจะช่วยประหยัดหน่วยความจําและแบนด์วิดท์เครือข่าย (สูงสุด 75%) และปรับปรุงประสิทธิภาพของโมเดลแมชชีนเลิร์นนิงในการอนุมานได้เมื่อเทียบกับเวอร์ชัน f32 ด้วยเหตุนี้ ขณะนี้จึงมีการใช้กันอย่างแพร่หลายในเฟรมเวิร์ก AI ยอดนิยมหลายเฟรมเวิร์ก
เมื่อ"packed_4x8_integer_dot_product"
ส่วนขยายภาษา WGSL อยู่ใน navigator.gpu.wgslLanguageFeatures
แล้ว ตอนนี้คุณจะใช้สเกลาร์จำนวนเต็ม 32 บิตที่แพ็กเวกเตอร์ 4 องค์ประกอบของจำนวนเต็ม 8 บิตเป็นอินพุตสำหรับคำสั่งการคูณจุดในโค้ดเชดเดอร์ WGSL โดยใช้ฟังก์ชันในตัว dot4U8Packed
และ dot4I8Packed
ได้แล้ว นอกจากนี้ คุณยังใช้คำสั่งการแพ็กและการแกะแพ็กกับเวกเตอร์ 4 องค์ประกอบแบบแพ็กของจำนวนเต็ม 8 บิตด้วยฟังก์ชันในตัวของ WGSL อย่าง pack4xI8
, pack4xU8
, pack4xI8Clamp
, pack4xU8Clamp
, unpack4xI8
และ unpack4xU8
ได้ด้วย
เราขอแนะนำให้ใช้คําสั่ง requires เพื่อบ่งบอกถึงโอกาสที่โค้ดจะไม่สามารถพอร์ตได้โดยใช้ requires packed_4x8_integer_dot_product;
ที่ด้านบนของโค้ด Shader WGSL ดูตัวอย่างต่อไปนี้และ issue 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
}`,
});
ขอขอบคุณเป็นพิเศษสำหรับทีมกราฟิกเว็บของ Intel ในเซี่ยงไฮ้ที่ขับเคลื่อนข้อกำหนดและการใช้งานนี้จนเสร็จสมบูรณ์
พารามิเตอร์พอยน์เตอร์ที่ไม่มีข้อจำกัดใน WGSL
"unrestricted_pointer_parameters"
ส่วนขยายภาษา WGSL ลดความเข้มงวดในการส่งผ่านพอยน์เตอร์ไปยังฟังก์ชัน WGSL ดังนี้
ตัวชี้พารามิเตอร์ของ
storage
,uniform
และworkgroup
ซึ่งเป็นพื้นที่ที่อยู่ไปยังฟังก์ชันที่ผู้ใช้ประกาศการส่งตัวชี้ไปยังสมาชิกโครงสร้างและองค์ประกอบอาร์เรย์ไปยังฟังก์ชันที่ผู้ใช้ประกาศ
ดูข้อมูลเพิ่มเติมเกี่ยวกับหัวข้อนี้ได้ที่ Pointers As Function Parameters | Tour of WGSL
ฟีเจอร์นี้สามารถตรวจหาได้โดยใช้ navigator.gpu.wgslLanguageFeatures
เราขอแนะนำให้ใช้คําสั่ง requires เสมอเพื่อบ่งบอกถึงโอกาสที่โค้ดจะไม่สามารถพอร์ตได้โดยใช้ requires unrestricted_pointer_parameters;
ที่ด้านบนของโค้ด Shader 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
เมื่อมีส่วนขยายภาษา "pointer_composite_access"
WGSL ใน navigator.gpu.wgslLanguageFeatures
โค้ดเฉดสี WGSL จะรองรับการเข้าถึงคอมโพเนนต์ของประเภทข้อมูลที่ซับซ้อนโดยใช้ไวยากรณ์จุด (.
) เดียวกัน ไม่ว่าคุณจะทำงานกับข้อมูลโดยตรงหรือใช้ตัวชี้ไปยังข้อมูลดังกล่าว วิธีการมีดังนี้
หาก
foo
เป็นตัวชี้:foo.bar
เป็นวิธีการเขียน(*foo).bar
ที่สะดวกกว่า โดยปกติแล้วจะต้องใส่เครื่องหมายดอกจัน (*
) เพื่อเปลี่ยนเคอร์เซอร์ให้เป็น "การอ้างอิง" ที่สามารถยกเลิกการอ้างอิงได้ แต่ตอนนี้ทั้งเคอร์เซอร์และการอ้างอิงมีความคล้ายคลึงกันมากขึ้นและเกือบจะใช้แทนกันได้หาก
foo
ไม่ใช่พอยน์เตอร์: อ็อปเรเตอร์จุด (.
) จะทํางานเหมือนกับที่คุณเคยใช้เพื่อเข้าถึงสมาชิกโดยตรง
ในทำนองเดียวกัน หาก pa
เป็นพอยน์เตอร์ที่จัดเก็บที่อยู่เริ่มต้นของอาร์เรย์ การใช้ pa[i]
จะช่วยให้คุณเข้าถึงตำแหน่งหน่วยความจำที่จัดเก็บองค์ประกอบที่ 'i
ของอาร์เรย์นั้นได้โดยตรง
เราขอแนะนำให้ใช้คําสั่ง requires เพื่อบ่งบอกถึงโอกาสที่โค้ดจะไม่สามารถพอร์ตได้โดยใช้ requires pointer_composite_access;
ที่ด้านบนของโค้ด Shader WGSL ดูตัวอย่างต่อไปนี้และ issue 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.
}`
});
สถานะอ่านอย่างเดียวแยกต่างหากสำหรับแสตนซิลและมิติความลึก
ก่อนหน้านี้ ไฟล์แนบเชิงลึกระดับความลึกแบบอ่านอย่างเดียวในพาสการแสดงผลจะต้องเป็นแบบอ่านอย่างเดียวทั้ง 2 ด้าน (ความลึกและสเตนซิล) แต่เราได้ยกเลิกข้อจำกัดนี้แล้ว ตอนนี้คุณใช้แง่มุมความลึกในโหมดอ่านอย่างเดียวได้แล้ว เช่น สำหรับการแรเงาเงาสะท้อนจากวัตถุ ในขณะที่มีการเขียนบัฟเฟอร์สเตนซิลเพื่อระบุพิกเซลสำหรับการประมวลผลเพิ่มเติม ดู issue dawn:2146
การอัปเดต Dawn
ตอนนี้ระบบจะเรียกใช้การเรียกกลับข้อผิดพลาดที่ไม่ได้บันทึกไว้ซึ่งตั้งค่าด้วย wgpuDeviceSetUncapturedErrorCallback()
ทันทีที่เกิดข้อผิดพลาด ซึ่งเป็นสิ่งที่นักพัฒนาแอปคาดหวังและต้องการสำหรับการแก้ไขข้อบกพร่องเสมอ ดูเปลี่ยน dawn:173620
มีการใช้เมธอด wgpuSurfaceGetPreferredFormat()
จาก webgpu.h API ดูปัญหา dawn:1362
ข้อมูลนี้เป็นเพียงไฮไลต์สำคัญบางส่วนเท่านั้น ดูรายการคอมมิตทั้งหมด
มีอะไรใหม่ใน WebGPU
รายการทุกอย่างที่ครอบคลุมในชุดมีอะไรใหม่ใน WebGPU
Chrome 131
- ตัดระยะทางใน WGSL
- GPUCanvasContext getConfiguration()
- องค์ประกอบพื้นฐานของจุดและเส้นต้องไม่มีอคติด้านความลึก
- ฟังก์ชันการสแกนแบบรวมในตัวสำหรับกลุ่มย่อย
- การรองรับการดึงข้อมูลแบบหลายดึงข้อมูลโดยอ้อมในขั้นทดลอง
- ตัวเลือกการคอมไพล์โมดูล Shader ที่ใช้คณิตศาสตร์แบบเข้มงวด
- นํา GPUAdapter requestAdapterInfo() ออก
- ข้อมูลอัปเดตเมื่อรุ่งเช้า
Chrome 130
- การผสมผสานแหล่งที่มาแบบคู่
- การปรับปรุงเวลาคอมไพล์ Shader ใน Metal
- การเลิกใช้งาน requestAdapterInfo() ของ GPUAdapter
- ข้อมูลอัปเดตเมื่อรุ่งเช้า
Chrome 129
- การรองรับ HDR ด้วยโหมดการปรับโทนสีของ Canvas
- การรองรับกลุ่มย่อยที่เพิ่มขึ้น
- ข้อมูลอัปเดตเกี่ยวกับ Dawn
Chrome 128
- การทดสอบกลุ่มย่อย
- เลิกใช้งานการตั้งค่าความเอียงของภาพสำหรับเส้นและจุด
- ซ่อนคำเตือนข้อผิดพลาดของเครื่องมือสำหรับนักพัฒนาเว็บที่ไม่ได้บันทึกไว้หาก preventDefault
- WGSL จะปัดเศษการสุ่มตัวอย่างก่อน แล้วทำอย่างใดอย่างหนึ่งต่อไปนี้
- ข้อมูลอัปเดตเกี่ยวกับ Dawn
Chrome 127
- การรองรับ OpenGL ES ใน Android แบบทดลอง
- แอตทริบิวต์ข้อมูลของ GPU
- การปรับปรุงความสามารถในการทำงานร่วมกันของ WebAssembly
- ข้อผิดพลาดเกี่ยวกับโปรแกรมเข้ารหัสคําสั่งที่ปรับปรุงแล้ว
- ข้อมูลอัปเดตเกี่ยวกับ Dawn
Chrome 126
- เพิ่มขีดจํากัด maxTextureArrayLayers
- การเพิ่มประสิทธิภาพการอัปโหลดบัฟเฟอร์สําหรับแบ็กเอนด์ Vulkan
- การปรับปรุงเวลาคอมไพล์ Shader
- บัฟเฟอร์คำสั่งที่ส่งต้องไม่ซ้ำกัน
- ข้อมูลอัปเดตเกี่ยวกับ Dawn
Chrome 125
Chrome 124
- พื้นผิวพื้นที่เก็บข้อมูลแบบอ่านอย่างเดียวและแบบอ่านและเขียน
- การรองรับ Service Worker และ Shared Worker
- แอตทริบิวต์ข้อมูลอะแดปเตอร์ใหม่
- แก้ไขข้อบกพร่อง
- ข้อมูลอัปเดตเกี่ยวกับ Dawn
Chrome 123
- รองรับฟังก์ชัน DP4a ในตัวของ WGSL
- พารามิเตอร์พอยน์เตอร์ที่ไม่จํากัดใน WGSL
- น้ำตาลทางไวยากรณ์สำหรับลดการอ้างอิงองค์ประกอบใน WGSL
- แยกสถานะอ่านอย่างเดียวสำหรับแสตนซิลและมิติความลึก
- ข้อมูลอัปเดตเกี่ยวกับ Dawn
Chrome 122
- ขยายการเข้าถึงด้วยโหมดความเข้ากันได้ (ฟีเจอร์ที่กำลังพัฒนา)
- เพิ่มขีดจำกัด maxVertexAttributes
- ข้อมูลอัปเดตเกี่ยวกับ Dawn
Chrome 121
- รองรับ WebGPU ใน Android
- ใช้ DXC แทน FXC สำหรับการคอมไพล์ shader ใน Windows
- การค้นหาการประทับเวลาในการคำนวณและผ่านการแสดงผล
- จุดแรกเข้าเริ่มต้นไปยังโมดูล Shader
- รองรับ display-p3 เป็นพื้นที่สี GPUExternalTexture
- ข้อมูลกองหน่วยความจำ
- ข้อมูลอัปเดตเมื่อรุ่งเช้า
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() ในผืนผ้าใบที่ไม่ได้กำหนดค่าไว้แสดงข้อผิดพลาดที่ไม่ถูกต้อง
- ข้อมูลอัปเดตเกี่ยวกับ WGSL
- ข้อมูลอัปเดตเมื่อรุ่งเช้า