টাইল করা বিন্যাস


চিত্র 1

চিত্র 1 দেখায় কিভাবে একটি অ্যারে F32[3,5] 2x2 টাইলিং সহ মেমরিতে রাখা হয়। এই লেআউটের সাথে একটি আকৃতি F32[3,5]{1,0:T(2,2)} হিসাবে লেখা হয়, যেখানে 1,0 মাত্রার ভৌত ক্রম সম্পর্কিত (লেআউটে minor_to_major ক্ষেত্র) যখন (2,2) কোলন একটি 2x2 টালি দ্বারা ভৌত মাত্রার টাইলিং নির্দেশ করে।

স্বজ্ঞাতভাবে, টাইলগুলি আকৃতিকে আবৃত করার জন্য বিছিয়ে দেওয়া হয় এবং তারপরে প্রতিটি টাইলের মধ্যে, উপাদানগুলিকে টাইলিং ছাড়াই বিছিয়ে দেওয়া হয়, যেমন উপরের উদাহরণে, যেখানে উদাহরণের ডান অংশটি মেমরিতে লেআউট দেখায়, সাদা প্যাডিং উপাদানগুলি সহ সম্পূর্ণ 2x2 টাইল থাকার জন্য যোগ করা হয়েছে যদিও মূল অ্যারের সীমানা সমান নয়।

প্যাডিং এর অতিরিক্ত উপাদান কোন নির্দিষ্ট মান ধারণ করার প্রয়োজন হয় না.

টাইলিংয়ের জন্য রৈখিক সূচক সূত্র একটি আকৃতি এবং একটি টাইল দেওয়া হয়

টাইলিং ছাড়াই, একটি উপাদান e=(e n , e n-1 , ... , e 1 ) অ্যারে সীমা সহ একটি অ্যারেতে d=(d n , d n-1 , ... , d 1 ) (d1 হল সবচেয়ে গৌণ মাত্রা) অবস্থানে প্রধান থেকে ছোট ক্রম দ্বারা বিন্যস্ত করা হয়:

রৈখিক_সূচক (ই, ডি)
= লিনিয়ার_ইনডেক্স((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)
= লিনিয়ার_ইনডেক্স((⌊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 ⌉, ... , ⌈d 1 /t 1 ⌉), এবং (e n mod t n , ... , e 1 mod t 1 ), যা একটি অন্তর্বর্তী-টাইল সূচকের সাথে মিলে যায়। সিল ফাংশন ⌈d i /t i ⌉ তে প্রদর্শিত হয় কারণ যদি টাইলস বৃহত্তর অ্যারের সীমানা অতিক্রম করে, চিত্র 1 এর মতো প্যাডিং ঢোকানো হয়। টাইলসের মধ্যে টাইলস এবং উপাদান উভয়ই টাইলস ছাড়াই পুনরাবৃত্তিমূলকভাবে বিছিয়ে দেওয়া হয়।

চিত্র 1-এর উদাহরণের জন্য, (1,1,0,1) এর সম্মিলিত স্থানাঙ্ক ভেক্টরের জন্য উপাদানের (2,3) টাইল সূচক (1,1) এবং ভিতরে-টাইল সূচক (0,1) রয়েছে। (2,3,2,2) এর সম্মিলিত ভেক্টরের জন্য টাইল সূচকের সীমা (2,3) এবং টাইল নিজেই (2,2)। যৌক্তিক আকারে সূচক (2,3) সহ উপাদানটির জন্য টাইল সহ রৈখিক সূচকটি তখন হয়

linear_index_with_tile((2,3), (3,5), (2,2))
= লিনিয়ার_ইনডেক্স((1,1,0,1), (2,3,2,2))
= লিনিয়ার_ইনডেক্স((1,1), (2,3)) ∙ 2 ∙ 2 + লিনিয়ার_ইনডেক্স((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 ) চূড়ান্ত আকারে এই উপাদানটির সাথে ম্যাপ করা হয়েছে:
(⌊e n /t n ⌋, ... , ⌊e 0 /t 0 ⌋, e n mod t n , ... , e 1 mod t 1 )। এটা দেখতে সহজ যে উপাদানটির রৈখিক সূচকটি প্রত্যাশিত হিসাবে উপরের সূত্রটি অনুসরণ করে।

বারবার টাইলিং

বারবার প্রয়োগ করে XLA এর টাইলিং আরও বেশি নমনীয় হয়ে ওঠে।


চিত্র ২

চিত্র 2 দেখায় কিভাবে 4x8 আকারের একটি অ্যারে দুটি স্তরের টাইলিং দ্বারা টাইল করা হয় (প্রথমে 2x4 তারপর 2x1)। আমরা এই পুনরাবৃত্ত টাইলিংকে (2,4)(2,1) হিসাবে উপস্থাপন করি। প্রতিটি রঙ একটি 2x4 টালি নির্দেশ করে এবং প্রতিটি লাল বর্ডার বক্স একটি 2x1 টালি। সংখ্যাগুলি টাইল্ড বিন্যাসে সেই উপাদানটির স্মৃতিতে রৈখিক সূচক নির্দেশ করে। এই বিন্যাসটি TPU-তে BF16-এর জন্য ব্যবহৃত বিন্যাসের সাথে মেলে, প্রাথমিক টাইলটি বড়, অর্থাৎ টাইলিংটি হল (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 পর্যন্ত বৃদ্ধি পেয়েছে। এই ধাপটি টাইল ভেক্টরের প্রতিটি তারকাচিহ্নের জন্য পুনরাবৃত্তি করা হয়।