ترجمت واجهة Cloud Translation API‏ هذه الصفحة.
Switch to English

تخطيط مبلط

شكل 1

يوضح الشكل 1 كيف يتم وضع مصفوفة F32 [3،5] في الذاكرة مع تجانب 2x2. تتم كتابة شكل بهذا التخطيط بالشكل F32 [3،5] {1،0: (2،2)} ، حيث يتعلق 1.0 بالترتيب المادي للأبعاد (الحقل الثانوي_الرئيسي في التخطيط) بينما (2.2) بعد يشير القولون إلى تجانب الأبعاد المادية من خلال بلاطة 2x2.

يتم وضع المربعات بشكل بديهي لتغطية الشكل ، ثم يتم وضع العناصر داخل كل بلاطة دون تجانب ، كما هو موضح في المثال أعلاه ، حيث يوضح الجزء الأيمن من المثال التخطيط في الذاكرة ، بما في ذلك عناصر الحشو البيضاء التي تمت إضافتها من أجل الحصول على مربعات 2x2 كاملة على الرغم من أن حدود الصفيف الأصلية ليست حتى.

لا يلزم أن تحتوي العناصر الإضافية في المساحة المتروكة على أي قيمة معينة.

صيغ الفهرس الخطي للبلاط نظرا لشكل وبلاط

بدون تجانب ، عنصر e = (e n ، e n-1 ، ...، e 1 ) في مصفوفة بحدود صفيف d = (d n ، d n-1 ، ...، d 1 ) (d1 is البُعد الأصغر) تم وضعه بواسطة أمر رئيسي إلى ثانوي في الموضع:

الفهرس الخطي (هـ ، د)
= linear_index ((e n ، e n-1 ، ...، e 1 )، (d n ، d n-1 ، ...، d 1 ))
= e n d n-1 ... d 1 + e n-1 d n-2 ... d 1 + ... + e 1

من أجل بساطة التدوين في هذا المستند ، نفترض أن للبلاط نفس عدد أبعاد الصفيف. في تنفيذ XLA للبلاط ، يتم تعميم هذا على التبليط بأبعاد أقل عن طريق ترك الأبعاد الأولية الرئيسية دون تغيير وتطبيق التجانب فقط على الأبعاد الأصغر ، بحيث يشير البلاط المحدد إلى لاحقة الأبعاد المادية لل يتم تجانب الشكل.

عند استخدام تقسيم الحجم (t n ، t n-1 ، ...، t 1 ) ، يتم تعيين عنصر في الصفيف بمؤشرات (e n ، e n-1 ، ...، e 1 ) على هذا الموضع في التخطيط النهائي:

linear_index_with_tile (e ، d ، t)
= linear_index ((⌊e / t⌋، e mod t)، (⌈d / t⌉، t)) (الحساب عبارة عن عنصر ، (a ، b) هو تسلسل)
= linear_index ((⌊e n / t n ⌋، ...، ⌊e 1 / t 1 ⌋، e n mod t n ، ...، e 1 mod t 1 )، (⌈d n / t n ⌉، ...، ⌈d 1 / t 1 ⌉، t n ، t n-1 ، ...، t 1 ))
= linear_index ((⌊e n / t n ⌋، ...، ⌊e 1 / t 1 ⌋)، (⌈d n / t n ⌉، ...، ⌈d 1 / t 1 ⌉)) ∙ t n t n-1 ... t 1 + linear_index ((e n mod t n ، ...، e 1 mod t 1 )، (t n ، t n-1 ، ...، t 1 ))

يمكن اعتبار التخطيط على أنه يتكون من جزأين: (⌊e n / t n ⌋ ، ... ، ⌊e 1 / t 1 ⌋) ، والذي يتوافق مع فهرس البلاط في مجموعة من مربعات الحجم (⌈d n / t n ⌉ و ... و 1d 1 / t 1 ⌉) و (e n mod t n ، ...، e 1 mod t 1 ) ، وهو ما يتوافق مع فهرس داخلي. تظهر وظيفة السقف في id i / t i ⌉ لأنه إذا تجاوز البلاط حدود حدود الصفيف الأكبر ، يتم إدراج الحشو كما في الشكل 1. يتم وضع كل من البلاط والعناصر داخل البلاط بشكل متكرر بدون تجانب.

للمثال في الشكل 1 ، يحتوي العنصر (2،3) على مؤشر تجانب (1،1) ، وفهرس داخل تجانب (0،1) ، لمتجه إحداثي مدمج (1 ، 1 ، 0 ، 1). مؤشرات البلاط لها حدود (2 ، 3) والبلاط نفسه هو (2 ، 2) لناقل مشترك من (2 ، 3 ، 2 ، 2). عندئذٍ يكون الفهرس الخطي مع التجانب للعنصر ذي الفهرس (2 ، 3) في الشكل المنطقي

linear_index_with_tile ((2،3)، (3،5)، (2،2))
= linear_index ((1،1،0،1)، (2،3،2،2))
= linear_index ((1،1)، (2،3)) ∙ 2 ∙ 2 + linear_index ((0،1)، (2،2))
= (1 ∙ 3 + 1) ∙ 2 ∙ 2 + (0 ∙ 2 + 1)
= 17.

تجانب كما تبديل تبديل الشكل

يعمل التخطيط القائم على التجانب على النحو التالي:
ضع في اعتبارك مجموعة من الأبعاد (d n ، d n-1 ، ... ، d1) (d1 هو البعد الأصغر). عندما يتم وضعه مع تجانب الحجم (t n ، t n-1 ، ...، t 1 ) (t 1 هو البعد الأصغر) ، يمكن وصف هذا التجانب من حيث تبديل الوسادة في الشكل التالي الطريق.

  1. المصفوفة مبطنة إلى (⌈d n / t n ⌉ ∙ t n ، ...، ⌈d 1 / t 1 ⌉ ∙ t 1 ).
  2. يتم تقسيم كل بُعد i إلى (⌈d i / t i ⌉، t i ) ، أي يتم إعادة تشكيل الصفيف إلى
    (⌈d n / t n ⌉، t n ، ...، ⌈d 1 / t 1 ⌉، t 1 ).
    لا يوجد تغيير في التصميم المادي في هذا الشكل في حد ذاته ، لذا فإن إعادة التشكيل هذه هي شكل بت. إذا لم يفكر المرء بشكل صريح في التجانب ، يمكن أن يعيد هذا الشكل التعبير عن أي شكل بنفس عدد العناصر مثل الشكل المبطن - المثال هنا هو كيفية التعبير عن البلاط بهذه الطريقة.
  3. يحدث التحويل بتحريك t n ، ...، t 1 إلى الأبعاد الأصغر مع الحفاظ على ترتيبها النسبي ، بحيث يصبح ترتيب الأبعاد من الأكبر إلى الأكثر ثانوية
    (⌈d n / t n ⌉، ...، ⌈d 1 / t 1 ⌉، t n ، ...، t 1 ).

الشكل النهائي له البادئة
(⌈d n / t n ⌉، ...، ⌈d 1 / t 1 ⌉) ، الذي يصف عدد المربعات في كل بُعد. تم تعيين عنصر في الصفيف (e n ، ...، e 1 ) لهذا العنصر في الشكل النهائي:
(ne n / t n ⌋، ...، ⌊e 0 / t 0 ⌋، e n mod t n ، ...، e 1 mod t 1 ). من السهل ملاحظة أن الفهرس الخطي للعنصر يتبع الصيغة أعلاه كما هو متوقع.

تجانب متكرر

يصبح تبليط XLA أكثر مرونة من خلال تطبيقه بشكل متكرر.

الشكل 2

يوضح الشكل 2 كيف يتم تجانب مصفوفة من حجم 4x8 من خلال مستويين من البلاط (الأول 2 × 4 ثم 2 × 1). نحن نمثل هذا التبليط المتكرر (2،4) (2،1). يشير كل لون إلى تجانب 2x4 وكل مربع حد أحمر هو تجانب 2x1. تشير الأرقام إلى الفهرس الخطي في ذاكرة ذلك العنصر في تنسيق التجانب. يتطابق هذا التنسيق مع التنسيق المستخدم لـ BF16 على TPU ، باستثناء أن التجانب الأولي أكبر ، أي أن التجانب هو (8،128) (2،1) ، حيث يكون الغرض من التجانب الثاني بمقدار 2x1 هو جمع قيمتين من 16 بت معًا تشكل قيمة واحدة 32 بت بطريقة تتماشى مع بنية TPU.

لاحظ أن المربع الثاني أو الأحدث يمكن أن يشير إلى كل من الأبعاد الصغيرة داخل التجانب ، والتي تعيد ترتيب البيانات داخل التجانب ، كما في هذا المثال مع (8،128) (2،1) ، ولكن يمكن أن تشير أيضًا إلى التجانب المتقاطع الرئيسي الأبعاد من التبليط السابق.

الجمع بين الأبعاد باستخدام البلاط

كما يدعم تبليط XLA أيضًا دمج الأبعاد. على سبيل المثال ، يمكنها دمج الأبعاد في F32 [2،7،8،11،10] {4،3،2،1،0} في F32 [112،110] {1،0} أولاً قبل تجانبها مع (2،3 ). البلاط المستخدم هو (∗ ، ∗ ، 2 ، ∗ ، 3). هنا تشير علامة النجمة في البلاط إلى أخذ هذا البعد ودمجه مع البعد التالي الأكثر طفيفة. يمكن تجميع الأبعاد المتجاورة المتعددة معًا في بُعد واحد. يتم تمثيل البعد المصنف بقيمة تجانب -1 في هذا البعد من التجانب ، وهو غير صالح بخلاف ذلك في تجانب بحجم البعد.

بتعبير أدق ، إذا تم التخلص من البعد i من الشكل من خلال علامة النجمة في المربع ، ثم قبل تطبيق التعريف المسبق للبلاط ، تتم إزالة هذا البعد من كل من الشكل المبلط ومتجه البلاط ، وما هو البعد i-1 من الشكل تمت زيادة الصفيف من d i-1 إلى d i d i-1 . تتكرر هذه الخطوة لكل علامة نجمية في ناقل البلاط.