ניסוי עם קבוצות משנה
התכונה 'קבוצות משנה' מאפשרת לבצע עיבוד מקבילי ברמת SIMD, ומאפשרת לשרשורים בתוך קבוצה לתקשר ולבצע פעולות מתמטיות קולקטיביות (לדוגמה, חישוב הסכום של 16 מספרים). כך אפשר לשתף נתונים בין שרשורים בצורה יעילה מאוד.
הטמעה מינימלית של הצעה לקבוצות משנה זמינה לבדיקה מקומית מאחורי הדגל 'תמיכה לא בטוחה ב-WebGPU' בכתובת chrome://flags/#enable-unsafe-webgpu
.
אתם יכולים גם לנסות קבוצות משנה באתר עם משתמשים אמיתיים על ידי הרשמה לתקופת הניסיון במקור. במאמר תחילת השימוש בגרסת המקור לניסיון מוסבר איך להכין את האתר לשימוש בגרסת המקור לניסיון. תקופת הניסיון בגרסת המקור תתקיים מגרסת Chrome 128 עד 131 (ותסתיים ב-19 בפברואר 2025). כוונה לערוך ניסוי
כשהתכונה "subgroups"
זמינה ב-GPUAdapter
, צריך לבקש GPUDevice
עם התכונה הזו כדי לקבל תמיכה בקבוצות משנה ב-WGSL ולבדוק את המגבלות של minSubgroupSize
ו-maxSubgroupSize
.
בנוסף, צריך להפעיל את התוסף הזה באופן מפורש בקוד WGSL באמצעות enable subgroups;
. כשהתכונה הזו מופעלת, אתם מקבלים גישה לתוספים הבאים:
subgroup_invocation_id
: ערך מובנה של האינדקס של השרשור בתוך אותה תת-קבוצה.subgroup_size
: ערך מובנה לגישה לגודל של קבוצת משנה.subgroupBallot(value)
: הפונקציה מחזירה קבוצה של שדות ביט, שבהם הביט התואם ל-subgroup_invocation_id
הוא 1 אםvalue
נכון לקריאה הפעילה הזו, ו-0 במקרים אחרים.subgroupBroadcast(value, id)
: המערכת משדרת אתvalue
מהקריאה עםsubgroup_invocation_id
שתואם ל-id
לכל הקריאות בתוך קבוצת המשנה. הערה:id
חייב להיות קבוע בזמן הידור.
בעתיד נוסיף עוד פונקציות מובנות כמו subgroupAdd
, subgroupAll
, subgroupElect
, subgroupShuffle
. בעיה מס' 354738715
כדי לאפשר את הפונקציה f16 בפעולות של קבוצות משנה, צריך לבקש GPUDevice
עם התכונות "subgroups"
, "subgroups-f16"
ו-"shader-f16"
, ואז להפעיל אותה בקוד WGSL באמצעות enable f16, subgroups, subgroups_f16;
.
קטע הקוד הבא מספק בסיס לניסוי ולגילוי הפוטנציאל של קבוצות משנה.
const adapter = await navigator.gpu.requestAdapter();
if (!adapter.features.has("subgroups")) {
throw new Error("Subgroups support is not available");
}
// Explicitly request subgroups support.
const device = await adapter.requestDevice({
requiredFeatures: ["subgroups"],
});
const shaderModule = device.createShaderModule({ code: `
enable subgroups;
var<workgroup> wgmem : u32;
@group(0) @binding(0)
var<storage, read> inputs : array<u32>;
@group(0) @binding(1)
var<storage, read_write> output : array<u32>;
@compute @workgroup_size(64)
fn main(@builtin(subgroup_size) subgroupSize : u32,
@builtin(subgroup_invocation_id) id : u32,
@builtin(local_invocation_index) lid : u32) {
// One thread per workgroup writes the value to workgroup memory.
if (lid == 0) {
wgmem = inputs[lid];
}
workgroupBarrier();
var v = 0u;
// One thread per subgroup reads the value from workgroup memory
// and shares that value with every other thread in the subgroup
// to reduce local memory bandwidth.
if (id == 0) {
v = wgmem;
}
v = subgroupBroadcast(v, 0);
output[lid] = v;
}`,
});
// Send the appropriate commands to the GPU...
הוצאה משימוש של הגדרת הטיה של עומק לקווים ולנקודות
שינוי במפרט של WebGPU גורם לכך שהגדרה של depthBias
, depthBiasSlopeScale
ו-depthBiasClamp
לערך שאינו אפס כשהטופוגרפיה של צינור עיבוד הגרפי היא מסוג קו או נקודה נחשבת לשגיאת אימות. כדי לתת למפתחים מספיק זמן לעדכן את הקוד שלהם, תוצג אזהרה במסוף כלי הפיתוח לגבי האימות הקרוב, וגם ערכים של 0 יופעלו במקרים כאלה. בעיה מס' 352567424
הסתרת אזהרה של DevTools על שגיאה שלא תועדה אם preventDefault
במסוף DevTools, אזהרות לגבי אירועי uncapturederror
לא מוצגות יותר אם רשום מאזין אירועים ל-uncapturederror
ושיטת האירוע preventDefault()
הוזמנה בתוך פונקציית ה-callback של מאזין האירועים. ההתנהגות הזו תואמת לטיפול באירועים ב-JavaScript. דוגמה לכך מופיעה בבעיה 40263619.
const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();
device.addEventListener("uncapturederror", (event) => {
// Prevents browser warning to show up in the DevTools Console.
event.preventDefault();
// TODO: Handle event.error
});
WGSL מבצעת אינטרפולציה של הדגימה קודם ואז:
המאפיין interpolate
של WGSL מאפשר לנהל אינטרפולציה של נתוני IO שהוגדרו על ידי משתמשים. עכשיו, פרמטרים חדשים של דגימת אינטרפולציה first
(ברירת המחדל) ו-either
נותנים לכם שליטה נוספת: הפרמטר first
משתמש בערך מהקודקוד הראשון של הפרימיטיב, בעוד שהפרמטר either
מאפשר להשתמש בקודקוד הראשון או האחרון. בעיה מס' 340278447
עדכונים בנושא Dawn
ההטמעה של WGPUFuture של Dawn לטיפול בפעולות אסינכרוניות הושלמה. מושגים מרכזיים כוללים את wgpuInstanceProcessEvents לעיבוד אירועים יזום ואת WGPUCallbackMode להגדרת מיקומי קריאות חזרה (callbacks). WGPUFuture מייצג אירועים חד-פעמיים עם משך חיים אינסופי, ו-wgpuInstanceWaitAny ממתין להשלמה של כל אירוע עתידי או לתפוגת הזמן. בעיה 42240932
עכשיו הערך של CompositeAlphaMode::Auto
לא מדווח על ידי Surface::GetCapabilities()
. הוא עדיין בתוקף ושווה ל-Surface::GetCapabilities().alphaMode[0]
. בעיה מס' 292
הקצה העורפי של OpenGL תומך עכשיו ב-Surface
עם blit של Flip-Y לכל קריאה ל-Present()
. בעיה 344814083
השיטה Adapter::GetProperties()
הוצאה משימוש והוחלפה על ידי השיטה Adapter::GetInfo()
.
Jaswant, שותף תורם חיצוני, כתב מחדש את כל קובצי CMake, כך שיהיה קל יותר לעדכן אותם ואפשר יהיה לבצע גרסאות build מראש. במדריך למתחילים מוסבר איך משתמשים ב-Dawn בפרויקטים של CMake.
כאן מפורטות רק כמה מהנקודות העיקריות. רשימת השינויים המלאה
מה חדש ב-WebGPU
רשימה של כל מה שנדון בסדרה מה חדש ב-WebGPU.
Chrome 134
- שיפור עומסי העבודה של למידת המכונה באמצעות קבוצות משנה
- הסרת התמיכה בסוגי מרקמים שניתנים לסינון באמצעות רכיבי float כרכיבים שניתן למזג
- עדכונים לגבי Dawn
Chrome 133
- פורמטים נוספים של קודקודים מסוג unorm8x4-bgra וקודקודים עם רכיב אחד
- איך מאפשרים לבקש מגבלות לא ידועות עם ערך לא מוגדר
- שינויים בכללי היישור של WGS84
- שיפור בביצועים של WGSL באמצעות ביטול
- שימוש ב-displaySize של VideoFrame לצורך טקסטורות חיצוניות
- טיפול בתמונות עם כיוונים שאינם ברירת המחדל באמצעות copyExternalImageToTexture
- שיפור חוויית המפתחים
- הפעלת מצב תאימות באמצעות featureLevel
- ניקוי של תכונות ניסיוניות של קבוצות משנה
- הוצאה משימוש של המגבלה maxInterStageShaderComponents
- עדכונים לגבי Dawn
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
- שיפורים בזמן הידור של שגיאות (shaders)
- מאגרי הפקודות שנשלחים חייבים להיות ייחודיים
- עדכונים לגבי 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