الاسم المستعار في XLA

يصف هذا المستند واجهة برمجة التطبيقات للتسمية المستعارة XLA، والتي تتيح لك تحديد الاسم المستعار بين المخزن المؤقت للإدخال والإخراج عند إنشاء برنامج 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 واجهة برمجة التطبيقات.

تعريف التسمية المستعارة في وقت التشغيل

ويتم تحديد الاسم المستعار المحدَّد في الخطوة السابقة أثناء التجميع. أثناء التنفيذ، يمكنك استخدام واجهة برمجة التطبيقات LocalClient::RunAsync لاختيار ما إذا كنت تريد التبرع بالمورد الاحتياطي.

ويتم تضمين الموارد الاحتياطية للإدخال في البرنامج في ExecutionInput والتي تحتوي بدورها على شجرة أرقام MaybeOwningDeviceMemory. إذا تم تحديد الذاكرة على أنها مالك (يتم تمرير ملكية المخزن المؤقت إلى وقت تشغيل XLA)، يتم نقل المخزن المؤقت بالفعل، ويتم تنفيذ التحديث في مكانه الفعلي، على النحو الذي تطلبه واجهة برمجة التطبيقات للتسمية المستعارة لوقت التجميع.

ومع ذلك، إذا كان المخزن المؤقت الذي تم تسميته باسم مستعار في وقت التجميع لا يتم التبرُّع به في وقت التشغيل، يتم بدء حماية النسخ: يتم تخصيص مخزن مؤقت إضافي للإخراج O، ويتم نسخ محتوى المخزن المؤقت للإدخال P الذي كان من المفترض أن يكون اسمًا مستعارًا إلى O (وبذلك يمكن تنفيذ البرنامج بفعالية كما لو تم التبرع بالمخزن المؤقت O في وقت التشغيل).