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

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

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

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

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

requires packed_4x8_integer_dot_product; এর সাথে নন-পোর্টেবিলিটির সম্ভাব্যতার সংকেত দিতে প্রয়োজন-নির্দেশ ব্যবহার করার পরামর্শ দেওয়া হয়; আপনার WGSL শেডার কোডের শীর্ষে। নিম্নলিখিত উদাহরণ এবং সমস্যা টিন্ট দেখুন: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 ব্যবহার করে বৈশিষ্ট্য সনাক্ত করা যেতে পারে। requires unrestricted_pointer_parameters; সহ নন-পোর্টেবিলিটির সম্ভাব্যতার সংকেত দিতে সর্বদা প্রয়োজন-নির্দেশ ব্যবহার করার পরামর্শ দেওয়া হয়; আপনার WGSL শেডার কোডের শীর্ষে। নিম্নলিখিত উদাহরণ দেখুন, WGSL স্পেস পরিবর্তন , এবং ইস্যু টিন্ট: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 ' তম উপাদানটি সংরক্ষণ করা হয়।

requires pointer_composite_access; সাথে অ-বহনযোগ্যতার সম্ভাব্যতার সংকেত দিতে একটি প্রয়োজন-নির্দেশ ব্যবহার করার পরামর্শ দেওয়া হয়; আপনার WGSL শেডার কোডের শীর্ষে। নিম্নলিখিত উদাহরণ এবং সমস্যা টিন্ট দেখুন: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.
  }`
});

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

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

ভোরের আপডেট

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

webgpu.h API থেকে wgpuSurfaceGetPreferredFormat() পদ্ধতি প্রয়োগ করা হয়েছে। প্রভাত সংখ্যা দেখুন: 1362

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

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

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

ক্রোম 131

ক্রোম 130

ক্রোম 129

ক্রোম 128

ক্রোম 127

ক্রোম 126

ক্রোম 125

ক্রোম 124

ক্রোম 123

ক্রোম 122

ক্রোম 121

ক্রোম 120

ক্রোম 119

ক্রোম 118

ক্রোম 117

ক্রোম 116

ক্রোম 115

ক্রোম 114

ক্রোম 113

,

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

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

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

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

requires packed_4x8_integer_dot_product; এর সাথে নন-পোর্টেবিলিটির সম্ভাব্যতার সংকেত দিতে প্রয়োজন-নির্দেশ ব্যবহার করার পরামর্শ দেওয়া হয়; আপনার WGSL শেডার কোডের শীর্ষে। নিম্নলিখিত উদাহরণ এবং সমস্যা টিন্ট দেখুন: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 ব্যবহার করে বৈশিষ্ট্য সনাক্ত করা যেতে পারে। requires unrestricted_pointer_parameters; সহ নন-পোর্টেবিলিটির সম্ভাব্যতার সংকেত দিতে সর্বদা প্রয়োজন-নির্দেশ ব্যবহার করার পরামর্শ দেওয়া হয়; আপনার WGSL শেডার কোডের শীর্ষে। নিম্নলিখিত উদাহরণ দেখুন, WGSL স্পেস পরিবর্তন , এবং ইস্যু টিন্ট: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 ' তম উপাদানটি সংরক্ষণ করা হয়।

requires pointer_composite_access; সাথে অ-বহনযোগ্যতার সম্ভাব্যতার সংকেত দিতে একটি প্রয়োজন-নির্দেশ ব্যবহার করার পরামর্শ দেওয়া হয়; আপনার WGSL শেডার কোডের শীর্ষে। নিম্নলিখিত উদাহরণ এবং সমস্যা টিন্ট দেখুন: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.
  }`
});

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

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

ভোরের আপডেট

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

webgpu.h API থেকে wgpuSurfaceGetPreferredFormat() পদ্ধতি প্রয়োগ করা হয়েছে। প্রভাত সংখ্যা দেখুন: 1362

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

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

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

ক্রোম 131

ক্রোম 130

ক্রোম 129

ক্রোম 128

ক্রোম 127

ক্রোম 126

ক্রোম 125

ক্রোম 124

ক্রোম 123

ক্রোম 122

ক্রোম 121

ক্রোম 120

ক্রোম 119

ক্রোম 118

ক্রোম 117

ক্রোম 116

ক্রোম 115

ক্রোম 114

ক্রোম 113