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

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

সাবগ্রুপগুলির সাথে পরীক্ষা করা হচ্ছে

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

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

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

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

আপনাকে আপনার ডাব্লুজিএসএল কোডে এই এক্সটেনশনটি সুস্পষ্টভাবে সক্ষম করতে হবে 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 Console-এ এই আসন্ন বৈধতা সম্পর্কে একটি সতর্কতা দেখানো হয় এবং এই পরিস্থিতিতে মানগুলিকে 0-তে বাধ্য করা হয়। সংখ্যা 352567424 দেখুন।

ডিফল্ট প্রতিরোধ করলে ক্যাপচারড ত্রুটি DevTools সতর্কতা লুকান

DevTools কনসোলে, uncapturederror ইভেন্টের জন্য সতর্কতা আর প্রদর্শিত হয় না যদি uncapturederror এর জন্য কোনো ইভেন্ট লিসেনার নিবন্ধিত হয়ে থাকে এবং ইভেন্ট লিসেনার কলব্যাকের মধ্যে ইভেন্ট 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 দেখুন।

ভোরের আপডেট

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

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

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

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

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

এটি শুধুমাত্র কিছু মূল হাইলাইট কভার করে। কমিটের সম্পূর্ণ তালিকা দেখুন।

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

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

ক্রোম 129

ক্রোম 128

ক্রোম 127

ক্রোম 126

ক্রোম 125

ক্রোম 124

ক্রোম 123

ক্রোম 122

ক্রোম 121

ক্রোম 120

ক্রোম 119

ক্রোম 118

ক্রোম 117

ক্রোম 116

ক্রোম 115

ক্রোম 114

ক্রোম 113