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

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

উপগোষ্ঠী নিয়ে পরীক্ষা-নিরীক্ষা

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

"অনিরাপদ ওয়েবজিপিইউ সাপোর্ট" ফ্ল্যাগের পিছনে স্থানীয় পরীক্ষার জন্য সাবগ্রুপ প্রস্তাবের একটি ন্যূনতম বাস্তবায়ন chrome://flags/#enable-unsafe-webgpu এ উপলব্ধ।

আপনি আপনার সাইটে আসল ব্যবহারকারীদের সাথে অরিজিন ট্রায়ালের জন্য সাইন আপ করে সাবগ্রুপগুলিও চেষ্টা করতে পারেন। অরিজিন ট্রায়াল ব্যবহারের জন্য আপনার সাইটকে কীভাবে প্রস্তুত করবেন তার নির্দেশাবলীর জন্য "অরিজিন ট্রায়াল শুরু করুন" পড়ুন। অরিজিন ট্রায়ালটি Chrome 128 থেকে 131 (19 ফেব্রুয়ারী, 2025 পর্যন্ত শেষ) পর্যন্ত চলবে। Experiment-এর জন্য Intent দেখুন।

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

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

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

ভবিষ্যতে আরও বিল্ট-ইন ফাংশন যেমন subgroupAdd , subgroupAll , subgroupElect , subgroupShuffle যোগ করা হবে। সংখ্যা 354738715 দেখুন।

সাবগ্রুপ অপারেশনে f16-কে অনুমতি দিতে, "subgroups" , "subgroups-f16" , এবং "shader-f16" বৈশিষ্ট্য সহ একটি GPUDevice অনুরোধ করুন, তারপর এটি আপনার WGSL কোডে enable f16, subgroups, subgroups_f16; দিয়ে সক্ষম করুন।

নিম্নলিখিত কোড স্নিপেটটি উপগোষ্ঠীর সম্ভাবনার সাথে কাজ করার এবং আবিষ্কার করার জন্য একটি ভিত্তি প্রদান করে।

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

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

  var<workgroup> wgmem : u32;

  @group(0) @binding(0)
  var<storage, read> inputs : array<u32>;

  @group(0) @binding(1)
  var<storage, read_write> output : array<u32>;

  @compute @workgroup_size(64)
  fn main(@builtin(subgroup_size) subgroupSize : u32,
          @builtin(subgroup_invocation_id) id : u32,
          @builtin(local_invocation_index) lid : u32) {
    // One thread per workgroup writes the value to workgroup memory.
    if (lid == 0) {
      wgmem = inputs[lid];
    }
    workgroupBarrier();
    var v = 0u;

    // One thread per subgroup reads the value from workgroup memory
    // and shares that value with every other thread in the subgroup
    // to reduce local memory bandwidth.
    if (id == 0) {
      v = wgmem;
    }
    v = subgroupBroadcast(v, 0);
    output[lid] = v;
  }`,
});

// Send the appropriate commands to the GPU...

লাইন এবং বিন্দুর জন্য গভীরতা পক্ষপাত নির্ধারণ বন্ধ করুন

যখন একটি রেন্ডার পাইপলাইনের টপোলজি একটি লাইন বা পয়েন্ট টাইপের হয়, তখন WebGPU স্পেসিফিকেশন পরিবর্তনের ফলে depthBias , depthBiasSlopeScale এবং depthBiasClamp একটি অ-শূন্য মানের উপর সেট করা একটি বৈধতা ত্রুটি হয়ে দাঁড়ায়। ডেভেলপারদের তাদের কোড আপডেট করার জন্য পর্যাপ্ত সময় দেওয়ার জন্য, DevTools কনসোলে এই আসন্ন বৈধতা সম্পর্কে একটি সতর্কতা দেখানো হয় এবং এই পরিস্থিতিতে মানগুলিকে 0 এ জোর করে চাপ দেওয়া হয়। 352567424 সংখ্যাটি দেখুন।

যদি preventDefault থাকে তাহলে DevTools সতর্কতা না-ক্যাপচার করা ত্রুটি লুকান।

DevTools কনসোলে, uncapturederror ইভেন্টের জন্য সতর্কতা আর প্রদর্শিত হয় না যদি uncapturederror এর জন্য কোনও ইভেন্ট লিসেনার নিবন্ধিত থাকে এবং ইভেন্ট লিসেনার কলব্যাকের মধ্যে Event preventDefault() পদ্ধতি কল করা হয়। এই আচরণটি জাভাস্ক্রিপ্টে ইভেন্ট হ্যান্ডলিং এর সাথে মেলে। নিম্নলিখিত উদাহরণটি দেখুন এবং 40263619 ইস্যু করুন

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

device.addEventListener("uncapturederror", (event) => {
  // Prevents browser warning to show up in the DevTools Console.
  event.preventDefault();

  // TODO: Handle event.error
});

WGSL ইন্টারপোলেট স্যাম্পলিং প্রথমে এবং উভয়ই

WGSL interpolate অ্যাট্রিবিউট আপনাকে ব্যবহারকারী-সংজ্ঞায়িত IO ডেটা ইন্টারপোলেশন পরিচালনা করতে দেয়। এখন, নতুন ইন্টারপোলেট স্যাম্পলিং প্যারামিটারগুলি first (ডিফল্ট) এবং either আপনাকে অতিরিক্ত নিয়ন্ত্রণ দেয়: first প্রিমিটিভের প্রথম শীর্ষবিন্দু থেকে মান ব্যবহার করে, যখন either প্রথম বা শেষ শীর্ষবিন্দুকে অনুমতি দেয়। সমস্যা 340278447 দেখুন।

ভোরের আপডেট

অ্যাসিঙ্ক্রোনাস অপারেশন পরিচালনা করার জন্য ডনের WGPUFuture বাস্তবায়ন এখন সম্পূর্ণ। মূল ধারণাগুলির মধ্যে রয়েছে সুযোগসন্ধানী ইভেন্ট প্রক্রিয়াকরণের জন্য wgpuInstanceProcessEvents এবং কলব্যাক অবস্থান নির্ধারণের জন্য WGPUCallbackMode । WGPUFuture হল অসীম জীবনকাল সহ এককালীন ইভেন্টগুলিকে বোঝায় এবং wgpuInstanceWaitAny হল যেকোনো ভবিষ্যতের সমাপ্তি বা একটি সময়সীমার জন্য অপেক্ষা করছে। সংখ্যা 42240932 দেখুন।

CompositeAlphaMode::Auto মানটি এখন Surface::GetCapabilities() দ্বারা রিপোর্ট করা হয় না। এটি এখনও বৈধ এবং Surface::GetCapabilities().alphaMode[0] এর সমতুল্য। সংখ্যা 292 দেখুন।

OpenGL ব্যাকএন্ড এখন প্রতিটি Present() কলের জন্য y-flip blit সহ Surface সমর্থন করে। সংখ্যা 344814083 দেখুন।

Adapter::GetProperties() পদ্ধতিটি Adapter::GetInfo() ব্যবহারের পক্ষে অবচিত।

একজন বহিরাগত অবদানকারী, যশবন্ত সমস্ত CMake ফাইল পুনর্লিখন করেছেন, যা আপডেট করা সহজ করে এবং প্রি-বিল্ডের জন্য অনুমতি দেয়। CMake প্রকল্পগুলিতে Dawn ব্যবহারের জন্য কুইকস্টার্ট গাইডটি দেখুন।

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

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

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

ক্রোম ১৪২

ক্রোম ১৪১

ক্রোম ১৪০

ক্রোম ১৩৯

ক্রোম ১৩৮

ক্রোম ১৩৭

ক্রোম ১৩৬

ক্রোম ১৩৫

ক্রোম ১৩৪

ক্রোম ১৩৩

ক্রোম ১৩২

ক্রোম ১৩১

ক্রোম ১৩০

ক্রোম ১২৯

ক্রোম ১২৮

ক্রোম ১২৭

ক্রোম ১২৬

ক্রোম ১২৫

ক্রোম ১২৪

ক্রোম ১২৩

ক্রোম ১২২

ক্রোম ১২১

ক্রোম ১২০

ক্রোম ১১৯

ক্রোম ১১৮

ক্রোম ১১৭

ক্রোম ১১৬

ক্রোম ১১৫

ক্রোম ১১৪

ক্রোম ১১৩