מה חדש ב-WebGPU (Chrome125)

François Beaufort
François Beaufort

מספר התכונות של WebGPU עשוי להיות מעט דל הפעם, אבל כמה חידושים משמעותיים נמצאים ממש מעבר לפינה! גרסאות עתידיות יכללו תכונות כמו שיפור מהירות ההידור של תוכנת ההצללה (shader) ושינויים במודל האסינכרוני של ההטמעה באמצעות WGPUFuture.

קבוצות משנה (תכונה בפיתוח)

התכונה של תת-קבוצות מאפשרת מקבילות ברמת ה-SIMD, וכך מאפשרת לשרשורים בתוך קבוצה לתקשר ולבצע פעולות מתמטיות קולקטיביות (לדוגמה, חישוב סכום של 16 מספרים). הפתרון הזה מספק צורה יעילה במיוחד של שיתוף נתונים בין שרשורים.

פעולות של קבוצות משנה נתמכות על ידי ממשקי API מודרניים של GPU, אבל פרטי מתן השמות וההטמעה משתנים. צוות Chrome זיהה את הגורמים הנפוצים ופועל עכשיו לסטנדרטיזציה של התכונה הזו. אם יש לך שאלות, מומלץ לעיין בהצעה ובתגובה.

קיים יישום מינימלי ולא סטנדרטי של קבוצות משנה מאחורי 'תכונות פלטפורמת אינטרנט ניסיוניות' ב-chrome://flags/#enable-experimental-web-platform-features כדי שמפתחים יוכלו לנסות ולשתף משוב, כי יתרונות בעולם האמיתי עדיין לא הוכחו בהקשר של WebGPU.

כשהתכונה "chromium-experimental-subgroups" זמינה ב-GPUAdapter, צריך לבקש GPUDevice עם התכונה הזו כדי לקבל תמיכה בקבוצות משנה ניסיוניות ב-WGSL ולבדוק את המגבלות minSubgroupSize ו-maxSubgroupSize שלה.

בנוסף, צריך להפעיל את התוסף הזה באופן מפורש בקוד WGSL באמצעות enable chromium_experimental_subgroups. כשהאפשרות מופעלת, מקבלים גישה לתוספות הבאות:

  • subgroup_invocation_id: ערך מובנה לאינדקס של ה-thread בתוך קבוצת המשנה.
  • subgroup_size: ערך מובנה לגישה לגודל של קבוצת משנה.
  • הפונקציה subgroupBallot(value): מחזירה קבוצה של שדות ביט שבהם הביט שתואם ל-subgroup_invocation_id הוא 1 אם value נכון להפעלה הפעילה הזו ו-0 אם לא.
  • subgroupBroadcast(value, id): שידור של value מההפעלה עם subgroup_invocation_id שתואם ל-id לכל ההפעלות בתת-הקבוצה. הערה: id חייב להיות קבוע של זמן הידור.

קטע הקוד הבא מספק בסיס שיעזור לכם לבחון את הפוטנציאל של קבוצות משנה ולגלות את הפוטנציאל שלהן.

const adapter = await navigator.gpu.requestAdapter();
if (!adapter.features.has("chromium-experimental-subgroups")) {
  throw new Error("Experimental subgroups support is not available");
}
// Explicitly request experimental subgroups support.
const device = await adapter.requestDevice({
  requiredFeatures: ["chromium-experimental-subgroups"],
});

const shaderModule = device.createShaderModule({ code: `
  enable chromium_experimental_subgroups;

  @compute @workgroup_size(64) fn main(
      @builtin(global_invocation_id) global_id : vec3u,
      @builtin(subgroup_size) sg_size : u32,
      @builtin(subgroup_invocation_id) sg_id : u32) {
    // TODO: Use subgroupBallot() and subgroupBroadcast().
  }`,
});

עיבוד לפרוסה של טקסטורה תלת-ממדית

עכשיו אפשר לעבד ישירות פרוסות של טקסטורות תלת-ממדיות באישורים לעיבוד, ולהרחיב את היכולות שלהן מעבר לרינדור טקסטורות דו-ממדי נפוץ, כשחבר depthSlice החדש משויך ל-GPURenderPassColorAttachment. התוספת הזו מאפשרת, למשל, ליצור סצנות ואפקטים שמבוססים על ווקסל על ידי עיבוד ישירות לנפחי טקסטורה בתלת-ממד. ראו גיליון dawn:1020.

עדכונים לגבי זריחה

אתם מוזמנים לעיין ברשימה המלאה של ההתחייבויות.

מה חדש ב-WebGPU

רשימה של כל מה שדיברנו עליו בסדרה מה חדש ב-WebGPU.

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