תמיכה בפונקציות מובנות של 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 של ה-shader באמצעות הפונקציות המובנות dot4U8Packed
ו-dot4I8Packed
. אפשר גם להשתמש בהוראות לאריזה ולפריסה של וקטורים ארוזים עם 4 רכיבים של מספרים שלמים באורך 8 ביט באמצעות הפונקציות המובנות של WGSL: pack4xI8
, pack4xU8
, pack4xI8Clamp
, pack4xU8Clamp
, unpack4xI8
ו-unpack4xU8
.
מומלץ להשתמש בהנחיה של requires כדי לסמן את האפשרות לבעיות בהעברה באמצעות requires packed_4x8_integer_dot_product;
בחלק העליון של קוד ה-WGSL של ה-shader. דוגמה לכך מופיעה בהמשך, וגם בבעיה 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
תוסף השפה "unrestricted_pointer_parameters"
של WGSL מאפשר להעביר למשתני הפונקציה של WGSL יותר סוגי מצביעים:
מצביע הפרמטרים של המרחבים
storage
, uniform
ו-workgroup
מפנה לפונקציות שהוצהרו על ידי המשתמש.העברת הפניות לחברי מבנה ולרכיבי מערך לפונקציות שהוצהרו על ידי המשתמש.
מידע נוסף זמין במאמר Pointers As Function Parameters | Tour of WGSL.
אפשר לזהות את התכונה הזו באמצעות navigator.gpu.wgslLanguageFeatures
. מומלץ תמיד להשתמש בהנחיה של requires כדי לסמן את האפשרות של אי-ניידות באמצעות requires unrestricted_pointer_parameters;
בחלק העליון של קוד ה-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);
}`
});
שיפורי תחביר לביטול ההפניה למשתנים מורכבים ב-WGSL
כשתוסף השפה "pointer_composite_access"
של WGSL נמצא ב-navigator.gpu.wgslLanguageFeatures
, קוד ה-WGSL של שדה השיזוף תומך עכשיו בגישה לרכיבים של סוגי נתונים מורכבים באמצעות אותה תחביר של נקודה (.
), בין שאתם עובדים ישירות עם הנתונים ובין שאתם עובדים עם הפניה אליהם. ככה זה עובד:
אם
foo
הוא מצביע:foo.bar
היא דרך נוחה יותר לכתוב(*foo).bar
. בדרך כלל צריך את הכוכבית (*
) כדי להפוך את ההפניה ל'הפניה' שאפשר לבטל את ההפניה אליה, אבל עכשיו גם ההפניות וגם ההפניות דומות הרבה יותר, ואפשר להחליף ביניהן כמעט ללא בעיה.אם
foo
הוא לא מצביע: אופרטור הנקודה (.
) פועל בדיוק כמו שאתם רגילים לגשת ישירות למשתתפים.
באופן דומה, אם pa
הוא מצביע שמאחסן את כתובת ההתחלה של מערך, השימוש ב-pa[i]
נותן גישה ישירה למיקום בזיכרון שבו מאוחסן האלמנט ה-'i
של המערך.
מומלץ להשתמש בהנחיה של requires כדי לסמן את האפשרות לבעיות בהעברה באמצעות requires pointer_composite_access;
בחלק העליון של קוד ה-WGSL של ה-shader. אפשר לעיין בדוגמה הבאה ובבעיה 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.
}`
});
מצב נפרד לקריאה בלבד של אספקטים של תבנית ועומק
בעבר, כדי לצרף תבניות עומק לקריאה בלבד במעברי רינדור, היה צריך להגדיר את שני ההיבטים (עומק ותבנית) לקריאה בלבד. המגבלה הזו הוסרה. עכשיו אפשר להשתמש במאפיין העומק לקריאה בלבד, למשל לצורך מעקב אחר צללים של עצמים, בזמן שמתבצעת כתיבת במאגר התבניות לזיהוי פיקסלים לעיבוד נוסף. בעיה dawn:2146
עדכונים של Dawn
פונקציית ה-callback של השגיאה שלא תועדה שהוגדרה באמצעות wgpuDeviceSetUncapturedErrorCallback()
נקראת עכשיו באופן מיידי כשהשגיאה מתרחשת. זה מה שמפתחים מצפים ומבקשים באופן עקבי לצורך ניפוי באגים. ראו change dawn:173620.
שיטת wgpuSurfaceGetPreferredFormat()
מ-webgpu.h API הוטמעה. ראו issue dawn:1362.
כאן מפורטות רק כמה מהנקודות העיקריות. רשימת ההצהרות המלאה
מה חדש ב-WebGPU
רשימה של כל מה שנדון בסדרה מה חדש ב-WebGPU.
Chrome 132
- שימוש בתצוגת טקסטורה
- מיזוג של מרקמים מסוג float ב-32 ביט
- המאפיין adapterInfo של GPUDevice
- הגדרת הקשר של לוח הציור בפורמט לא חוקי גורמת לשגיאת JavaScript
- הגבלות על סינון של טקסטורות
- ניסוי עם תת-קבוצות מורחבות
- שיפור חוויית המפתחים
- תמיכה ניסיונית בפורמטים של טקסטורות מנורמלות ב-16 ביט
- עדכונים לגבי Dawn
Chrome 131
- חיתוך מרחקים ב-WGSL
- GPUCanvasContext getConfiguration()
- אסור שתהיה הטיה של עומק בפרימיטיבים של נקודות וקווים
- פונקציות מובנות של סריקה כוללת לקבוצות משנה
- תמיכה ניסיונית בקריאה עקיפה עם מספר משיכות
- Shader module compilation option strict math
- הסרת השיטה requestAdapterInfo() של GPUAdapter
- עדכונים לגבי Dawn
Chrome 130
- שילוב של שני מקורות
- שיפורי זמן הידור של שפות Shader ב-Metal
- הוצאה משימוש של requestAdapterInfo() של GPUAdapter
- עדכונים לגבי Dawn
Chrome 129
Chrome 128
- ניסוי עם תתי-קבוצות
- הוצאה משימוש של הגדרת הטיה של עומק לקווים ולנקודות
- הסתרת אזהרת DevTools על שגיאה שלא תועדה אם preventDefault
- WGSL מבצעת אינטרפולציה של הדגימה קודם ואז
- עדכונים לגבי Dawn
Chrome 127
- תמיכה ניסיונית ב-OpenGL ES ב-Android
- מאפיין המידע של GPUAdapter
- שיפורים בתאימות הדדית של WebAssembly
- שיפור שגיאות של מקודד הפקודות
- עדכונים לגבי Dawn
Chrome 126
- הגדלת המגבלה של maxTextureArrayLayers
- אופטימיזציה של העלאה למאגר לצד העורפי של Vulkan
- שיפורים בזמן הידור של שגיאות (shader)
- מאגרי הפקודות שנשלחים חייבים להיות ייחודיים
- עדכונים לגבי Dawn
Chrome 125
Chrome 124
- טקסטורות אחסון לקריאה בלבד ולקריאה וכתיבה
- תמיכה ב-Service Workers וב-Shared Workers
- מאפיינים חדשים של פרטי מתאם
- תיקוני באגים
- עדכונים לגבי Dawn
Chrome 123
- תמיכה בפונקציות מובנות של DP4a ב-WGSL
- פרמטרים של מצביע ללא הגבלה ב-WGSL
- תחביר פשוט יותר לביטול ההפניה למשתנים מורכבים ב-WGSL
- מצב נפרד לקריאה בלבד של אספקטים של תבנית ועומק
- עדכונים לגבי Dawn
Chrome 122
- הרחבת פוטנציאל החשיפה באמצעות מצב תאימות (תכונה בפיתוח)
- הגדלת המגבלה של maxVertexAttributes
- עדכונים לגבי Dawn
Chrome 121
- תמיכה ב-WebGPU ב-Android
- שימוש ב-DXC במקום ב-FXC לצורך הידור של שגיאות ב-Windows
- שאילתות של חותמות זמן בשלבי המחשוב והעיבוד
- נקודות כניסה שמוגדרות כברירת מחדל למודולי Shader
- תמיכה ב-display-p3 כמרחב צבע של GPUExternalTexture
- מידע על ערמות זיכרון
- עדכונים לגבי Dawn
Chrome 120
- תמיכה בערכים של נקודה צפה (floating-point) באורך 16 ביט ב-WGSL
- מעבר למגבלות
- שינויים במצב של עומק-המרקע
- עדכונים של פרטי המתאם
- קידוד נתונים של שאילתות עם חותמות זמן
- תכונות לניקוי האביב
Chrome 119
- טקסטורות של מספרים ממשיים (float) ב-32 ביט שניתן לסנן
- פורמט קודקוד unorm10-10-10-2
- פורמט טקסטורה של rgb10a2uint
- עדכונים לגבי Dawn
Chrome 118
- תמיכה ב-HTMLImageElement וב-ImageData ב-
copyExternalImageToTexture()
- תמיכה ניסיונית ברקמות אחסון לקריאה וכתיבה ולקריאה בלבד
- עדכונים לגבי Dawn
Chrome 117
- ביטול ההגדרה של מאגר הנקודות
- ביטול ההגדרה של קבוצת הקישור
- השתקת שגיאות שנובעות מיצירת צינור עיבוד נתונים אסינכררוני כשהמכשיר אבד
- עדכונים לגבי יצירת מודולים של שַדְררים ב-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