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

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

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

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

সাবগ্রুপ ফিচারটি SIMD-স্তরের প্যারালালিজম সক্ষম করে, যার ফলে একটি গ্রুপের অন্তর্ভুক্ত থ্রেডগুলো একে অপরের সাথে যোগাযোগ করতে এবং সম্মিলিত গাণিতিক অপারেশন (যেমন, ১৬টি সংখ্যার যোগফল গণনা করা) সম্পাদন করতে পারে। এটি ক্রস-থ্রেড ডেটা শেয়ারিংয়ের একটি অত্যন্ত কার্যকর মাধ্যম প্রদান করে।

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

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

যখন কোনো GPUAdapter"chromium-experimental-subgroups" ফিচারটি উপলব্ধ থাকে, তখন WGSL-এ এক্সপেরিমেন্টাল সাবগ্রুপ সাপোর্ট পেতে এই ফিচারযুক্ত একটি GPUDevice জন্য অনুরোধ করুন এবং এর minSubgroupSizemaxSubgroupSize সীমাগুলো পরীক্ষা করুন।

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

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

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

ভোরের আপডেট

কমিটগুলোর বিস্তারিত তালিকাটি দেখুন।

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

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

ক্রোম ১৪৭-১৪৮

ক্রোম ১৪৬

ক্রোম ১৪৫

ক্রোম ১৪৪

ক্রোম ১৪৩

ক্রোম ১৪২

ক্রোম ১৪১

ক্রোম ১৪০

ক্রোম ১৩৯

ক্রোম ১৩৮

ক্রোম ১৩৭

ক্রোম ১৩৬

ক্রোম ১৩৫

ক্রোম ১৩৪

ক্রোম ১৩৩

ক্রোম ১৩২

ক্রোম ১৩১

ক্রোম ১৩০

ক্রোম ১২৯

ক্রোম ১২৮

ক্রোম ১২৭

ক্রোম ১২৬

ক্রোম ১২৫

ক্রোম ১২৪

ক্রোম ১২৩

ক্রোম ১২২

ক্রোম ১২১

ক্রোম ১২০

ক্রোম ১১৯

ক্রোম ১১৮

ক্রোম ১১৭

ক্রোম ১১৬

ক্রোম ১১৫

ক্রোম ১১৪

ক্রোম ১১৩