توابع داخلی DP4a در WGSL پشتیبانی می کند
DP4a (محصول نقطهای از 4 عنصر و انباشته) به مجموعهای از دستورالعملهای GPU اشاره دارد که معمولاً در استنتاج یادگیری عمیق برای کوانتیزاسیون استفاده میشوند. برای تسریع در محاسبه چنین مدلهای کوانتیزهشده int8، محصولات 8 بیتی نقطه صحیح را به طور موثر انجام میدهد. این می تواند (تا 75٪) از حافظه و پهنای باند شبکه را ذخیره کند و عملکرد هر مدل یادگیری ماشینی را در استنتاج در مقایسه با نسخه f32 آنها بهبود بخشد. در نتیجه، اکنون به شدت در بسیاری از چارچوبهای AI محبوب استفاده میشود.
هنگامی که پسوند زبان WGSL "packed_4x8_integer_dot_product"
در navigator.gpu.wgslLanguageFeatures
وجود دارد، اکنون می توانید از اسکالرهای عدد صحیح 32 بیتی که بردارهای 4 جزء اعداد صحیح 8 بیتی را بسته بندی می کنند، به عنوان ورودی برای کدهای محصول نقطه ای در WG خود استفاده کنید. dot4U8Packed
و توابع داخلی dot4I8Packed
. همچنین میتوانید از دستورالعملهای بستهبندی و باز کردن بستهبندی با بردارهای 4 جزء اعداد صحیح 8 بیتی با توابع داخلی pack4xI8
، pack4xU8
، pack4xI8Clamp
، pack4xU8Clamp
، unpack4xI8
، و unpack4xU8
WGSL استفاده کنید.
توصیه میشود از دستورالعمل نیازمندیها برای سیگنال دادن به پتانسیل غیرقابلحملبودن با 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
به توابع اعلام شده توسط کاربر.ارسال اشاره گر به اعضای ساختار و عناصر آرایه به توابع اعلام شده توسط کاربر.
Pointers As Function Parameters | تور WGSL برای کسب اطلاعات بیشتر در مورد آن.
این ویژگی را می توان با استفاده از navigator.gpu.wgslLanguageFeatures
شناسایی کرد. توصیه میشود همیشه از یک دستورالعمل نیازمند برای سیگنال دادن به پتانسیل غیرقابل حمل بودن با 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
" آن آرایه در آن ذخیره شده است.
توصیه میشود از یک دستورالعمل نیازمندی برای سیگنالدهی پتانسیل غیرقابلحملپذیری با 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.
}`
});
حالت فقط خواندنی را برای جنبه های استنسیل و عمق جدا کنید
پیش از این، پیوستهای عمقی فقط خواندنی در پاسهای رندر نیاز به هر دو جنبه (عمق و استنسیل) داشتند که فقط خواندنی باشند. این محدودیت برداشته شده است. اکنون می توانید از جنبه عمقی به صورت فقط خواندنی استفاده کنید، برای مثال برای ردیابی سایه تماس، در حالی که بافر استنسیل برای شناسایی پیکسل ها برای پردازش بیشتر نوشته شده است. رجوع به شماره سپیده دم: 2146 شود.
به روز رسانی سحر
پاسخ تماس خطای ضبط نشده با wgpuDeviceSetUncapturedErrorCallback()
اکنون بلافاصله پس از وقوع خطا فراخوانی می شود. این همان چیزی است که توسعه دهندگان به طور مداوم برای اشکال زدایی انتظار دارند و می خواهند. تغییر سپیده دم: 173620 را ببینید.
متد wgpuSurfaceGetPreferredFormat()
از webgpu.h API پیاده سازی شده است. رجوع به شماره فجر: 1362 شود.
این تنها برخی از نکات کلیدی را پوشش می دهد. فهرست جامع تعهدات را بررسی کنید.
چه چیزی در WebGPU جدید است
فهرستی از همه چیزهایی که در سری What's New in WebGPU پوشش داده شده است.
کروم 131
- فاصله های کلیپ در WGSL
- GPUCanvasContext getConfiguration()
- نقطه و خط اولیه نباید بایاس عمق داشته باشند
- توابع داخلی اسکن جامع برای زیرگروه ها
- پشتیبانی آزمایشی برای چند قرعه کشی غیر مستقیم
- گزینه کامپایل ماژول Shader ریاضی سخت
- حذف GPUAdapter requestAdapterInfo()
- به روز رسانی سحر
کروم 130
- ترکیب منبع دوگانه
- بهبود زمان کامپایل شیدر در فلز
- منسوخ شدن GPUAdapter requestAdapterInfo()
- به روز رسانی سحر
کروم 129
کروم 128
- آزمایش با زیر گروه ها
- بایاس عمق تنظیم را برای خطوط و نقاط منسوخ کنید
- در صورت جلوگیری از Default، هشدار DevTools خطای ضبط نشده را مخفی کنید
- WGSL ابتدا نمونهگیری را درونیابی میکند و هر کدام را
- به روز رسانی سحر
کروم 127
- پشتیبانی آزمایشی از OpenGL ES در اندروید
- ویژگی اطلاعات GPUAdapter
- بهبودهای WebAssembly interop
- خطاهای رمزگذار فرمان بهبود یافته است
- به روز رسانی سحر
کروم 126
- حد maxTextureArrayLayers را افزایش دهید
- بهینه سازی بارگذاری بافر برای باطن Vulkan
- بهبود زمان کامپایل شیدر
- بافرهای فرمان ارسالی باید منحصر به فرد باشند
- به روز رسانی سحر
کروم 125
کروم 124
- بافت های ذخیره سازی فقط خواندنی و خواندنی و نوشتنی
- پشتیبانی کارگران خدماتی و کارگران مشترک
- ویژگی های اطلاعات آداپتور جدید
- رفع اشکال
- به روز رسانی سحر
کروم 123
- توابع داخلی DP4a در WGSL پشتیبانی می کند
- پارامترهای اشاره گر نامحدود در WGSL
- قند نحوی برای عدم ارجاع کامپوزیت ها در WGSL
- حالت فقط خواندنی را برای جنبه های استنسیل و عمق جدا کنید
- به روز رسانی سحر
کروم 122
- گسترش دسترسی با حالت سازگاری (ویژگی در حال توسعه)
- حد maxVertexAttributes را افزایش دهید
- به روز رسانی سحر
کروم 121
- پشتیبانی از WebGPU در اندروید
- برای کامپایل شیدر در ویندوز به جای FXC از DXC استفاده کنید
- پرس و جوهای مهر زمانی در گذرنامه های محاسبه و ارائه
- نقاط ورودی پیش فرض به ماژول های سایه زن
- پشتیبانی از display-p3 به عنوان فضای رنگی GPUExternalTexture
- اطلاعات انبوه حافظه
- به روز رسانی سحر
کروم 120
- پشتیبانی از مقادیر ممیز شناور 16 بیتی در WGSL
- محدودیت ها را فشار دهید
- تغییرات در حالت عمقی-استنسیل
- به روز رسانی اطلاعات آداپتور
- کوانتیزاسیون پرس و جوهای مهر زمانی
- ویژگی های تمیز کردن فنری
کروم 119
کروم 118
- پشتیبانی از HTMLImageElement و ImageData در
copyExternalImageToTexture()
- پشتیبانی آزمایشی از بافت ذخیرهسازی خواندنی-نوشتنی و فقط خواندنی
- به روز رسانی سحر
کروم 117
- بافر راس را تنظیم نکنید
- گروه bind را تنظیم نکنید
- هنگام گم شدن دستگاه، خطاهای ایجاد خط لوله ناهمگام را خاموش کنید
- به روز رسانی های ایجاد ماژول سایه زن SPIR-V
- بهبود تجربه توسعه دهندگان
- ذخیره سازی خطوط لوله با طرح تولید خودکار
- به روز رسانی سحر
کروم 116
- یکپارچه سازی WebCodecs
- دستگاه گمشده توسط GPUAdapter
requestDevice()
برگردانده شد - در صورت فراخوانی
importExternalTexture()
پخش ویدیو را روان نگه دارید - مطابقت با مشخصات
- بهبود تجربه توسعه دهندگان
- به روز رسانی سحر
کروم 115
- پشتیبانی از پسوندهای زبان WGSL
- پشتیبانی آزمایشی از Direct3D 11
- GPU گسسته را به طور پیشفرض با برق AC دریافت کنید
- بهبود تجربه توسعه دهندگان
- به روز رسانی سحر
کروم 114
- بهینه سازی جاوا اسکریپت
- getCurrentTexture() روی بوم پیکربندی نشده خطای InvalidState را ایجاد می کند
- به روز رسانی WGSL
- به روز رسانی سحر
کروم 113
،توابع داخلی DP4a در WGSL پشتیبانی می کند
DP4a (محصول نقطهای از 4 عنصر و انباشته) به مجموعهای از دستورالعملهای GPU اشاره دارد که معمولاً در استنتاج یادگیری عمیق برای کوانتیزاسیون استفاده میشوند. برای تسریع در محاسبه چنین مدلهای کوانتیزهشده int8، محصولات 8 بیتی نقطه صحیح را به طور موثر انجام میدهد. این می تواند (تا 75٪) از حافظه و پهنای باند شبکه را ذخیره کند و عملکرد هر مدل یادگیری ماشینی را در استنتاج در مقایسه با نسخه f32 آنها بهبود بخشد. در نتیجه، اکنون به شدت در بسیاری از چارچوبهای AI محبوب استفاده میشود.
هنگامی که پسوند زبان WGSL "packed_4x8_integer_dot_product"
در navigator.gpu.wgslLanguageFeatures
وجود دارد، اکنون می توانید از اسکالرهای عدد صحیح 32 بیتی که بردارهای 4 جزء اعداد صحیح 8 بیتی را بسته بندی می کنند، به عنوان ورودی برای کدهای محصول نقطه ای در WG خود استفاده کنید. dot4U8Packed
و توابع داخلی dot4I8Packed
. همچنین میتوانید از دستورالعملهای بستهبندی و باز کردن بستهبندی با بردارهای 4 جزء اعداد صحیح 8 بیتی با توابع داخلی pack4xI8
، pack4xU8
، pack4xI8Clamp
، pack4xU8Clamp
، unpack4xI8
، و unpack4xU8
WGSL استفاده کنید.
توصیه میشود از دستورالعمل نیازمندیها برای سیگنال دادن به پتانسیل غیرقابلحملبودن با 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
به توابع اعلام شده توسط کاربر.ارسال اشاره گر به اعضای ساختار و عناصر آرایه به توابع اعلام شده توسط کاربر.
Pointers As Function Parameters | تور WGSL برای کسب اطلاعات بیشتر در مورد آن.
این ویژگی را می توان با استفاده از navigator.gpu.wgslLanguageFeatures
شناسایی کرد. توصیه میشود همیشه از یک دستورالعمل نیازمند برای سیگنال دادن به پتانسیل غیرقابل حمل بودن با 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
" آن آرایه در آن ذخیره شده است.
توصیه میشود از یک دستورالعمل نیازمندی برای سیگنالدهی پتانسیل غیرقابلحملپذیری با 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.
}`
});
حالت فقط خواندنی را برای جنبه های استنسیل و عمق جدا کنید
پیش از این، پیوستهای عمقی فقط خواندنی در پاسهای رندر نیاز به هر دو جنبه (عمق و استنسیل) داشتند که فقط خواندنی باشند. این محدودیت برداشته شده است. اکنون می توانید از جنبه عمقی به صورت فقط خواندنی استفاده کنید، برای مثال برای ردیابی سایه تماس، در حالی که بافر استنسیل برای شناسایی پیکسل ها برای پردازش بیشتر نوشته شده است. رجوع به شماره سپیده دم: 2146 شود.
به روز رسانی سحر
پاسخ تماس خطای ضبط نشده با wgpuDeviceSetUncapturedErrorCallback()
اکنون بلافاصله پس از وقوع خطا فراخوانی می شود. این همان چیزی است که توسعه دهندگان به طور مداوم برای اشکال زدایی انتظار دارند و می خواهند. تغییر سپیده دم: 173620 را ببینید.
متد wgpuSurfaceGetPreferredFormat()
از webgpu.h API پیاده سازی شده است. رجوع به شماره فجر: 1362 شود.
این تنها برخی از نکات کلیدی را پوشش می دهد. فهرست جامع تعهدات را بررسی کنید.
چه چیزی در WebGPU جدید است
فهرستی از همه چیزهایی که در سری What's New in WebGPU پوشش داده شده است.
کروم 131
- فاصله های کلیپ در WGSL
- GPUCanvasContext getConfiguration()
- نقطه و خط اولیه نباید بایاس عمق داشته باشند
- توابع داخلی اسکن جامع برای زیرگروه ها
- پشتیبانی آزمایشی برای چند قرعه کشی غیر مستقیم
- گزینه کامپایل ماژول Shader ریاضی سخت
- حذف GPUAdapter requestAdapterInfo()
- به روز رسانی سحر
کروم 130
- ترکیب منبع دوگانه
- بهبود زمان کامپایل شیدر در فلز
- منسوخ شدن GPUAdapter requestAdapterInfo()
- به روز رسانی سحر
کروم 129
کروم 128
- آزمایش با زیر گروه ها
- بایاس عمق تنظیم را برای خطوط و نقاط منسوخ کنید
- در صورت جلوگیری از Default، هشدار DevTools خطای ضبط نشده را مخفی کنید
- WGSL ابتدا نمونهگیری را درونیابی میکند و هر کدام را
- به روز رسانی سحر
کروم 127
- پشتیبانی آزمایشی از OpenGL ES در اندروید
- ویژگی اطلاعات GPUAdapter
- بهبودهای WebAssembly interop
- خطاهای رمزگذار فرمان بهبود یافته است
- به روز رسانی سحر
کروم 126
- حد maxTextureArrayLayers را افزایش دهید
- بهینه سازی بارگذاری بافر برای باطن Vulkan
- بهبود زمان کامپایل شیدر
- بافرهای فرمان ارسالی باید منحصر به فرد باشند
- به روز رسانی سحر
کروم 125
کروم 124
- بافت های ذخیره سازی فقط خواندنی و خواندنی و نوشتنی
- پشتیبانی کارگران خدماتی و کارگران مشترک
- ویژگی های اطلاعات آداپتور جدید
- رفع اشکال
- به روز رسانی سحر
کروم 123
- توابع داخلی DP4a در WGSL پشتیبانی می کند
- پارامترهای اشاره گر نامحدود در WGSL
- قند نحوی برای عدم ارجاع کامپوزیت ها در WGSL
- حالت فقط خواندنی را برای جنبه های استنسیل و عمق جدا کنید
- به روز رسانی سحر
کروم 122
- گسترش دسترسی با حالت سازگاری (ویژگی در حال توسعه)
- حد maxVertexAttributes را افزایش دهید
- به روز رسانی سحر
کروم 121
- پشتیبانی از WebGPU در اندروید
- برای کامپایل شیدر در ویندوز به جای FXC از DXC استفاده کنید
- پرس و جوهای مهر زمانی در گذرنامه های محاسبه و ارائه
- نقاط ورودی پیش فرض به ماژول های سایه زن
- پشتیبانی از display-p3 به عنوان فضای رنگی GPUExternalTexture
- اطلاعات انبوه حافظه
- به روز رسانی سحر
کروم 120
- پشتیبانی از مقادیر ممیز شناور 16 بیتی در WGSL
- محدودیت ها را فشار دهید
- تغییرات در حالت عمقی-استنسیل
- به روز رسانی اطلاعات آداپتور
- کوانتیزاسیون پرس و جوهای مهر زمانی
- ویژگی های تمیز کردن فنری
کروم 119
کروم 118
- پشتیبانی از HTMLImageElement و ImageData در
copyExternalImageToTexture()
- پشتیبانی آزمایشی از بافت ذخیرهسازی خواندنی-نوشتنی و فقط خواندنی
- به روز رسانی سحر
کروم 117
- بافر راس را تنظیم نکنید
- گروه bind را تنظیم نکنید
- هنگام گم شدن دستگاه، خطاهای ایجاد خط لوله ناهمگام را خاموش کنید
- به روز رسانی های ایجاد ماژول سایه زن SPIR-V
- بهبود تجربه توسعه دهندگان
- ذخیره سازی خطوط لوله با طرح تولید خودکار
- به روز رسانی سحر
کروم 116
- یکپارچه سازی WebCodecs
- دستگاه گمشده توسط GPUAdapter
requestDevice()
برگردانده شد - در صورت فراخوانی
importExternalTexture()
پخش ویدیو را روان نگه دارید - مطابقت با مشخصات
- بهبود تجربه توسعه دهندگان
- به روز رسانی سحر
کروم 115
- پشتیبانی از پسوندهای زبان WGSL
- پشتیبانی آزمایشی از Direct3D 11
- GPU گسسته را به طور پیشفرض با برق AC دریافت کنید
- بهبود تجربه توسعه دهندگان
- به روز رسانی سحر
کروم 114
- بهینه سازی جاوا اسکریپت
- getCurrentTexture() روی بوم پیکربندی نشده خطای InvalidState را ایجاد می کند
- به روز رسانی WGSL
- به روز رسانی سحر