WebGPU-তে নতুন কী আছে (Chrome 125)

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

এবার WebGPU ফিচারের সংখ্যা একটু কম মনে হতে পারে, তবে কিছু বড় অগ্রগতি খুব শীঘ্রই আসছে! ভবিষ্যতের রিলিজগুলিতে শেডার কম্পাইলেশন স্পিডের উন্নতি এবং WGPUFuture ব্যবহার করে বাস্তবায়নের অ্যাসিঙ্ক মডেলে পরিবর্তনের মতো বৈশিষ্ট্য অন্তর্ভুক্ত থাকবে।

উপগোষ্ঠী (উন্নয়নের অধীনে থাকা বৈশিষ্ট্য)

উপগোষ্ঠী বৈশিষ্ট্যটি SIMD-স্তরের সমান্তরালতা সক্ষম করে, যা একটি গোষ্ঠীর মধ্যে থ্রেডগুলিকে যোগাযোগ করতে এবং সম্মিলিত গণিত ক্রিয়াকলাপ সম্পাদন করতে দেয় (উদাহরণস্বরূপ, 16টি সংখ্যার যোগফল গণনা করা)। এটি ক্রস-থ্রেড ডেটা ভাগ করে নেওয়ার একটি অত্যন্ত দক্ষ রূপ প্রদান করে।

সাবগ্রুপ অপারেশনগুলি আধুনিক GPU API দ্বারা সমর্থিত, তবে নামকরণ এবং বাস্তবায়নের বিবরণ পরিবর্তিত হয়। Chrome টিম মিলগুলি চিহ্নিত করেছে এবং এখন এই বৈশিষ্ট্যটিকে মানসম্মত করার জন্য কাজ করছে। প্রস্তাবটি দেখুন এবং আপনার যদি কোন প্রশ্ন থাকে তবে মন্তব্য করুন

"পরীক্ষামূলক ওয়েব প্ল্যাটফর্ম বৈশিষ্ট্য" পতাকার পিছনে chrome://flags/#enable-experimental-web-platform-features উপগোষ্ঠীর একটি ন্যূনতম এবং অমানবিক বাস্তবায়ন রয়েছে যাতে ডেভেলপাররা এটি ব্যবহার করে দেখতে পারেন এবং প্রতিক্রিয়া জানাতে পারেন কারণ WebGPU-এর প্রেক্ষাপটে বাস্তব-বিশ্বের সুবিধাগুলি এখনও প্রমাণিত হয়নি।

যখন "chromium-experimental-subgroups" বৈশিষ্ট্যটি একটি GPUAdapter এ উপলব্ধ থাকে, তখন WGSL এ পরীক্ষামূলক উপগোষ্ঠী সমর্থন পেতে এবং এর minSubgroupSize এবং maxSubgroupSize সীমা পরীক্ষা করার জন্য এই বৈশিষ্ট্য সহ একটি GPUDevice অনুরোধ করুন।

আপনার WGSL কোডে enable chromium_experimental_subgroups সহ এই এক্সটেনশনটি স্পষ্টভাবে সক্ষম করতে হবে। সক্ষম করা হলে, আপনি নিম্নলিখিত সংযোজনগুলিতে অ্যাক্সেস পাবেন:

  • subgroup_invocation_id : সাবগ্রুপের মধ্যে থ্রেডের সূচকের জন্য একটি অন্তর্নির্মিত মান।
  • subgroup_size : সাবগ্রুপ আকার অ্যাক্সেসের জন্য একটি অন্তর্নির্মিত মান।
  • subgroupBallot(value): বিট ফিল্ডের একটি সেট প্রদান করে যেখানে subgroup_invocation_id এর সাথে সম্পর্কিত বিট 1 হয় যদি সেই সক্রিয় আমন্ত্রণের জন্য value সত্য হয় এবং অন্যথায় 0 হয়।
  • subgroupBroadcast(value, id) : subgroup_invocation_id id সাথে ইনভোকেশন থেকে value সাবগ্রুপের মধ্যে থাকা সকল ইনভোকেশনে সম্প্রচার করে। দ্রষ্টব্য: 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().
  }`,
});

3D টেক্সচারের টুকরোতে রেন্ডার করুন

আপনি এখন রেন্ডার পাসের মধ্যে 3D টেক্সচারের স্লাইস(গুলি) সরাসরি রেন্ডার করতে পারবেন, যা সাধারণ 2D টেক্সচার রেন্ডারিংয়ের বাইরেও এর ক্ষমতা বৃদ্ধি করবে, GPURenderPassColorAttachment এ নতুন depthSlice সদস্যের সাহায্যে। উদাহরণস্বরূপ, এই সংযোজন আপনাকে 3D টেক্সচার ভলিউমে সরাসরি রেন্ডার করে ভক্সেল-ভিত্তিক দৃশ্য এবং প্রভাব তৈরি করতে দেয়। সমস্যা dawn:1020 দেখুন।

ভোরের আপডেট

কমিটের সম্পূর্ণ তালিকাটি দেখুন।

WebGPU-তে নতুন কী আছে

" What's New in WebGPU" সিরিজে যা যা আলোচনা করা হয়েছে তার একটি তালিকা।

ক্রোম ১৪২

ক্রোম ১৪১

ক্রোম ১৪০

ক্রোম ১৩৯

ক্রোম ১৩৮

ক্রোম ১৩৭

ক্রোম ১৩৬

ক্রোম ১৩৫

ক্রোম ১৩৪

ক্রোম ১৩৩

ক্রোম ১৩২

ক্রোম ১৩১

ক্রোম ১৩০

ক্রোম ১২৯

ক্রোম ১২৮

ক্রোম ১২৭

ক্রোম ১২৬

ক্রোম ১২৫

ক্রোম ১২৪

ক্রোম ১২৩

ক্রোম ১২২

ক্রোম ১২১

ক্রোম ১২০

ক্রোম ১১৯

ক্রোম ১১৮

ক্রোম ১১৭

ক্রোম ১১৬

ক্রোম ১১৫

ক্রোম ১১৪

ক্রোম ১১৩