আকার এবং বিন্যাস

XLA Shape প্রোটো ( xla_data.proto ) একটি N-মাত্রিক অ্যারের ( সংক্ষেপে অ্যারে ) এর র‍্যাঙ্ক, আকার এবং ডেটা টাইপ বর্ণনা করে।

পরিভাষা, স্বরলিপি, এবং নিয়মাবলী

  • একটি অ্যারের র্যাঙ্ক মাত্রা সংখ্যার সমান। একটি অ্যারের প্রকৃত র‍্যাঙ্ক হল মাত্রার সংখ্যা যার আকার 1-এর বেশি।

  • একটি N ডাইমেনশনাল অ্যারের জন্য 0 থেকে N-1 পর্যন্ত ডাইমেনশন সংখ্যা করা হয়। মাত্রা সংখ্যা সুবিধার জন্য নির্বিচারে লেবেল হয়. এই মাত্রা সংখ্যার ক্রম আকৃতির বিন্যাসে একটি নির্দিষ্ট ছোট/বড় ক্রম নির্দেশ করে না। বিন্যাস Layout প্রোটো দ্বারা নির্ধারিত হয়।

  • নিয়ম অনুসারে, মাত্রাগুলিকে মাত্রা সংখ্যার ক্রমবর্ধমান ক্রম অনুসারে তালিকাভুক্ত করা হয়। উদাহরণস্বরূপ, আকারের একটি 3-মাত্রিক বিন্যাসের জন্য [A x B x C] , মাত্রা 0-এর আকার A , মাত্রা 1-এর আকার B , এবং মাত্রা 2-এর আকার C রয়েছে।

    XLA-তে কিছু ইউটিলিটি পাইথনের মতো নেতিবাচক সূচীকরণকেও সমর্থন করে: ডাইমেনশন -1 হল শেষ মাত্রা ( N ডাইমেনশনাল অ্যারের জন্য N-1 এর সমতুল্য)। উদাহরণস্বরূপ, উপরে বর্ণিত 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
  • এক্সএলএ এপিআই-এর ফাংশন যা মাত্রা গ্রহণ করে তা মাত্রা সংখ্যার ক্রমবর্ধমান ক্রমে করে। এটি একটি 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 ডাইমেনশনাল অ্যারের জন্য) যার প্রথম মানটি শেষ মান পর্যন্ত সর্বাধিক-অপ্রধান মাত্রা যা সর্বাধিক-প্রধান মাত্রা। রৈখিক মেমরিতে বিন্যস্ত অ্যারের উপাদানগুলির মধ্য দিয়ে ধাপে ধাপে যাওয়ার সময় সর্বাধিক-অপ্রধান মাত্রা হল মাত্রা যা সবচেয়ে দ্রুত পরিবর্তিত হয়।

উদাহরণস্বরূপ, নিম্নলিখিত আকারের 2D অ্যারে বিবেচনা করুন [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

N-1 পর্যন্ত 0 এর এই গৌণ-থেকে-মেজর মাত্রা ক্রমটি কলাম-মেজর (র্যাঙ্ক 2-এ) অনুরূপ। মাত্রার একঘেয়ে ক্রম অনুমান করে, আমরা কোডে এই লেআউটটি উল্লেখ করতে পারি এমন আরেকটি উপায় হল "dim 0 is minor"।

অন্যদিকে, যদি লেআউটে minor_to_major ক্ষেত্রটি [1, 0] হয় তবে লিনিয়ার মেমরিতে লেআউটটি হল:

a b c d e f

N-1 এর একটি ছোট-থেকে-মেজর ডাইমেনশন অর্ডার একটি N ডাইমেনশনাল অ্যারের জন্য 0 থেকে নেমে সারি-মেজর (র্যাঙ্ক 2-এ) এর মতো। মাত্রার একঘেয়ে ক্রম অনুমান করে, আমরা কোডে এই লেআউটটি উল্লেখ করতে পারি এমন আরেকটি উপায় হল "dim 0 is major"।

ডিফল্ট ছোট থেকে বড় অর্ডারিং

নতুন তৈরি আকৃতির ডিফল্ট বিন্যাস হল "ডাইমেনশন অর্ডার ইজ মেজর-টু-মাইনর" (র‍্যাঙ্ক 2-এ সারি-মেজরের মতো)।

প্যাডিং

প্যাডিং ঐচ্ছিক padded_dimensions এবং padding_value ক্ষেত্রগুলিতে সংজ্ঞায়িত করা হয়। ফিল্ড padded_dimensions সেই মাপ (প্রস্থ) বর্ণনা করে যেখানে প্রতিটি ডাইমেনশন প্যাড করা হয়। উপস্থিত থাকলে, padded_dimensions উপাদানের সংখ্যা অবশ্যই আকৃতির র্যাঙ্কের সমান হবে।

উদাহরণস্বরূপ, উপরে সংজ্ঞায়িত [2 x 3] অ্যারে দেওয়া হলে, padded_dimensions যদি [3, 5] হয় তবে মাত্রা 0 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

অ্যারে মধ্যে ইন্ডেক্সিং

index_util.h- এ শ্রেণী IndexUtil একটি আকার এবং বিন্যাস দেওয়া বহুমাত্রিক সূচক এবং রৈখিক সূচকগুলির মধ্যে রূপান্তর করার জন্য উপযোগিতা প্রদান করে। বহুমাত্রিক সূচক প্রতিটি মাত্রার জন্য একটি int64 সূচক অন্তর্ভুক্ত করে। রৈখিক সূচকগুলি হল একটি একক int64 মান যা অ্যারে ধরে থাকা বাফারে সূচী করে। আকৃতি এবং লেআউট তৈরি এবং ম্যানিপুলেশন সহজতর করে এমন ইউটিলিটিগুলির জন্য একই ডিরেক্টরিতে shape_util.h এবং layout_util.h দেখুন।