מה חדש ב-WebGPU (גרסה 134 של Chrome)

François Beaufort
François Beaufort

תאריך פרסום: 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

Chrome 133

Chrome 132

Chrome 131

Chrome 130

Chrome 129

Chrome 128

Chrome 127

Chrome 126

Chrome 125

Chrome 124

Chrome 123

Chrome 122

Chrome 121

Chrome 120

Chrome 119

Chrome 118

Chrome 117

Chrome 116

Chrome 115

Chrome 114

Chrome 113