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-directive ব্যবহার করার পরামর্শ দেওয়া হচ্ছে। নিম্নলিখিত উদাহরণ এবং পাঠানোর উদ্দেশ্য দেখুন।

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 ইউনিফর্ম_বাফার_স্ট্যান্ডার্ড_লেআউট এক্সটেনশন

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

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

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 চালু করছে, যার শুরুতে Intel Gen12+ GPU সমর্থন থাকবে, তবে এটি আরও ডিভাইসে (AMD, NVIDIA) সম্প্রসারণের একটি সম্ভাব্য পরিকল্পনা রয়েছে। এই বাস্তবায়নে এমন একটি আর্কিটেকচার ব্যবহার করা হয়েছে যেখানে WebGPU Vulkan ব্যবহার করে এবং বাকি Chromium OpenGL-এ থাকে, বিদ্যমান সুপরিচিত ভাল কোড পাথগুলি ব্যবহার করে। সংখ্যা 442791440 দেখুন।

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

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

ভোরের আপডেট

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

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

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

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

ক্রোম ১৪৪

ক্রোম ১৪৩

ক্রোম ১৪২

ক্রোম ১৪১

ক্রোম ১৪০

ক্রোম ১৩৯

ক্রোম ১৩৮

ক্রোম ১৩৭

ক্রোম ১৩৬

ক্রোম ১৩৫

ক্রোম ১৩৪

ক্রোম ১৩৩

ক্রোম ১৩২

ক্রোম ১৩১

ক্রোম ১৩০

ক্রোম ১২৯

ক্রোম ১২৮

ক্রোম ১২৭

ক্রোম ১২৬

ক্রোম ১২৫

ক্রোম ১২৪

ক্রোম ১২৩

ক্রোম ১২২

ক্রোম ১২১

ক্রোম ১২০

ক্রোম ১১৯

ক্রোম ১১৮

ক্রোম ১১৭

ক্রোম ১১৬

ক্রোম ১১৫

ক্রোম ১১৪

ক্রোম ১১৩