موارد جدید در WebGPU (Chrome 125)

فرانسوا بوفور
François Beaufort

ممکن است تعداد ویژگی‌های WebGPU این بار کمی کم به نظر برسد، اما پیشرفت‌های بزرگی در راه است! نسخه‌های آینده شامل ویژگی‌هایی مانند بهبود سرعت کامپایل سایه‌زن و تغییراتی در مدل ناهمگام پیاده‌سازی با استفاده از WGPUFuture خواهند بود.

زیرگروه‌ها (ویژگی در حال توسعه)

ویژگی زیرگروه‌ها، موازی‌سازی در سطح SIMD را امکان‌پذیر می‌کند و به رشته‌های درون یک گروه اجازه می‌دهد تا با یکدیگر ارتباط برقرار کرده و عملیات ریاضی جمعی (مثلاً محاسبه مجموع ۱۶ عدد) را انجام دهند. این امر، شکلی بسیار کارآمد از اشتراک‌گذاری داده‌های بین رشته‌ای را فراهم می‌کند.

عملیات زیرگروه توسط APIهای GPU مدرن پشتیبانی می‌شوند، اما جزئیات نامگذاری و پیاده‌سازی متفاوت است. تیم کروم مشترکات را شناسایی کرده و اکنون در حال تلاش برای استانداردسازی این ویژگی است. پیشنهاد را بررسی کنید و در صورت داشتن هرگونه سوال، نظر خود را بنویسید .

یک پیاده‌سازی حداقلی و غیراستاندارد از زیرگروه‌ها پشت پرچم «ویژگی‌های پلتفرم وب آزمایشی» در 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 در صورتی که value برای آن فراخوانی فعال درست باشد، ۱ و در غیر این صورت ۰ است.
  • subgroupBroadcast(value, id) : value را از فراخوانی که id با subgroup_invocation_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» پوشش داده شده است.

کروم ۱۴۲

کروم ۱۴۱

کروم ۱۴۰

کروم ۱۳۹

کروم ۱۳۸

کروم ۱۳۷

کروم ۱۳۶

کروم ۱۳۵

کروم ۱۳۴

کروم ۱۳۳

کروم ۱۳۲

کروم ۱۳۱

کروم ۱۳۰

کروم ۱۲۹

کروم ۱۲۸

کروم ۱۲۷

کروم ۱۲۶

کروم ۱۲۵

کروم ۱۲۴

کروم ۱۲۳

کروم ۱۲۲

کروم ۱۲۱

کروم ۱۲۰

کروم ۱۱۹

کروم ۱۱۸

کروم ۱۱۷

کروم ۱۱۶

کروم ۱۱۵

کروم ۱۱۴

کروم ۱۱۳