מה חדש ב-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: ערך מובנה לאינדקס של השרשור בתוך קבוצת המשנה.
  • 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. התוספת הזו מאפשרת, למשל, ליצור סצנות ואפקטים המבוססים על ווקסל על ידי רינדור ישירות לתוך נפחי מרקם תלת ממדיים. להצגת בעיה בזריחה:1020.

עדכונים בשעות השחר

כדאי לעיין ברשימת ההתחייבויות המקיפה.

מה חדש ב-WebGPU

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

Chrome 125

Chrome 124

Chrome 123

גרסה 122 של Chrome

גרסה 121 של Chrome

Chrome 120

גרסה 119 של Chrome

גרסה 118 של Chrome

גרסה 117 של Chrome

גרסה 116 של Chrome

Chrome 115

Chrome 114

גרסה 113 של Chrome