תאריך פרסום: 26 בפברואר 2025
שיפור עומסי העבודה של למידת המכונה באמצעות קבוצות משנה
אחרי שנה של פיתוח וניסויים, התכונה WebGPU של קבוצות המשנה מאפשרת עכשיו ביצוע פעולות במקביל ברמת SIMD. הוא מאפשר לשרשור בקבוצת עבודה לתקשר ולבצע פעולות מתמטיות קולקטיביות, כמו חישוב סכום של מספרים, ומציע שיטה יעילה לשיתוף נתונים בין שרשורים. אפשר לעיין בהצעה המקורית וברשומה ב-chromestatus.
לידיעתכם, ב-Google Meet ראינו עלייה של פי 2.3 עד 2.9 במהירות כשהשווינו בין קבוצות משנה לבין מוצרי נקודה של מספר שלם ארוז בשביל שגיאות של כפל מטריקס-וקטור בשידרים מסוימים במהלך תקופת הניסיון המקורית.
כשהתכונה "subgroups"
זמינה ב-GPUAdapter
, צריך לבקש GPUDevice
עם התכונה הזו כדי לקבל תמיכה בקבוצות משנה ב-WGSL. מומלץ לבדוק את הערכים של פרטי המתאם subgroupMinSize
ו-subgroupMaxSize
. לדוגמה, אם יש לכם אלגוריתם מקודד מראש שדורש קבוצת משנה בגודל מסוים.
בנוסף, צריך להפעיל את התוסף הזה באופן מפורש בקוד WGSL באמצעות enable subgroups;
כדי לקבל גישה לערכים המובנים הבאים בשלבים של שגיאות המחשוב ושל שגיאות הפירור:
subgroup_invocation_id
: ערך מובנה של האינדקס של השרשור בתוך אותה תת-קבוצה.subgroup_size
: ערך מובנה לגישה לגודל של קבוצת משנה.
הפונקציות המובנות הרבות של תת-קבוצות (לדוגמה, subgroupAdd()
, subgroupBallot()
, subgroupBroadcast()
, subgroupShuffle()
) מאפשרות תקשורת וחישוב יעילים בין קריאות בתוך תת-קבוצה. פעולות הקבוצות המשניות האלה מסווגות כפעולות של הוראה אחת בכמה חוטים (SIMT). בנוסף, הפונקציות המובנות של quad, שפועלות על quad של קריאות, מאפשרות תקשורת נתונים בתוך ה-quad.
אפשר להשתמש בערכי f16 עם קבוצות משנה כשמבקשים GPUDevice
עם מאפייני "shader-f16"
ו-"subgroups"
.
הדוגמה הבאה היא נקודת התחלה טובה לבחינת קבוצות משנה: היא מציגה שידר (shader) שמשתמש בפונקציה המובנית subgroupExclusiveMul()
כדי לחשב גורמים בלי לקרוא או לכתוב בזיכרון כדי להעביר תוצאות ביניים.
הסרת התמיכה בסוגי מרקמים שניתנים לסינון באמצעות רכיבי float כרכיבים שניתן למזג
עכשיו, כשהמיזוג של מרקמי 32 ביט מסוג float זמין באמצעות התכונה "float32-blendable"
, הוסרה התמיכה השגויה בסוגים של מרקמים שניתנים לסינון באמצעות float כמיזוגים. בעיה מס' 364987733
עדכונים בנושא Dawn
עכשיו נדרשים ל-Dawn macOS 11 ו-iOS 14, ויש תמיכה רק ב-Metal מגרסה 2.3 ואילך. ראו בעיה 381117827.
השיטה החדשה GetWGSLLanguageFeatures()
של wgpu::Instance
מחליפה עכשיו את EnumerateWGSLLanguageFeatures()
. בעיה מס' 368672124
סוגי הקישורים הבאים כוללים ערך Undefined
, וערכי ברירת המחדל שלהם בפריסה של הקישורים השתנו. בעיה 377820810
- האפשרות
wgpu::BufferBindingType::Undefined
נקראתUniform
עכשיו - האפשרות
wgpu::SamplerBindingType::Undefined
נקראתFiltering
עכשיו - האפשרות
wgpu::TextureSampleType::Undefined
נקראתFloat
עכשיו wgpu::StorageTextureAccess::Undefined
נקרא עכשיוWriteOnly
כאן מפורטות רק כמה מהנקודות העיקריות. רשימת השינויים המלאה
מה חדש ב-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