XLA ShapeProto
প্রোটো ( xla_data.proto ) একটি N-মাত্রিক অ্যারে ( সংক্ষেপে অ্যারে ) এর মাত্রা, আকার এবং ডেটা প্রকারের সংখ্যা বর্ণনা করে।
পরিভাষা, স্বরলিপি, এবং নিয়মাবলী
একটি অ্যারের ডাইমেনশনের সঠিক সংখ্যা হল সেই ডাইমেনশনের সংখ্যা যার সাইজ 1 এর থেকে বেশি।
একটি
N
ডাইমেনশনাল অ্যারের জন্য0
থেকেN-1
পর্যন্ত ডাইমেনশন সংখ্যা করা হয়। একটি মাত্রার আকার একটি অ-ঋণাত্মক পূর্ণসংখ্যা। বিশেষ করে, আকার 0 বৈধ। মাত্রা সংখ্যা সুবিধার জন্য নির্বিচারে লেবেল হয়. এই মাত্রা সংখ্যার ক্রম আকৃতির বিন্যাসে একটি নির্দিষ্ট ছোট/বড় ক্রম নির্দেশ করে না। লেআউটটিLayoutProto
প্রোটো দ্বারা নির্ধারিত হয়।নিয়ম অনুসারে, মাত্রাগুলিকে মাত্রা সংখ্যার ক্রমবর্ধমান ক্রম অনুসারে তালিকাভুক্ত করা হয়। উদাহরণস্বরূপ, আকারের একটি 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
- মাত্রা 0:
এক্সএলএ এপিআই-এর ফাংশন যা মাত্রা গ্রহণ করে তা মাত্রা সংখ্যার ক্রমবর্ধমান ক্রমে করে। এটি একটি
initializer_list
হিসাবে মাত্রা পাস করার সময় ব্যবহৃত ক্রম অনুসারে মেলে; যেমনShapeUtil::MakeShape(F32, {A, B, C, D})
একটি আকৃতি তৈরি করবে যার মাত্রা আকার অ্যারে ক্রম
[A, B, C, D]
নিয়ে গঠিত।
লেআউট
LayoutProto
প্রোটো বর্ণনা করে যে কিভাবে একটি অ্যারে মেমরিতে উপস্থাপন করা হয়। এটি নিম্নলিখিত ক্ষেত্রগুলি অন্তর্ভুক্ত করে:
message LayoutProto {
repeated int64 minor_to_major;
int64 tail_padding_alignment_in_elements;
...
}
গৌণ থেকে প্রধান মাত্রা ক্রম
শুধুমাত্র প্রয়োজনীয় ক্ষেত্র হল 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
মাত্রিক বিন্যাসের জন্য N-1
এর একটি ছোট-থেকে-মেজর ডাইমেনশন ক্রম 0
থেকে নেমে সারি-মেজর (2-মাত্রিকের জন্য) অনুরূপ। মাত্রার একঘেয়ে ক্রম অনুমান করে, আমরা কোডে এই লেআউটটি উল্লেখ করতে পারি এমন আরেকটি উপায় হল "dim 0 is major"।
ডিফল্ট ছোট থেকে বড় অর্ডারিং
নতুন তৈরি আকৃতিগুলির জন্য ডিফল্ট বিন্যাস হল "মাত্রা ক্রম প্রধান থেকে ছোট" (যেমন [N-1, ..., 0]
)।
প্যাডিং
tail_padding_alignment_in_elements
ক্ষেত্রটি উপাদানের সংখ্যার পরিপ্রেক্ষিতে টাইল্ড অ্যারের সারিবদ্ধকরণকে সংজ্ঞায়িত করে। টাইলিং প্রয়োগ করার পরে, প্যাডেড উপাদানগুলি লেআউটের শেষে যোগ করা হবে যতক্ষণ না উপাদানগুলির মোট সংখ্যা এই মানের একাধিক হয়।
অ্যারে মধ্যে ইন্ডেক্সিং
index_util.h- এ শ্রেণী IndexUtil
একটি আকার এবং বিন্যাস দেওয়া বহুমাত্রিক সূচক এবং রৈখিক সূচকগুলির মধ্যে রূপান্তর করার জন্য উপযোগিতা প্রদান করে। বহুমাত্রিক সূচক প্রতিটি মাত্রার জন্য একটি int64
সূচক অন্তর্ভুক্ত করে। রৈখিক সূচকগুলি হল একটি একক int64
মান যা অ্যারে ধরে থাকা বাফারে সূচী করে। আকৃতি এবং লেআউট তৈরি এবং ম্যানিপুলেশন সহজতর করে এমন ইউটিলিটিগুলির জন্য একই ডিরেক্টরিতে shape_util.h
এবং layout_util.h
দেখুন।