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

الأشكال والتخطيط

يصف نموذج XLA Shape ( xla_data.proto ) الترتيب والحجم ونوع البيانات لصفيف الأبعاد N ( صفيف باختصار).

المصطلحات والتدوين والاتفاقيات

  • إن ترتيب المصفوفة يساوي عدد الأبعاد. الترتيب الحقيقي للصفيف هو عدد الأبعاد التي يزيد حجمها عن 1.

  • يتم ترقيم الأبعاد من 0 حتى N-1 لصفيف أبعاد N أرقام البعد تسميات عشوائية للراحة. لا يعني ترتيب أرقام الأبعاد هذه ترتيبًا ثانويًا / رئيسيًا معينًا في تخطيط الشكل. يتم تحديد Layout من خلال النموذج الأولي Layout .

  • حسب الاتفاقية ، يتم سرد الأبعاد بترتيب متزايد لأبعاد البعد. على سبيل المثال ، بالنسبة إلى مصفوفة ثلاثية الأبعاد للحجم [A x B x C] ، فإن البعد 0 له الحجم A ، والبعد 1 بالحجم B ، والبعد 2 بالحجم C

    بعض الأدوات المساعدة في XLA تدعم أيضًا الفهرسة السلبية ، على غرار Python ؛ البعد -1 هو البعد الأخير (ما يعادل N-1 لصفيف الأبعاد N ). على سبيل المثال ، بالنسبة للصفيف ثلاثي الأبعاد الموصوف أعلاه ، فإن البعد -1 له حجم C ، والبعد -2 له حجم B وهكذا.

  • غالبًا ما تحتوي المصفوفات ثنائية وثلاث وأربع أبعاد على أحرف محددة مرتبطة بالأبعاد. على سبيل المثال ، بالنسبة لصفيف ثنائي الأبعاد:

    • البعد 0: y
    • البعد 1: x

    لصفيف ثلاثي الأبعاد:

    • البعد 0: z
    • البعد 1: y
    • البعد 2: x

    لصفيف 4D:

    • البعد 0: p
    • البعد 1: z
    • البعد 2: y
    • البعد 3: x
  • الوظائف في XLA API التي تأخذ الأبعاد تقوم بذلك بترتيب رقم البعد المتزايد. يتطابق هذا مع الترتيب المستخدم عند تمرير الأبعاد كهيئة initializer_list ؛ على سبيل المثال

    ShapeUtil::MakeShape(F32, {A, B, C, D})

    سيتم إنشاء شكل يتكون صفيف حجم أبعاده من التسلسل [A, B, C, D] .

نسق

يصف النموذج الأولي Layout كيفية تمثيل الصفيف في الذاكرة. يتضمن بروتووت Layout المجالات التالية:

 message Layout {
  repeated int64 minor_to_major = 1;
  repeated int64 padded_dimensions = 2;
  optional PaddingValue padding_value = 3;
}
 

ترتيب البعد من الصغرى إلى الكبرى

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

على سبيل المثال ، خذ بعين الاعتبار الصفيف ثنائي الأبعاد التالي [2 x 3] :

 a b c
d e f
 

هنا البعد 0 هو الحجم 2 ، والبعد 1 هو الحجم 3. إذا كان الحقل minor_to_major في التخطيط هو [0, 1] فإن البعد 0 هو البعد minor_to_major والبعد 1 هو البعد الأكبر. هذا يتوافق مع التخطيط التالي في الذاكرة الخطية:

 a d b e c f
 

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

من ناحية أخرى ، إذا كان الحقل minor_to_major في التخطيط هو [1, 0] فإن التخطيط في الذاكرة الخطية هو:

 a b c d e f
 

ترتيب البعد الثانوي إلى الرئيسي لـ N-1 إلى 0 بالنسبة لصفيف الأبعاد N هو أقرب إلى الصف الرئيسي (في الرتبة 2). إذا افترضنا ترتيبًا رتيبًا للأبعاد ، فإن اسمًا آخر قد نستخدمه للإشارة إلى هذا التخطيط في الكود هو ببساطة "dim 0 is major".

ترتيب افتراضي إلى رئيسي

التخطيط الافتراضي للأشكال التي تم إنشاؤها حديثًا هو "ترتيب الأبعاد من كبير إلى ثانوي" (أقرب إلى الصف الرئيسي في الترتيب 2).

حشوة

ويعرف الحشو في اختياري padded_dimensions و padding_value المجالات. يصف الحقل padded_dimensions الأحجام (العرض) التي يتم padded_dimensions كل بُعد فيها. إذا كان موجودًا ، padded_dimensions أن يساوي عدد العناصر في padded_dimensions مرتبة الشكل.

على سبيل المثال ، بالنظر إلى المصفوفة [2 x 3] المحددة أعلاه ، إذا كانت padded_dimensions [3, 5] فإن البعد 0 padded_dimensions بعرض 3 والبعد 1 محشو بعرض 5. المخطط في الذاكرة الخطية (بافتراض قيمة الحشو 0 وتخطيط العمود الرئيسي):

 a d 0 b e 0 c f 0 0 0 0 0 0 0
 

هذا يعادل تخطيط المصفوفة التالية بنفس ترتيب البعد الثانوي إلى الرئيسي:

 a b c 0 0
d e f 0 0
0 0 0 0 0
 

فهرسة المصفوفات

يوفر IndexUtil في index_util.h الأدوات المساعدة للتحويل بين المؤشرات متعددة الأبعاد والمؤشرات الخطية التي يتم إعطاؤها شكلاً وتخطيطًا . تتضمن المؤشرات متعددة الأبعاد فهرس int64 لكل بُعد. الفهارس الخطية هي قيمة int64 واحدة int64 في المخزن المؤقت الذي يحتوي على الصفيف. اطلع على shape_util.h و layout_util.h في نفس الدليل للحصول على الأدوات المساعدة التي تبسط إنشاء الأشكال layout_util.h ومعالجتها.