الاسم المستعار في 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 لاختيار ما إذا كنت تريد التبرّع بالمورد الاحتياطي.

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

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