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

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

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

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

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

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

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

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

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

  • 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 টেক্সচারের টুকরোতে রেন্ডার করুন

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

ভোরের আপডেট

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

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

ওয়েবজিপিইউ সিরিজে নতুন কী কভার করা হয়েছে তার একটি তালিকা।

ক্রোম 125

ক্রোম 124

ক্রোম 123

ক্রোম 122

ক্রোম 121

ক্রোম 120

ক্রোম 119

ক্রোম 118

ক্রোম 117

ক্রোম 116

ক্রোম 115

ক্রোম 114

ক্রোম 113