WGSL-এ 16-বিট ফ্লোটিং-পয়েন্ট মানগুলির জন্য সমর্থন
WGSL-এ, f16
প্রকার হল IEEE-754 বাইনারি16 (অর্ধ নির্ভুলতা) বিন্যাসের 16-বিট ফ্লোটিং-পয়েন্ট মানগুলির সেট। এর মানে হল যে এটি একটি ফ্লোটিং-পয়েন্ট সংখ্যা উপস্থাপন করতে 16 বিট ব্যবহার করে, যা প্রচলিত একক-নির্ভুল ফ্লোটিং-পয়েন্ট ( f32
) এর জন্য 32 বিটের বিপরীতে। এই ছোট আকারটি উল্লেখযোগ্য কর্মক্ষমতা উন্নতির দিকে নিয়ে যেতে পারে, বিশেষ করে যখন প্রচুর পরিমাণে ডেটা প্রক্রিয়া করা হয়।
তুলনা করার জন্য, একটি Apple M1 Pro ডিভাইসে, WebLLM চ্যাট ডেমোতে ব্যবহৃত Llama2 7B মডেলগুলির f16
বাস্তবায়ন f32
বাস্তবায়নের তুলনায় উল্লেখযোগ্যভাবে দ্রুত, প্রিফিল গতিতে 28% উন্নতি এবং ডিকোডিং গতিতে 41% উন্নতি সহ যেমন দেখানো হয়েছে নিম্নলিখিত স্ক্রিনশট।
সমস্ত GPU 16-বিট ফ্লোটিং-পয়েন্ট মান সমর্থন করে না। যখন একটি GPUAdapter
এ "shader-f16"
বৈশিষ্ট্যটি উপলব্ধ থাকে, আপনি এখন এই বৈশিষ্ট্যটি সহ একটি GPUDevice
অনুরোধ করতে পারেন এবং একটি WGSL shader মডিউল তৈরি করতে পারেন যা অর্ধ-নির্ভুল ফ্লোটিং-পয়েন্ট প্রকার f16
এর সুবিধা নেয়। এই ধরনের WGSL শেডার মডিউলে ব্যবহার করার জন্য বৈধ শুধুমাত্র যদি আপনি f16 সক্ষম করে f16
WGSL এক্সটেনশন enable f16;
. অন্যথায়, createShaderModule() একটি বৈধতা ত্রুটি তৈরি করবে। নিচের ন্যূনতম উদাহরণটি দেখুন এবং ভোরের সংখ্যাটি দেখুন:1510 ।
const adapter = await navigator.gpu.requestAdapter();
if (!adapter.features.has("shader-f16")) {
throw new Error("16-bit floating-point value support is not available");
}
// Explicitly request 16-bit floating-point value support.
const device = await adapter.requestDevice({
requiredFeatures: ["shader-f16"],
});
const code = `
enable f16;
@compute @workgroup_size(1)
fn main() {
const c : vec3h = vec3<f16>(1.0h, 2.0h, 3.0h);
}
`;
const shaderModule = device.createShaderModule({ code });
// Create a compute pipeline with this shader module
// and run the shader on the GPU...
নিম্নলিখিত স্নিপেটে দেখানো "shader-f16"
বৈশিষ্ট্য সমর্থনের উপর নির্ভর করে একটি alias
সহ WGSL শেডার মডিউল কোডে f16
এবং f32
উভয় প্রকারকে সমর্থন করা সম্ভব।
const adapter = await navigator.gpu.requestAdapter();
const hasShaderF16 = adapter.features.has("shader-f16");
const device = await adapter.requestDevice({
requiredFeatures: hasShaderF16 ? ["shader-f16"] : [],
});
const header = hasShaderF16
? `enable f16;
alias min16float = f16;`
: `alias min16float = f32;`;
const code = `
${header}
@compute @workgroup_size(1)
fn main() {
const c = vec3<min16float>(1.0, 2.0, 3.0);
}
`;
সীমা ধাক্কা
রেন্ডার পাইপলাইন আউটপুট ডেটার একটি নমুনা (পিক্সেল বা সাবপিক্সেল) ধরে রাখতে প্রয়োজনীয় সর্বাধিক সংখ্যক বাইট, সমস্ত রঙের সংযুক্তি জুড়ে, ডিফল্টরূপে 32 বাইট। maxColorAttachmentBytesPerSample
সীমা ব্যবহার করে 64 পর্যন্ত অনুরোধ করা সম্ভব। নিম্নলিখিত উদাহরণ দেখুন এবং ইস্যুর ডন:2036 ।
const adapter = await navigator.gpu.requestAdapter();
if (adapter.limits.maxColorAttachmentBytesPerSample < 64) {
// When the desired limit isn't supported, take action to either fall back to
// a code path that does not require the higher limit or notify the user that
// their device does not meet minimum requirements.
}
// Request highest limit of max color attachments bytes per sample.
const device = await adapter.requestDevice({
requiredLimits: { maxColorAttachmentBytesPerSample: 64 },
});
আন্তঃ-পর্যায় যোগাযোগের জন্য ব্যবহৃত maxInterStageShaderVariables
এবং maxInterStageShaderComponents
সীমা সমস্ত প্ল্যাটফর্মে বৃদ্ধি করা হয়েছে। বিস্তারিত জানার জন্য ভোরের সংখ্যা: 1448 দেখুন।
প্রতিটি শেডার পর্যায়ের জন্য, একটি পাইপলাইন লেআউট জুড়ে বাইন্ড গ্রুপ লেআউট এন্ট্রির সর্বাধিক সংখ্যা যা স্টোরেজ বাফারগুলি ডিফল্টরূপে 8। maxStorageBuffersPerShaderStage
সীমা ব্যবহার করে এখন 10 পর্যন্ত অনুরোধ করা সম্ভব। দেখুন ভোরের সংখ্যা: 2159 ।
একটি নতুন maxBindGroupsPlusVertexBuffers
সীমা যোগ করা হয়েছে। এটি সর্বোচ্চ সংখ্যক বাইন্ড গ্রুপ এবং ভার্টেক্স বাফার স্লটগুলি নিয়ে একযোগে ব্যবহৃত হয়, সর্বোচ্চ সূচকের নীচে যে কোনও খালি স্লট গণনা করে। এর ডিফল্ট মান হল 24। দেখুন ইস্যুর ডন:1849 ।
গভীরতা-স্টেনসিল অবস্থায় পরিবর্তন
বিকাশকারীর অভিজ্ঞতা উন্নত করতে, ডেপথ-স্টেনসিল স্টেট depthWriteEnabled
এবং depthCompare
অ্যাট্রিবিউট সব সময় আর প্রয়োজন হয় না: depthWriteEnabled
শুধুমাত্র গভীরতা সহ ফরম্যাটের জন্য প্রয়োজন, এবং একেবারে ব্যবহার না করা হলে depthCompare
প্রয়োজন হয় না। দেখুন ভোরের সংখ্যা: 2132 ।
অ্যাডাপ্টারের তথ্য আপডেট
যখন ব্যবহারকারী chrome://flags/#enable-webgpu-developer-features
এ "WebGPU বিকাশকারী বৈশিষ্ট্য" পতাকা সক্ষম করে তখন নন-স্ট্যান্ডার্ড type
এবং backend
অ্যাডাপ্টারের তথ্য বৈশিষ্ট্যগুলি এখন requestAdapterInfo() কল করার সময় উপলব্ধ। type
হতে পারে "বিচ্ছিন্ন GPU", "একীভূত GPU", "CPU", বা "অজানা"। backend
হয় "WebGPU", "D3D11", "D3D12", "metal", "vulkan", "openGL", "openGLES", অথবা "null"। দেখুন প্রভাত সংখ্যা: 2112 এবং সংখ্যা ভোর: 2107 ।
requestAdapterInfo() এ ঐচ্ছিক unmaskHints
তালিকা প্যারামিটারটি সরানো হয়েছে। দেখুন ভোরের সংখ্যা: 1427 ।
টাইমস্ট্যাম্প ক্যোয়ান্টাইজেশন
টাইমস্ট্যাম্প প্রশ্নগুলি অ্যাপ্লিকেশনগুলিকে ন্যানোসেকেন্ড নির্ভুলতার সাথে GPU কমান্ডের কার্যকর করার সময় পরিমাপ করার অনুমতি দেয়৷ যাইহোক, WebGPU স্পেসিফিকেশন টাইমস্ট্যাম্প প্রশ্নগুলিকে টাইমিং অ্যাটাকের উদ্বেগের কারণে ঐচ্ছিক করে তোলে। ক্রোম টিম বিশ্বাস করে যে টাইমস্ট্যাম্প ক্যোয়ান্টাইজিং 100 মাইক্রোসেকেন্ডে রেজোলিউশন কমিয়ে নির্ভুলতা এবং নিরাপত্তার মধ্যে একটি ভাল সমঝোতা প্রদান করে৷ দেখুন ভোরের সংখ্যা: 1800 ।
ক্রোমে, ব্যবহারকারীরা chrome://flags/#enable-webgpu-developer-features
এ "WebGPU বিকাশকারী বৈশিষ্ট্য" পতাকা সক্ষম করে টাইমস্ট্যাম্প কোয়ান্টাইজেশন অক্ষম করতে পারেন। মনে রাখবেন যে এই পতাকা একা "timestamp-query"
বৈশিষ্ট্য সক্রিয় করে না। এটির বাস্তবায়ন এখনও পরীক্ষামূলক এবং তাই chrome://flags/#enable-unsafe-webgpu
এ "অনিরাপদ WebGPU সমর্থন" পতাকা প্রয়োজন।
ডন-এ, "টাইমস্ট্যাম্প_কোয়ান্টাইজেশন" নামে একটি নতুন ডিভাইস টগল যোগ করা হয়েছে এবং ডিফল্টরূপে সক্রিয় করা হয়েছে। নিম্নলিখিত স্নিপেট আপনাকে দেখায় কিভাবে একটি ডিভাইসের অনুরোধ করার সময় টাইমস্ট্যাম্প পরিমাপ ছাড়াই পরীক্ষামূলক "টাইমস্ট্যাম্প-কোয়েরি" বৈশিষ্ট্যটিকে অনুমতি দিতে হয়৷
wgpu::DawnTogglesDescriptor deviceTogglesDesc = {};
const char* allowUnsafeApisToggle = "allow_unsafe_apis";
deviceTogglesDesc.enabledToggles = &allowUnsafeApisToggle;
deviceTogglesDesc.enabledToggleCount = 1;
const char* timestampQuantizationToggle = "timestamp_quantization";
deviceTogglesDesc.disabledToggles = ×tampQuantizationToggle;
deviceTogglesDesc.disabledToggleCount = 1;
wgpu::DeviceDescriptor desc = {.nextInChain = &deviceTogglesDesc};
// Request a device with no timestamp quantization.
myAdapter.RequestDevice(&desc, myCallback, myUserData);
বসন্ত-পরিষ্কার বৈশিষ্ট্য
পরীক্ষামূলক "timestamp-query-inside-passes" বৈশিষ্ট্যটির নাম পরিবর্তন করে "chromium-experimental-timestamp-query-inside-passes" করা হয়েছে যাতে ডেভেলপারদের কাছে এটা স্পষ্ট করা যায় যে এই বৈশিষ্ট্যটি পরীক্ষামূলক এবং আপাতত শুধুমাত্র Chromium-ভিত্তিক ব্রাউজারগুলিতে উপলব্ধ। . দেখুন ভোরের সংখ্যা: 1193 ।
পরীক্ষামূলক "পাইপলাইন-পরিসংখ্যান-ক্যোয়ারী" বৈশিষ্ট্য, যা শুধুমাত্র আংশিকভাবে প্রয়োগ করা হয়েছিল, সরিয়ে দেওয়া হয়েছে কারণ এটি আর বিকাশ করা হচ্ছে না। ক্রোমিয়াম সংখ্যা দেখুন:1177506 ।
এটি শুধুমাত্র কিছু মূল হাইলাইট কভার করে। কমিটের সম্পূর্ণ তালিকা দেখুন।
WebGPU-তে নতুন কি আছে
ওয়েবজিপিইউ সিরিজে নতুন কী কভার করা হয়েছে তার একটি তালিকা।
ক্রোম 131
- WGSL এ ক্লিপ দূরত্ব
- GPUCanvasContext getConfiguration()
- বিন্দু এবং লাইন আদিম গভীরতা পক্ষপাত থাকতে হবে না
- সাবগ্রুপগুলির জন্য অন্তর্নির্মিত ফাংশন অন্তর্ভুক্ত স্ক্যান
- মাল্টি-ড্র পরোক্ষ জন্য পরীক্ষামূলক সমর্থন
- Shader মডিউল সংকলন বিকল্প কঠোর গণিত
- GPUAdapter requestAdapterInfo() সরান
- ভোরের আপডেট
ক্রোম 130
- দ্বৈত উৎস মিশ্রন
- ধাতুতে Shader সংকলন সময় উন্নতি
- GPUAdapter রিকোয়েস্ট অ্যাডাপ্টারইনফো() এর অবচয়
- ভোরের আপডেট
ক্রোম 129
ক্রোম 128
- সাবগ্রুপগুলির সাথে পরীক্ষা করা হচ্ছে
- লাইন এবং পয়েন্টের জন্য গভীরতার পক্ষপাত সেটিং বাতিল করুন
- ডিফল্ট প্রতিরোধ করলে ক্যাপচারড ত্রুটি DevTools সতর্কতা লুকান
- WGSL ইন্টারপোলেট স্যাম্পলিং প্রথমে এবং হয়
- ভোরের আপডেট
ক্রোম 127
- অ্যান্ড্রয়েডে OpenGL ES-এর জন্য পরীক্ষামূলক সমর্থন
- GPUAdapter তথ্য বৈশিষ্ট্য
- WebAssembly ইন্টারপ উন্নতি
- উন্নত কমান্ড এনকোডার ত্রুটি
- ভোরের আপডেট
ক্রোম 126
- maxTextureArrayLayers সীমা বাড়ান
- Vulkan ব্যাকএন্ডের জন্য বাফার আপলোড অপ্টিমাইজেশান
- Shader সংকলন সময় উন্নতি
- জমা দেওয়া কমান্ড বাফার অনন্য হতে হবে
- ভোরের আপডেট
ক্রোম 125
ক্রোম 124
- রিড-ওনলি এবং রিড-রাইট স্টোরেজ টেক্সচার
- সেবা কর্মী এবং শেয়ার্ড ওয়ার্কার্স সমর্থন
- নতুন অ্যাডাপ্টারের তথ্য বৈশিষ্ট্য
- বাগ ফিক্স
- ভোরের আপডেট
ক্রোম 123
- DP4a বিল্ট-ইন ফাংশন WGSL-এ সমর্থন করে
- WGSL-এ অনিয়ন্ত্রিত পয়েন্টার পরামিতি
- WGSL-এ কম্পোজিট ডিরেফারেন্স করার জন্য সিনট্যাক্স চিনি
- স্টেনসিল এবং গভীরতার দিকগুলির জন্য আলাদা পঠনযোগ্য অবস্থা
- ভোরের আপডেট
ক্রোম 122
- সামঞ্জস্যপূর্ণ মোডের সাথে নাগাল প্রসারিত করুন (বিকাশের বৈশিষ্ট্য)
- maxVertexAttributes সীমা বাড়ান
- ভোরের আপডেট
ক্রোম 121
- অ্যান্ড্রয়েডে WebGPU সমর্থন করুন
- উইন্ডোজে শেডার কম্পাইলেশনের জন্য FXC-এর পরিবর্তে DXC ব্যবহার করুন
- গণনা এবং রেন্ডার পাসে টাইমস্ট্যাম্প প্রশ্ন
- শেডার মডিউলে ডিফল্ট এন্ট্রি পয়েন্ট
- GPUExternalTexture রঙের স্থান হিসাবে প্রদর্শন-p3 সমর্থন করে
- মেমরি হিপ তথ্য
- ভোরের আপডেট
ক্রোম 120
- WGSL-এ 16-বিট ফ্লোটিং-পয়েন্ট মানগুলির জন্য সমর্থন
- সীমা ধাক্কা
- গভীরতা-স্টেনসিল অবস্থায় পরিবর্তন
- অ্যাডাপ্টারের তথ্য আপডেট
- টাইমস্ট্যাম্প ক্যোয়ান্টাইজেশন
- বসন্ত-পরিষ্কার বৈশিষ্ট্য
ক্রোম 119
- ফিল্টারযোগ্য 32-বিট ফ্লোট টেক্সচার
- unorm10-10-10-2 শীর্ষবিন্দু বিন্যাস
- rgb10a2uint টেক্সচার ফরম্যাট
- ভোরের আপডেট
ক্রোম 118
-
copyExternalImageToTexture()
এ HTMLImageElement এবং ImageData সমর্থন - পঠন-লেখা এবং শুধুমাত্র-পঠন সঞ্চয়স্থান টেক্সচারের জন্য পরীক্ষামূলক সমর্থন
- ভোরের আপডেট
ক্রোম 117
- শীর্ষবিন্দু বাফার আনসেট করুন
- বাইন্ড গ্রুপ আনসেট করুন
- ডিভাইস হারিয়ে গেলে অ্যাসিঙ্ক পাইপলাইন তৈরির ত্রুটিগুলি নীরব করুন৷
- SPIR-V shader মডিউল তৈরির আপডেট
- বিকাশকারীর অভিজ্ঞতা উন্নত করা
- স্বয়ংক্রিয়ভাবে তৈরি লেআউট সহ পাইপলাইন ক্যাশ করা হচ্ছে
- ভোরের আপডেট
ক্রোম 116
- ওয়েবকোডেক্স ইন্টিগ্রেশন
- হারিয়ে যাওয়া ডিভাইস GPUAdapter
requestDevice()
দ্বারা ফেরত দেওয়া হয়েছে -
importExternalTexture()
বলা হলে ভিডিও প্লেব্যাক মসৃণ রাখুন - বিশেষ সঙ্গতি
- বিকাশকারীর অভিজ্ঞতা উন্নত করা
- ভোরের আপডেট
ক্রোম 115
- WGSL ভাষা এক্সটেনশন সমর্থিত
- Direct3D 11 এর জন্য পরীক্ষামূলক সমর্থন
- AC পাওয়ারে ডিফল্টরূপে আলাদা GPU পান
- বিকাশকারীর অভিজ্ঞতা উন্নত করা
- ভোরের আপডেট
ক্রোম 114
- জাভাস্ক্রিপ্ট অপ্টিমাইজ করুন
- getCurrentTexture() কনফিগার না করা ক্যানভাসে InvalidStateError নিক্ষেপ করে
- WGSL আপডেট
- ভোরের আপডেট