يصف هذا المستند واجهة برمجة تطبيقات الاسم المستعار 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
يتم التبرع به في وقت التشغيل).