WebGPU ডেভেলপার বৈশিষ্ট্য

ফ্রাঁসোয়া বিউফোর্ট
François Beaufort

প্রকাশিত: ৩ জুন, ২০২৫

Chrome এর WebGPU API বাস্তবায়নে কেবলমাত্র ডেভেলপমেন্ট এবং পরীক্ষার জন্য তৈরি বৈশিষ্ট্যগুলি অন্তর্ভুক্ত রয়েছে। এই বৈশিষ্ট্যগুলি স্ট্যান্ডার্ড WebGPU স্পেসিফিকেশনের বাইরে। উৎপাদনে এই বৈশিষ্ট্যগুলি ব্যবহার করবেন না।

এই নথিতে WebGPU ডেভেলপার বৈশিষ্ট্যগুলি কীভাবে সক্ষম করবেন তার বিশদ বিবরণ দেওয়া হয়েছে এবং একটি বিস্তৃত তালিকা প্রদান করা হয়েছে।

পূর্বশর্ত

Chrome-এ WebGPU ডেভেলপার বৈশিষ্ট্যগুলি সক্ষম করতে, এই পদক্ষেপগুলি অনুসরণ করুন:

  1. chrome://flags/#enable-webgpu-developer-features এ "WebGPU ডেভেলপার বৈশিষ্ট্য" পতাকাটি সক্ষম করুন।
  2. ক্রোম ব্রাউজার পুনরায় চালু করুন।

টাইমস্ট্যাম্প কোয়েরি কোয়ান্টাইজেশন অক্ষম করুন

টাইমস্ট্যাম্প কোয়েরিগুলি WebGPU অ্যাপ্লিকেশনগুলিকে কম্পিউট এবং রেন্ডার পাসের সময় GPU কমান্ডের কার্যকর সময় সঠিকভাবে (ন্যানোসেকেন্ড পর্যন্ত) পরিমাপ করতে সক্ষম করে। GPU ওয়ার্কলোড কর্মক্ষমতা এবং আচরণ বিশ্লেষণের জন্য এই কোয়েরিগুলি অপরিহার্য। আরও বিস্তারিত জানার জন্য, কম্পিউট এবং রেন্ডার পাসের টাইমস্ট্যাম্প কোয়েরিগুলি দেখুন।

টাইমিং অ্যাটাক সংক্রান্ত উদ্বেগের কারণে, টাইমস্ট্যাম্প কোয়েরিগুলি ১০০ মাইক্রোসেকেন্ডের রেজোলিউশনে কোয়ান্টাইজ করা হয়, যা নির্ভুলতা এবং সুরক্ষার মধ্যে একটি ভাল সমঝোতা প্রদান করে। "ওয়েবজিপিইউ ডেভেলপার বৈশিষ্ট্য" পতাকা সক্রিয় করা হলে এই কোয়ান্টাইজেশন স্বয়ংক্রিয়ভাবে অক্ষম হয়ে যায়।

বর্ধিত অ্যাডাপ্টারের তথ্য

ব্যবহৃত অ্যাডাপ্টার সম্পর্কে আরও গভীর ধারণা পেতে, GPUAdapterInfo নিম্নলিখিত বৈশিষ্ট্যগুলি প্রকাশ করে:

  • device অ্যাট্রিবিউট (মানসম্মত) হল একটি বিক্রেতা-নির্দিষ্ট অ্যাডাপ্টার শনাক্তকারী।
  • description বৈশিষ্ট্য (মানসম্মত) হল একটি মানব-পঠনযোগ্য স্ট্রিং যা অ্যাডাপ্টারের বিশদ প্রদান করে।
  • driver অ্যাট্রিবিউট (অ-মানসম্মত) হল একটি মানব-পঠনযোগ্য স্ট্রিং যা ড্রাইভারকে বর্ণনা করে।
  • backend অ্যাট্রিবিউট (অ-মানসম্মত) গ্রাফিক্স ব্যাকএন্ড নির্দেশ করে, যেমন "WebGPU" , "D3D11" , "D3D12" , "metal" , "vulkan" , "openGL" , "openGLES" , অথবা "null"
  • type অ্যাট্রিবিউট (অ-মানসম্মত) GPU প্রকার সনাক্ত করে: "discrete GPU" , "integrated GPU" , "CPU" , অথবা "unknown" .
  • d3dShaderModel অ্যাট্রিবিউট (অ-মানসম্মত) সর্বাধিক সমর্থিত D3D শেডার মডেল নম্বর নির্দিষ্ট করে, উদাহরণস্বরূপ, 62 HLSL SM 6.2 সমর্থন নির্দেশ করে।
  • vkDriverVersion অ্যাট্রিবিউট (অ-মানসম্মত) হল বিক্রেতা-নির্দিষ্ট Vulkan ড্রাইভার সংস্করণ।
  • powerPreference অ্যাট্রিবিউট (অ-মানসম্মত) হল "low-power" অথবা "high-performance" , যা GPURequestAdapterOptions এর GPUPowerPreference এর উপর ভিত্তি করে তৈরি।

আপনার অ্যাপ তৈরির সময় প্রচুর পরিমাণে বরাদ্দ করার সময় মেমরির সীমাবদ্ধতা অনুমান করার জন্য, GPUAdapterInfo memoryHeaps অ-মানসম্মত তথ্য যেমন অ্যাডাপ্টারে উপলব্ধ মেমরি হিপের আকার এবং প্রকার প্রকাশ করে।

const adapter = await navigator.gpu.requestAdapter();

for (const { size, properties } of adapter.info.memoryHeaps) {
  console.log(size); // memory heap size in bytes
  if (properties & GPUHeapProperty.DEVICE_LOCAL)  { /* ... */ }
  if (properties & GPUHeapProperty.HOST_VISIBLE)  { /* ... */ }
  if (properties & GPUHeapProperty.HOST_COHERENT) { /* ... */ }
  if (properties & GPUHeapProperty.HOST_UNCACHED) { /* ... */ }
  if (properties & GPUHeapProperty.HOST_CACHED)   { /* ... */ }
}

শেডার মডিউল সংকলন বিকল্প কঠোর গণিত

GPUShaderModuleDescriptor-এ একটি strictMath নন-স্ট্যান্ডার্ডাইজড বুলিয়ান বিকল্প রয়েছে, যা শেডার মডিউল সংকলনের সময় কঠোর গাণিতিক নির্ভুলতা সক্ষম বা অক্ষম করে। এই বিকল্পটি Metal এবং Direct3D-তে সমর্থিত। যখন strictMath সক্ষম করা হয়, তখন কম্পাইলারটি সুনির্দিষ্ট গাণিতিক নিয়ম মেনে চলে। বিপরীতভাবে, এটি নিষ্ক্রিয় করার ফলে কম্পাইলারটি নিম্নলিখিত উপায়ে শেডারগুলিকে অপ্টিমাইজ করতে পারে:

  • NaN এবং ইনফিনিটি মানের সম্ভাবনা উপেক্ষা করা।
  • -0 কে +0 হিসেবে গণ্য করা হচ্ছে।
  • ভাগের পরিবর্তে পারস্পরিক গুণের দ্রুততর গুণ করা।
  • সহযোগী এবং বিতরণমূলক বৈশিষ্ট্যের উপর ভিত্তি করে ক্রিয়াকলাপ পুনর্বিন্যাস করা।
const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();

const code = `
  // Examines the bit pattern of the floating-point number to
  // determine if it represents a NaN according to the IEEE 754 standard.
  fn isNan(x : f32) -> bool {
    bool ones_exp = (bitcast<u32>(x) & 0x7f8) == 0x7f8;
    bool non_zero_sig = (bitcast<u32>(x) & 0x7ffff) != 0;
    return ones_exp && non_zero_sig;
  }
  // ...
`;

// Enable strict math during shader compilation.
const shaderModule = device.createShaderModule({ code, strictMath: true });

জিরো-কপি সহ ভিডিও আমদানি করুন

GPUExternalTexture isZeroCopy নন-স্ট্যান্ডার্ডাইজড বুলিয়ান অ্যাট্রিবিউট আপনাকে জানাতে সাহায্য করে যে importExternalTexture() দিয়ে আমদানি করা ভিডিওটি GPU দ্বারা সরাসরি অ্যাক্সেস করা হয়েছে কিনা, কোনও ইন্টারমিডিয়েট কপির প্রয়োজন ছাড়াই।

const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();

const video = document.querySelector('video');
const externalTexture = device.importExternalTexture({ source: video });

if (externalTexture.isZeroCopy) {
  console.log('Video frame was accessed directly by the GPU');
}