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

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

WGSL-এ DP4a বিল্ট-ইন ফাংশন সাপোর্ট করে

DP4a (4 Elements and Accumulate এর ডট প্রোডাক্ট) বলতে GPU নির্দেশাবলীর একটি সেট বোঝায় যা সাধারণত কোয়ান্টাইজেশনের জন্য ডিপ লার্নিং ইনফারেন্সে ব্যবহৃত হয়। এটি 8-বিট ইন্টিজার ডট প্রোডাক্টগুলি দক্ষতার সাথে সম্পাদন করে যাতে এই ধরনের int8-কোয়ান্টাইজড মডেলগুলির গণনা ত্বরান্বিত হয়। এটি মেমরি এবং নেটওয়ার্ক ব্যান্ডউইথের (75% পর্যন্ত) সাশ্রয় করতে পারে এবং f32 সংস্করণের তুলনায় ইনফারেন্সিংয়ে যেকোনো মেশিন লার্নিং মডেলের কর্মক্ষমতা উন্নত করতে পারে। ফলস্বরূপ, এটি এখন অনেক জনপ্রিয় AI ফ্রেমওয়ার্কের মধ্যে ব্যাপকভাবে ব্যবহৃত হয়।

যখন "packed_4x8_integer_dot_product" WGSL ভাষা এক্সটেনশনটি navigator.gpu.wgslLanguageFeatures এ উপস্থিত থাকে, তখন আপনি এখন dot4U8Packed এবং dot4I8Packed বিল্ট-ইন ফাংশনগুলির সাহায্যে আপনার WGSL শেডার কোডে ডট পণ্য নির্দেশাবলীর ইনপুট হিসাবে 8-বিট পূর্ণসংখ্যার 4-কম্পোনেন্ট ভেক্টর প্যাকিং 32-বিট পূর্ণসংখ্যার স্কেলার ব্যবহার করতে পারেন। আপনি pack4xI8 , pack4xU8 , pack4xI8Clamp , pack4xU8Clamp , unpack4xI8 , এবং unpack4xU8 WGSL বিল্ট-ইন ফাংশনগুলির সাথে 8-বিট পূর্ণসংখ্যার প্যাকিং 4-কম্পোনেন্ট ভেক্টরগুলির সাথে প্যাকিং এবং আনপ্যাকিংয়ের নির্দেশাবলীও ব্যবহার করতে পারেন।

আপনার WGSL শেডার কোডের উপরে requires packed_4x8_integer_dot_product; দিয়ে অ-পোর্টেবিলিটির সম্ভাবনা সম্পর্কে সংকেত দেওয়ার জন্য একটি requires-directive ব্যবহার করার পরামর্শ দেওয়া হচ্ছে। নিম্নলিখিত উদাহরণটি দেখুন এবং tint:1497 ইস্যু করুন

if (!navigator.gpu.wgslLanguageFeatures.has("packed_4x8_integer_dot_product")) {
  throw new Error(`DP4a built-in functions are not available`);
}

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

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

  fn main() {
    const result: u32 = dot4U8Packed(0x01020304u, 0x02040405u); // 42
  }`,
});

এই স্পেসিফিকেশন এবং বাস্তবায়ন সম্পূর্ণ করার জন্য সাংহাইতে ইন্টেলের ওয়েব গ্রাফিক্স টিমকে বিশেষ ধন্যবাদ!

WGSL-এ অবাধ পয়েন্টার প্যারামিটার

"unrestricted_pointer_parameters" WGSL ভাষা এক্সটেনশন WGSL ফাংশনে কোন পয়েন্টারগুলি প্রেরণ করা যেতে পারে তার উপর বিধিনিষেধ শিথিল করে:

  • ব্যবহারকারী ঘোষিত ফাংশনগুলিতে storage , uniform এবং workgroup ঠিকানা স্থানের প্যারামিটার পয়েন্টার।

  • ব্যবহারকারী ঘোষিত ফাংশনগুলিতে স্ট্রাকচার মেম্বার এবং অ্যারে এলিমেন্টের পয়েন্টার পাস করা।

আরও জানতে WGSL-এর "পয়েন্টার অ্যাজ ফাংশন প্যারামিটারস | ট্যুর" দেখুন।

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

if (!navigator.gpu.wgslLanguageFeatures.has("unrestricted_pointer_parameters")) {
  throw new Error(`Unrestricted pointer parameters are not available`);
}

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

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

  @group(0) @binding(0) var<storage, read_write> S : i32;

  fn func(pointer : ptr<storage, i32, read_write>) {
    *pointer = 42;
  }

  @compute @workgroup_size(1)
  fn main() {
    func(&S);
  }`
});

WGSL-এ কম্পোজিট ডিরেফারেন্স করার জন্য সিনট্যাক্স চিনি

যখন "pointer_composite_access" WGSL ভাষা এক্সটেনশনটি navigator.gpu.wgslLanguageFeatures তে উপস্থিত থাকে, তখন আপনার WGSL শেডার কোড এখন একই ডট ( . ) সিনট্যাক্স ব্যবহার করে জটিল ডেটা ধরণের উপাদানগুলিতে অ্যাক্সেস সমর্থন করে, আপনি সরাসরি ডেটার সাথে কাজ করছেন বা এর পয়েন্টার দিয়ে করছেন। এটি কীভাবে কাজ করে তা এখানে:

  • যদি foo একটি পয়েন্টার হয়: foo.bar লেখার জন্য আরও সুবিধাজনক উপায় (*foo).bar । পয়েন্টারটিকে একটি "রেফারেন্স" তে রূপান্তর করার জন্য সাধারণত তারকাচিহ্ন ( * ) প্রয়োজন হত যা ডিরেফারেন্স করা যেতে পারে, কিন্তু এখন পয়েন্টার এবং রেফারেন্স উভয়ই অনেক বেশি একই রকম এবং প্রায় বিনিময়যোগ্য।

  • যদি foo একটি পয়েন্টার না হয়: ডট ( . ) অপারেটরটি ঠিক সেইভাবে কাজ করে যেমনটি আপনি সরাসরি সদস্যদের অ্যাক্সেস করার জন্য ব্যবহার করেন।

একইভাবে, যদি pa একটি পয়েন্টার হয় যা একটি অ্যারের শুরুর ঠিকানা সংরক্ষণ করে, তাহলে pa[i] ব্যবহার করলে আপনি মেমরির অবস্থানে সরাসরি অ্যাক্সেস পাবেন যেখানে সেই অ্যারের 'i 'th উপাদানটি সংরক্ষণ করা হয়।

আপনার WGSL শেডার কোডের উপরে requires pointer_composite_access; দিয়ে অ-পোর্টেবিলিটির সম্ভাবনা সংকেত দেওয়ার জন্য একটি requires-directive ব্যবহার করার পরামর্শ দেওয়া হচ্ছে। নিম্নলিখিত উদাহরণটি দেখুন এবং tint:2113 ইস্যু করুন

if (!navigator.gpu.wgslLanguageFeatures.has("pointer_composite_access")) {
  throw new Error(`Pointer composite access is not available`);
}

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

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

  fn main() {
    var a = vec3f();
    let p : ptr<function, vec3f> = &a;
    let r1 = (*p).x; // always valid.
    let r2 = p.x; // requires pointer composite access.
  }`
});

স্টেনসিল এবং গভীরতার দিকগুলির জন্য পৃথক পঠনযোগ্য অবস্থা

পূর্বে, রেন্ডার পাসে রিড-ওনলি ডেপথ-স্টেন্সিল সংযুক্তির জন্য উভয় দিক (ডেপথ এবং স্টেনসিল) কেবল-পঠনযোগ্য করতে হত। এই সীমাবদ্ধতা তুলে নেওয়া হয়েছে। এখন, আপনি ডেপথ দিকটি রিড-ওনলি ফ্যাশনে ব্যবহার করতে পারেন, উদাহরণস্বরূপ কন্টাক্ট শ্যাডো ট্রেসিংয়ের জন্য, যখন স্টেনসিল বাফারটি আরও প্রক্রিয়াকরণের জন্য পিক্সেল সনাক্ত করার জন্য লেখা হয়। দেখুন ইস্যু dawn:2146

ভোরের আপডেট

wgpuDeviceSetUncapturedErrorCallback() দিয়ে সেট করা আনক্যাপচারড এরর কলব্যাক এখন ত্রুটিটি ঘটলে তাৎক্ষণিকভাবে কল করা হয়। ডেভেলপাররা ডিবাগিংয়ের জন্য এটিই আশা করে এবং চায়। change dawn:173620 দেখুন।

webgpu.h API থেকে wgpuSurfaceGetPreferredFormat() পদ্ধতিটি বাস্তবায়িত হয়েছে। সমস্যাটি দেখুন dawn:1362

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

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

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

ক্রোম ১৪২

ক্রোম ১৪১

ক্রোম ১৪০

ক্রোম ১৩৯

ক্রোম ১৩৮

ক্রোম ১৩৭

ক্রোম ১৩৬

ক্রোম ১৩৫

ক্রোম ১৩৪

ক্রোম ১৩৩

ক্রোম ১৩২

ক্রোম ১৩১

ক্রোম ১৩০

ক্রোম ১২৯

ক্রোম ১২৮

ক্রোম ১২৭

ক্রোম ১২৬

ক্রোম ১২৫

ক্রোম ১২৪

ক্রোম ১২৩

ক্রোম ১২২

ক্রোম ১২১

ক্রোম ১২০

ক্রোম ১১৯

ক্রোম ১১৮

ক্রোম ১১৭

ক্রোম ১১৬

ক্রোম ১১৫

ক্রোম ১১৪

ক্রোম ১১৩