XLA এ উপনামকরণ

এই নথিটি XLA অ্যালিয়াসিং API বর্ণনা করে, যা আপনাকে XLA প্রোগ্রাম তৈরি করার সময় ইনপুট এবং আউটপুট বাফারগুলির মধ্যে অ্যালিয়াসিং নির্দিষ্ট করতে দেয়।

কম্পাইল-টাইমে অ্যালিয়াসিং সংজ্ঞায়িত করা

উদাহরণস্বরূপ, একটি তুচ্ছ HLO মডিউল বিবেচনা করুন যা তার ইনপুটে 1 যোগ করে:

HloModule increment

ENTRY entry {
  %p = f32[] parameter(0)
  %c = f32[] constant(1)
  ROOT %out = f32[] add(%p, %c)
}

এই মডিউলটি দুটি 4-বাইট বাফার বরাদ্দ করবে: একটি ইনপুট %p এর জন্য এবং একটি আউটপুট %out এর জন্য।

যাইহোক, প্রায়শই আপডেটটি জায়গায় করা বাঞ্ছনীয় (উদাহরণস্বরূপ, যদি ফ্রন্টএন্ডে এক্সপ্রেশন তৈরি করে ইনপুট ভেরিয়েবলটি গণনার পরে আর জীবিত থাকে না, যেমন ইনক্রিমেন্ট p++ )।

এই ধরনের একটি আপডেট দক্ষতার সাথে সম্পাদন করতে, আপনি ইনপুট উপনাম নির্দিষ্ট করতে পারেন:

HloModule increment, input_output_alias={ {}: 0 }

ENTRY entry {
  %p = f32[] parameter(0)
  %c = f32[] constant(1)
  ROOT %out = f32[] add(%p, %c)
}

বিন্যাসটি নির্দিষ্ট করে যে সম্পূর্ণ আউটপুট ( {} দ্বারা চিহ্নিত) ইনপুট প্যারামিটার 0 এর সাথে উপনাম করা হয়েছে।

প্রোগ্রাম্যাটিকভাবে অ্যালিয়াসিং নির্দিষ্ট করতে, XlaBuilder::SetUpAlias ​​API দেখুন।

রানটাইমে অ্যালিয়াসিং সংজ্ঞায়িত করা

পূর্ববর্তী ধাপে সংজ্ঞায়িত অ্যালিয়াসিং সংকলনের সময় নির্দিষ্ট করা হয়। কার্যকর করার সময়, আপনি বাফার দান করবেন কিনা তা চয়ন করতে LocalClient::RunAsync API ব্যবহার করতে পারেন।

প্রোগ্রামের ইনপুট বাফারগুলি ExecutionInput s-এ মোড়ানো হয়, যার ফলে MaybeOwningDeviceMemory এর একটি ট্রি থাকে। যদি মেমরি মালিকানা হিসাবে নির্দিষ্ট করা হয় (বাফারের মালিকানা XLA রানটাইমে পাস করা হয়), বাফারটি আসলে দান করা হয়, এবং কম্পাইল-টাইম অ্যালিয়াসিং API দ্বারা অনুরোধ অনুযায়ী আপডেটটি কার্যকর করা হয়।

যাইহোক, যদি কম্পাইলের সময় উপনামযুক্ত বাফারটি রানটাইমে দান না করা হয়, তাহলে অনুলিপি-সুরক্ষা শুরু হয়: একটি অতিরিক্ত আউটপুট বাফার O বরাদ্দ করা হয়, এবং ইনপুট বাফার P এর বিষয়বস্তু যা উপনাম করার জন্য ছিল তা O তে অনুলিপি করা হয়। (তাই কার্যকরভাবে প্রোগ্রামটি কার্যকর করতে পারে যেন বাফার O রানটাইমে দান করা হয়েছিল)।