پشتیبانی از توابع داخلی DP4a در WGSL
DP4a (ضرب نقطهای ۴ عنصر و جمع) به مجموعهای از دستورالعملهای GPU اشاره دارد که معمولاً در استنتاج یادگیری عمیق برای کوانتیزاسیون استفاده میشود. این دستور ، ضرب نقطهای اعداد صحیح ۸ بیتی را به طور مؤثر انجام میدهد تا محاسبه چنین مدلهای کوانتیزه شده int8 را تسریع کند. این دستور میتواند (تا ۷۵٪) در حافظه و پهنای باند شبکه صرفهجویی کند و عملکرد هر مدل یادگیری ماشینی را در استنتاج در مقایسه با نسخه f32 آنها بهبود بخشد. در نتیجه، اکنون به شدت در بسیاری از چارچوبهای محبوب هوش مصنوعی مورد استفاده قرار میگیرد.
وقتی افزونهی زبان WGSL با نام "packed_4x8_integer_dot_product"
در navigator.gpu.wgslLanguageFeatures
وجود داشته باشد، اکنون میتوانید از اسکالرهای عدد صحیح ۳۲ بیتی که بردارهای ۴ جزئی از اعداد صحیح ۸ بیتی را بستهبندی میکنند، به عنوان ورودی برای دستورالعملهای ضرب نقطهای در کد سایهزن WGSL خود با توابع داخلی dot4U8Packed
و dot4I8Packed
استفاده کنید. همچنین میتوانید از دستورالعملهای بستهبندی و باز کردن با بردارهای ۴ جزئی از اعداد صحیح ۸ بیتی با توابع داخلی pack4xI8
، pack4xU8
، pack4xI8Clamp
، pack4xU8Clamp
، unpack4xI8
و unpack4xU8
WGSL استفاده کنید.
توصیه میشود از یک دستورالعمل require- برای نشان دادن احتمال عدم قابلیت حمل با استفاده از requires packed_4x8_integer_dot_product;
در بالای کد سایهزن WGSL خود استفاده کنید. به مثال زیر مراجعه کنید و tint:1497 را صادر کنید .
if (!navigator.gpu.wgslLanguageFeatures.has("packed_4x8_integer_dot_product")) {
throw new Error(`DP4a built-in functions are not available`);
}
const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();
const shaderModule = device.createShaderModule({ code: `
requires packed_4x8_integer_dot_product;
fn main() {
const result: u32 = dot4U8Packed(0x01020304u, 0x02040405u); // 42
}`,
});
تشکر ویژه از تیم گرافیک وب اینتل در شانگهای برای پیشبرد این مشخصات و پیادهسازی تا تکمیل!
پارامترهای اشارهگر بدون محدودیت در WGSL
افزونهی زبان WGSL "unrestricted_pointer_parameters"
محدودیتهای مربوط به ارسال اشارهگرها به توابع WGSL را کاهش میدهد:
اشارهگرهای پارامتر فضاهای آدرسدهی
storage
،uniform
وworkgroup
به توابع اعلامشده توسط کاربر.ارسال اشارهگرها به اعضای ساختار و عناصر آرایه به توابع تعریفشده توسط کاربر.
برای کسب اطلاعات بیشتر در مورد اشارهگرها به عنوان پارامترهای تابع | تور WGSL، به این لینک مراجعه کنید.
این ویژگی را میتوان با استفاده از navigator.gpu.wgslLanguageFeatures
شناسایی کرد. توصیه میشود همیشه از یک دستورالعمل requires- برای نشان دادن احتمال عدم قابلیت حمل با requires unrestricted_pointer_parameters;
در بالای کد سایهزن WGSL خود استفاده کنید. به مثال زیر توجه کنید، مشخصات WGSL تغییر میکند و tint:2053 را صادر میکند .
if (!navigator.gpu.wgslLanguageFeatures.has("unrestricted_pointer_parameters")) {
throw new Error(`Unrestricted pointer parameters are not available`);
}
const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();
const shaderModule = device.createShaderModule({ code: `
requires unrestricted_pointer_parameters;
@group(0) @binding(0) var<storage, read_write> S : i32;
fn func(pointer : ptr<storage, i32, read_write>) {
*pointer = 42;
}
@compute @workgroup_size(1)
fn main() {
func(&S);
}`
});
شکر نحوی برای ارجاعزدایی از ترکیبات در WGSL
وقتی افزونهی زبان WGSL "pointer_composite_access"
در navigator.gpu.wgslLanguageFeatures
وجود داشته باشد، کد سایهزن WGSL شما اکنون از دسترسی به اجزای انواع دادههای پیچیده با استفاده از همان سینتکس نقطه ( .
) پشتیبانی میکند، چه مستقیماً با دادهها کار کنید و چه با یک اشارهگر به آنها. نحوهی کار به این صورت است:
اگر
foo
یک اشارهگر باشد:foo.bar
روش راحتتری برای نوشتن(*foo).bar
است. معمولاً برای تبدیل اشارهگر به یک «مرجع» که بتوان آن را غیرمرجع کرد، به ستاره (*
) نیاز است، اما اکنون هم اشارهگرها و هم ارجاعها بسیار شبیهتر و تقریباً قابل تعویض هستند.اگر
foo
یک اشارهگر نباشد: عملگر نقطه (.
) دقیقاً همانطور که برای دسترسی مستقیم به اعضا استفاده میکنید، عمل میکند.
به طور مشابه، اگر pa
اشارهگری باشد که آدرس شروع یک آرایه را ذخیره میکند، استفاده از pa[i]
به شما امکان دسترسی مستقیم به مکانی از حافظه را میدهد که عنصر 'i
'ام آن آرایه در آن ذخیره شده است.
توصیه میشود از یک دستورالعمل require- برای نشان دادن احتمال عدم قابلیت حمل با requires pointer_composite_access;
در بالای کد سایهزن WGSL خود استفاده کنید. به مثال زیر مراجعه کنید و tint:2113 را صادر کنید .
if (!navigator.gpu.wgslLanguageFeatures.has("pointer_composite_access")) {
throw new Error(`Pointer composite access is not available`);
}
const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();
const shaderModule = device.createShaderModule({ code: `
requires pointer_composite_access;
fn main() {
var a = vec3f();
let p : ptr<function, vec3f> = &a;
let r1 = (*p).x; // always valid.
let r2 = p.x; // requires pointer composite access.
}`
});
حالت فقط خواندنی جداگانه برای استنسیل و جنبههای عمق
پیش از این، پیوستهای استنسیل عمق فقط خواندنی در رندرهای مرحلهای، نیاز به فقط خواندنی بودن هر دو جنبه (عمق و استنسیل) داشتند. این محدودیت برداشته شده است. اکنون میتوانید از جنبه عمق به صورت فقط خواندنی استفاده کنید، برای مثال برای ردیابی سایه تماسی، در حالی که بافر استنسیل برای شناسایی پیکسلها برای پردازش بیشتر نوشته شده است. به شماره dawn:2146 مراجعه کنید.
بهروزرسانیهای سپیدهدم
تابع فراخوانی خطای ضبط نشده که با wgpuDeviceSetUncapturedErrorCallback()
تنظیم شده بود، اکنون بلافاصله پس از وقوع خطا فراخوانی میشود. این همان چیزی است که توسعهدهندگان همواره برای اشکالزدایی انتظار دارند و میخواهند. به تغییر dawn:173620 مراجعه کنید.
متد wgpuSurfaceGetPreferredFormat()
از API مربوط به webgpu.h پیادهسازی شده است. به شماره dawn:1362 مراجعه کنید.
این فقط برخی از نکات برجسته کلیدی را پوشش میدهد. لیست جامع کامیتها را بررسی کنید.
ویژگیهای جدید WebGPU
فهرستی از تمام مواردی که در مجموعه «ویژگیهای جدید WebGPU» پوشش داده شده است.
کروم ۱۴۲
کروم ۱۴۱
- رنگ IR تکمیل شد
- تحلیل محدوده اعداد صحیح در کامپایلر WGSL
- بهروزرسانی SPIR-V 1.4 برای رابط کاربری Vulkan
- بهروزرسانیهای سپیدهدم
کروم ۱۴۰
- درخواستهای دستگاه، آداپتور را مصرف میکنند
- اختصار برای استفاده از بافت در جایی که از نمای بافت استفاده میشود
- WGSL textureSampleLevel از بافتهای تکبعدی پشتیبانی میکند.
- استفاده از بافت ذخیرهسازی فقط خواندنی bgra8unorm را منسوخ کنید
- ویژگی isFallbackAdapter مربوط به GPUAdapter را حذف کنید
- بهروزرسانیهای سپیدهدم
کروم ۱۳۹
- پشتیبانی از بافت سهبعدی برای فرمتهای فشرده BC و ASTC
- ویژگی جدید «ویژگیهای اصلی و محدودیتها»
- نسخه آزمایشی Origin برای حالت سازگاری با WebGPU
- بهروزرسانیهای سپیدهدم
کروم ۱۳۸
- مختصر نویسی برای استفاده از بافر به عنوان منبع اتصال
- تغییرات اندازه مورد نیاز برای بافرهای نگاشت شده در زمان ایجاد
- گزارش معماری برای پردازندههای گرافیکی اخیر
- منسوخ کردن ویژگی isFallbackAdapter در GPUAdapter
- بهروزرسانیهای سپیدهدم
کروم ۱۳۷
- استفاده از نمای بافت برای اتصال خارجی بافت
- بافرها بدون مشخص کردن آفستها و اندازه، کپی میکنند
- بارگذاری یکنواخت گروه کاری WGSL با استفاده از اشارهگر به اتمی
- ویژگی powerPreference آداپتور GPU
- ویژگی سازگاری GPURequestAdapterOptions را حذف کنید.
- بهروزرسانیهای سپیدهدم
کروم ۱۳۶
- GPUAdapterInfo ویژگی آداپتور برگشتی است
- بهبود زمان کامپایل شیدر در D3D12
- تصاویر بوم را ذخیره و کپی کنید
- محدودیتهای حالت سازگاری را بردارید
- بهروزرسانیهای سپیدهدم
کروم ۱۳۵
- اجازه ایجاد طرح خط لوله با طرح گروه اتصال تهی
- اجازه دهید نماها از مرزهای اهداف رندر فراتر روند
- دسترسی آسانتر به حالت سازگاری آزمایشی در اندروید
- حذف محدودیت maxInterStageShaderComponents
- بهروزرسانیهای سپیدهدم
کروم ۱۳۴
- بهبود حجم کار یادگیری ماشین با زیرگروهها
- حذف پشتیبانی از انواع بافتهای قابل فیلتر شدن با شناور به عنوان بافتهای قابل ترکیب
- بهروزرسانیهای سپیدهدم
کروم ۱۳۳
- فرمتهای رأس اضافی unorm8x4-bgra و 1-component
- اجازه دهید محدودیتهای ناشناخته با مقدار نامشخص درخواست شوند
- تغییرات قوانین ترازبندی WGSL
- افزایش عملکرد WGSL با حذف
- استفاده از VideoFrame displaySize برای بافتهای خارجی
- مدیریت تصاویر با جهتهای غیر پیشفرض با استفاده از copyExternalImageToTexture
- بهبود تجربه توسعهدهنده
- فعال کردن حالت سازگاری با featureLevel
- پاکسازی ویژگیهای زیرگروه آزمایشی
- محدودیت maxInterStageShaderComponents را منسوخ کنید
- بهروزرسانیهای سپیدهدم
کروم ۱۳۲
- استفاده از نمای بافت
- ترکیب بافتهای شناور ۳۲ بیتی
- ویژگی اطلاعات آداپتور GPUDevice
- پیکربندی زمینه بوم با قالب نامعتبر، خطای جاوا اسکریپت ایجاد میکند
- فیلتر کردن محدودیتهای نمونهبرداری روی بافتها
- آزمایش زیرگروههای توسعهیافته
- بهبود تجربه توسعهدهنده
- پشتیبانی آزمایشی از فرمتهای بافت نرمالشدهی ۱۶ بیتی
- بهروزرسانیهای سپیدهدم
کروم ۱۳۱
- فواصل برش در WGSL
- تابع ()GPUCanvasContext getConfiguration
- اشکال هندسی اولیه نقطه و خط نباید دارای بایاس عمق باشند.
- توابع داخلی اسکن فراگیر برای زیرگروهها
- پشتیبانی آزمایشی از چند ترسیم غیرمستقیم
- گزینه کامپایل ماژول شیدر با محاسبات دقیق
- حذف تابع requestAdapterInfo() در کارت گرافیک GPUAdapter
- بهروزرسانیهای سپیدهدم
کروم ۱۳۰
- ترکیب دو منبعی
- بهبود زمان کامپایل شیدر در Metal
- منسوخ شدن تابع GPUAdapter requestAdapterInfo()
- بهروزرسانیهای سپیدهدم
کروم ۱۲۹
کروم ۱۲۸
- آزمایش با زیرگروهها
- منسوخ کردن تنظیم بایاس عمق برای خطوط و نقاط
- اگر preventDefault خطای ضبط نشده را پنهان کنید، هشدار DevTools
- ابتدا نمونهبرداری درونیابی WGSL و یا
- بهروزرسانیهای سپیدهدم
کروم ۱۲۷
- پشتیبانی آزمایشی از OpenGL ES در اندروید
- ویژگی اطلاعات GPUAdapter
- بهبودهای تعامل وباسمبلی
- بهبود خطاهای انکودر فرمان
- بهروزرسانیهای سپیدهدم
کروم ۱۲۶
- افزایش محدودیت maxTextureArrayLayers
- بهینهسازی آپلود بافر برای بکاند ولکان
- بهبود زمان کامپایل سایهزن
- بافرهای دستور ارسالی باید منحصر به فرد باشند
- بهروزرسانیهای سپیدهدم
کروم ۱۲۵
کروم ۱۲۴
- بافتهای ذخیرهسازی فقط خواندنی و خواندنی-نوشتنی
- پشتیبانی از کارگران خدماتی و کارگران اشتراکی
- ویژگیهای اطلاعات آداپتور جدید
- رفع اشکالات
- بهروزرسانیهای سپیدهدم
کروم ۱۲۳
- پشتیبانی از توابع داخلی DP4a در WGSL
- پارامترهای اشارهگر بدون محدودیت در WGSL
- شکر نحوی برای ارجاعزدایی از ترکیبات در WGSL
- حالت فقط خواندنی جداگانه برای استنسیل و جنبههای عمق
- بهروزرسانیهای سپیدهدم
کروم ۱۲۲
- گسترش دسترسی با حالت سازگاری (ویژگی در حال توسعه)
- افزایش محدودیت maxVertexAttributes
- بهروزرسانیهای سپیدهدم
کروم ۱۲۱
- پشتیبانی از WebGPU در اندروید
- برای کامپایل سایهزن در ویندوز، به جای FXC از DXC استفاده کنید
- کوئریهای برچسب زمانی در پاسهای محاسبه و رندر
- نقاط ورودی پیشفرض به ماژولهای سایهزن
- پشتیبانی از display-p3 به عنوان فضای رنگی GPUExternalTexture
- اطلاعات مربوط به تودههای حافظه
- بهروزرسانیهای سپیدهدم
کروم ۱۲۰
- پشتیبانی از مقادیر ممیز شناور ۱۶ بیتی در WGSL
- محدودیتها را کنار بزنید
- تغییرات در حالت عمق شابلون
- بهروزرسانیهای اطلاعات آداپتور
- کوئستیزاسیون کوئستسنجی کوئستسنجی کوئستسنجی با مهر زمانی
- ویژگیهای نظافت بهاری
کروم ۱۱۹
- بافتهای شناور ۳۲ بیتی قابل فیلتر
- قالب رأس unorm10-10-10-2
- فرمت بافت rgb10a2uint
- بهروزرسانیهای سپیدهدم
کروم ۱۱۸
- پشتیبانی از HTMLImageElement و ImageData در
copyExternalImageToTexture()
- پشتیبانی آزمایشی از بافت ذخیرهسازی خواندنی-نوشتنی و فقط خواندنی
- بهروزرسانیهای سپیدهدم
کروم ۱۱۷
- بافر رأس را غیرفعال کنید
- گروه اتصال را غیرفعال کنید
- خطاهای ناشی از ایجاد خط لوله ناهمگام را هنگام از دست رفتن دستگاه، بیصدا کنید
- بهروزرسانیهای ایجاد ماژول سایهزن SPIR-V
- بهبود تجربه توسعهدهنده
- ذخیره سازی خطوط لوله با طرح بندی خودکار تولید شده
- بهروزرسانیهای سپیدهدم
کروم ۱۱۶
- ادغام WebCodecs
- دستگاه گمشده توسط
requestDevice()
از نوع GPUAdapter بازگردانده میشود. - اگر تابع
importExternalTexture()
فراخوانی شود، پخش ویدیو روان خواهد بود. - انطباق با مشخصات
- بهبود تجربه توسعهدهنده
- بهروزرسانیهای سپیدهدم
کروم ۱۱۵
- افزونههای زبان WGSL پشتیبانیشده
- پشتیبانی آزمایشی از Direct3D 11
- به طور پیش فرض از پردازنده گرافیکی مجزا با برق AC استفاده کنید
- بهبود تجربه توسعهدهنده
- بهروزرسانیهای سپیدهدم
کروم ۱۱۴
- بهینهسازی جاوا اسکریپت
- تابع ()getCurrentTexture روی بوم پیکربندی نشده، خطای InvalidStateError را نمایش میدهد.
- بهروزرسانیهای WGSL
- بهروزرسانیهای سپیدهدم