WebGPU তে নতুন কী (Chrome 144)

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

প্রকাশিত: ৭ জানুয়ারি, ২০২৬

WGSL উপগোষ্ঠী_আইডি এক্সটেনশন

WGSL ল্যাঙ্গুয়েজ এক্সটেনশন subgroup_id সক্রিয় করা থাকলে, এটি আপনাকে subgroups নিম্নলিখিত নতুন বিল্ট-ইন মানগুলি ব্যবহার করার সুযোগ দেয়:

  • subgroup_id : বর্তমান ওয়ার্কগ্রুপের মধ্যে কোনো ইনভোকেশনের সাবগ্রুপের আইডি প্রদান করে।
  • num_subgroups : ওয়ার্কগ্রুপে উপস্থিত সাবগ্রুপের সংখ্যা জানায়।

পূর্বে, সাবগ্রুপ ইনভোকেশন আইডি ব্যবহার করে মেমরি ইনডেক্স করার জন্য, ওভারল্যাপিং মেমরি অ্যাক্সেস এড়াতে আপনাকে একটি সাবগ্রুপ আইডি পুনর্গঠন করতে হতো (সাধারণত অ্যাটমিক অপারেশনের মাধ্যমে)। এখন আপনি সেই সমীকরণের অন্য অর্ধেক পূরণ করতে subgroup_id ব্যবহার করতে পারেন। যেহেতু এই কার্যকারিতাটি এখনও D3D ব্যাকএন্ডে উপলব্ধ নয়, তাই সেখানে এটি অনুকরণ করা হয়। local_invocation_index এর সমতুল্য হিসেবে subgroup_invocation_id + subgroup_size * subgroup_id তৈরি করা নিরাপদ হওয়া উচিত। মনে রাখবেন, এমন কিছু ক্ষেত্র থাকতে পারে যেখানে সাবগ্রুপগুলো পূর্ণ নয়।

এই ল্যাঙ্গুয়েজ এক্সটেনশনটি navigator.gpu.wgslLanguageFeatures ব্যবহার করে ফিচার-ডিটেক্ট করা যায়। আপনার WGSL শেডার কোডের শুরুতে requires subgroup_id; ব্যবহার করে নন-পোর্টেবিলিটির সম্ভাবনা বোঝানোর জন্য একটি requires-ডিরেক্টিভ ব্যবহার করার পরামর্শ দেওয়া হচ্ছে। নিম্নলিখিত উদাহরণ এবং শিপ করার উদ্দেশ্যটি দেখুন।

if (!navigator.gpu.wgslLanguageFeatures.has("subgroup_id")) {
  throw new Error(`WGSL subgroup_id and num_subgroups built-in values are not available`);
}

const adapter = await navigator.gpu.requestAdapter();
if (!adapter.features.has("subgroups")) {
  throw new Error("Subgroups support is not available");
}
const device = await adapter.requestDevice({ requiredFeatures: ["subgroups"] });

const shaderModule = device.createShaderModule({ code: `
  enable subgroups;
  requires subgroup_id;

  @compute @workgroup_size(64, 1, 1)
  fn main(@builtin(subgroup_id) subgroup_id : u32,
          @builtin(num_subgroups) num_subgroups : u32) {
    // TODO: Use subgroup_id and num_subgroups values.
  }`,
});

WGSL uniform_buffer_standard_layout এক্সটেনশন

WGSL ল্যাঙ্গুয়েজ এক্সটেনশন uniform_buffer_standard_layout ইউনিফর্ম বাফারগুলোকে স্টোরেজ বাফারের মতোই মেমরি লেআউট সীমাবদ্ধতা ব্যবহার করার সুযোগ দেয়, যা উভয় প্রকার বাফারে ডেটা স্ট্রাকচার শেয়ার করা সহজ করে তোলে। এর মানে হলো, ইউনিফর্ম বাফারগুলোতে এখন আর অ্যারে এলিমেন্টগুলোর জন্য ১৬-বাইট অ্যালাইনমেন্ট অথবা নেস্টেড স্ট্রাকচার অফসেটগুলোকে ১৬ বাইটের গুণিতকে প্যাড করার প্রয়োজন হয় না।

এই ল্যাঙ্গুয়েজ এক্সটেনশনটি navigator.gpu.wgslLanguageFeatures ব্যবহার করে ফিচার-ডিটেক্ট করা যায়। আপনার WGSL শেডার কোডের শুরুতে requires uniform_buffer_standard_layout; ব্যবহার করে নন-পোর্টেবিলিটির সম্ভাবনা বোঝানোর জন্য একটি requires-ডিরেক্টিভ ব্যবহার করার পরামর্শ দেওয়া হচ্ছে। নিম্নলিখিত উদাহরণ এবং শিপ করার উদ্দেশ্যটি দেখুন।

if (!navigator.gpu.wgslLanguageFeatures.has("uniform_buffer_standard_layout")) {
  throw new Error(`WGSL uniform buffer standard layout is not available`);
}

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

const shaderModule = device.createShaderModule({ code: `
  requires uniform_buffer_standard_layout;

  struct S {
      x: f32
  }
  struct Uniforms {
      a: S,
      b: f32
      // b is at offset 4. Without standard layout, alignment rules would
      // force b to be at offset 16 (or a multiple of 16), and you would have
      // to add extra fields or use an @align attribute.
  }

  @group(0) @binding(0) var<uniform> u: Uniforms;

  @fragment fn fs_main() -> @location(0) vec4<f32> {
      return vec4<f32>(u.a.x);
  }`,
});

লিনাক্সে ওয়েবজিপিইউ

ক্রোম টিম সতর্কতার সাথে লিনাক্সের জন্য WebGPU চালু করছে, যা প্রাথমিকভাবে ইন্টেল জেন১২+ জিপিইউ-এর জন্য সমর্থন দিয়ে শুরু হলেও, এটিকে আরও ডিভাইসে (এএমডি, এনভিডিয়া) প্রসারিত করার একটি পরীক্ষামূলক পরিকল্পনা রয়েছে। এই বাস্তবায়নে এমন একটি আর্কিটেকচার ব্যবহার করা হয়েছে যেখানে WebGPU ভলকান (Vulkan) ব্যবহার করে এবং ক্রোমিয়ামের বাকি অংশ ওপেনজিএল (OpenGL)-এ থাকে, যা বিদ্যমান সুপরিচিত ভালো কোড পাথগুলোকে কাজে লাগায়। ইস্যু ৪৪২৭৯১৪৪০ দেখুন।

দ্রুততর writeBuffer এবং writeTexture

ক্রোমে writeBuffer() এবং writeTexture() অপ্টিমাইজ করা হয়েছে, যার ফলে স্থানান্তরিত ডেটার আকারের উপর নির্ভর করে পূর্ববর্তী সংস্করণের তুলনায় পারফরম্যান্স ২ গুণ পর্যন্ত উন্নত হয়েছে। এই পরিবর্তনটি Dawn Wire ইমপ্লিমেন্টেশনের সকল ব্যবহারকারীর জন্যও প্রযোজ্য। ইস্যু 441900745 দেখুন।

ভোরের আপডেট

অ্যান্ড্রয়েড জিপিইউ টিম জেটপ্যাক ব্যবহার করে অ্যান্ড্রয়েডের জন্য ওয়েবজিপিইউ-এর কোটলিন বাইন্ডিং-এর প্রথম আলফা রিলিজ প্রকাশ করেছে। androidx.webgpu প্যাকেজটি অ্যান্ড্রয়েড ডেভেলপারদের কোটলিন ব্যবহার করে একটি আধুনিক জিপিইউ এপিআই ব্যবহারের সুযোগ দেয়, যা ওপেনজিএল-এর পুরোনো সমস্যা বা ভলকান-এর জটিলতাকে এড়িয়ে যায়—ইকোসিস্টেমের জন্য এটি একটি দারুণ অগ্রগতি!

এখানে কেবল কয়েকটি মূল বিষয় তুলে ধরা হয়েছে। কমিটগুলোর বিস্তারিত তালিকাটি দেখুন।

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

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

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

ক্রোম ১৪৬

ক্রোম ১৪৫

ক্রোম ১৪৪

ক্রোম ১৪৩

ক্রোম ১৪২

ক্রোম ১৪১

ক্রোম ১৪০

ক্রোম ১৩৯

ক্রোম ১৩৮

ক্রোম ১৩৭

ক্রোম ১৩৬

ক্রোম ১৩৫

ক্রোম ১৩৪

ক্রোম ১৩৩

ক্রোম ১৩২

ক্রোম ১৩১

ক্রোম ১৩০

ক্রোম ১২৯

ক্রোম ১২৮

ক্রোম ১২৭

ক্রোম ১২৬

ক্রোম ১২৫

ক্রোম ১২৪

ক্রোম ১২৩

ক্রোম ১২২

ক্রোম ১২১

ক্রোম ১২০

ক্রোম ১১৯

ক্রোম ১১৮

ক্রোম ১১৭

ক্রোম ১১৬

ক্রোম ১১৫

ক্রোম ১১৪

ক্রোম ১১৩