หน้านี้ได้รับการแปลโดย Cloud Translation API
Switch to English

รูปทรงและเค้าโครง

XLA Shape proto ( xla_data.proto ) อธิบายอันดับขนาดและประเภทข้อมูลของอาร์เรย์ N-มิติ (ย่อมาจาก อาร์เรย์ )

คำศัพท์สัญกรณ์และอนุสัญญา

  • อันดับของอาร์เรย์จะเท่ากับจำนวนมิติ อันดับที่แท้จริง ของอาร์เรย์คือจำนวนมิติที่มีขนาดมากกว่า 1

  • ขนาดจะถูกกำหนดหมายเลขตั้งแต่ 0 ถึง N-1 สำหรับอาร์เรย์ N มิติ หมายเลขมิติเป็นป้ายกำกับโดยพลการเพื่อความสะดวก ลำดับของตัวเลขมิติเหล่านี้ไม่ได้บ่งบอกถึงการสั่งซื้อเล็กน้อย / สำคัญในรูปแบบของรูปร่าง เค้าโครงถูกกำหนดโดย proto Layout

  • ตามแบบแผนมิติจะแสดงรายการตามลำดับของหมายเลขมิติที่เพิ่มขึ้น ตัวอย่างเช่นสำหรับอาร์เรย์ขนาด 3 มิติ [A x B x C] มิติ 0 มีขนาด A มิติ 1 มีขนาด B และมิติ 2 มีขนาด C

    ยูทิลิตี้บางตัวใน XLA ยังรองรับการสร้างดัชนีเชิงลบเช่นเดียวกับ Python มิติ -1 เป็นมิติสุดท้าย (เทียบเท่ากับ N-1 สำหรับอาร์เรย์ N มิติ) ตัวอย่างเช่นสำหรับอาร์เรย์ 3 มิติที่อธิบายไว้ข้างต้นมิติ -1 มีขนาด C ส่วนมิติ -2 มีขนาด B เป็นต้น

  • อาร์เรย์สองมิติสามและสี่มักจะมีตัวอักษรเฉพาะที่เกี่ยวข้องกับมิติ ตัวอย่างเช่นสำหรับอาร์เรย์ 2D:

    • ขนาด 0: y
    • ขนาด 1: x

    สำหรับอาร์เรย์ 3D:

    • ขนาด 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 มิติต่อไปนี้ [2 x 3] :

 a b c
d e f
 

นี่มิติข้อมูล 0 คือขนาด 2 และมิติ 1 คือขนาด 3 หากฟิลด์ minor_to_major ในโครงร่างคือ [0, 1] ดังนั้นมิติ 0 คือส่วนย่อยรองมากที่สุดและมิติ 1 เป็นมิติที่สำคัญที่สุด สิ่งนี้สอดคล้องกับเค้าโครงต่อไปนี้ในหน่วยความจำเชิงเส้น:

 a d b e c f
 

ลำดับมิติรองลงมาที่สำคัญนี้คือ 0 ถึง N-1 คล้ายกับ คอลัมน์ใหญ่ (อันดับ 2) สมมติว่ามีการเรียงลำดับมิติเดียวชื่ออื่นที่เราอาจใช้เพื่ออ้างถึงเลย์เอาต์นี้ในรหัสคือ "dim 0 is minor"

ในทางกลับกันถ้าฟิลด์ minor_to_major ในโครงร่างคือ [1, 0] ดังนั้นโครงร่างในหน่วยความจำเชิงเส้นคือ:

 a b c d e f
 

ลำดับขนาดรองลงมาที่สำคัญของ N-1 ลงไปที่ 0 สำหรับอาร์เรย์ N มิตินั้นคล้ายกับ แถวหลัก (ที่อันดับ 2) สมมติว่ามีการเรียงลำดับขนาดเดียวชื่ออื่นที่เราอาจใช้เพื่ออ้างถึงเลย์เอาต์นี้ในรหัสคือ "สลัว 0 เป็นหลัก"

การสั่งซื้อรองลงมาเป็นค่าเริ่มต้น

เลย์เอาต์เริ่มต้นสำหรับรูปร่างที่สร้างขึ้นใหม่คือ "ลำดับของมิติเป็นใหญ่ถึงรอง" (คล้ายกับเรียงแถวหลักที่อันดับ 2)

การขยายความ

การเติมเต็มถูกกำหนดใน padded_dimensions เสริม padded_dimensions และ padding_value ฟิลด์ padded_dimensions อธิบายถึงขนาด (ความกว้าง) ที่แต่ละมิติจะถูกเสริม ถ้ามีอยู่จำนวนขององค์ประกอบใน padded_dimensions ต้องเท่ากับอันดับของรูปร่าง

ตัวอย่างเช่นเมื่อกำหนด [2 x 3] อาร์เรย์ที่กำหนดไว้ด้านบนหาก padded_dimensions คือ [3, 5] ดังนั้นมิติ 0 จะถูกเพิ่มความกว้างเป็น 3 และมิติที่ 1 จะถูกปรับให้มีความกว้างเท่ากับ 5 โครงร่างในหน่วยความจำเชิงเส้น (สมมติว่า ค่า padding ของ 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 เดียวซึ่งดัชนีลงในบัฟเฟอร์ที่เก็บอาร์เรย์ ดูที่ shape_util.h และ layout_util.h ในไดเร็กทอรีเดียวกันสำหรับยูทิลีตีที่ทำให้การสร้างและการจัดการรูปร่างและเลย์เอาต์ง่ายขึ้น