paint-brush
CPU এবং GPU ক্ষমতাগুলির একটি হজমযোগ্য উচ্চ-স্তরের ওভারভিউদ্বারা@venkat2811
679 পড়া
679 পড়া

CPU এবং GPU ক্ষমতাগুলির একটি হজমযোগ্য উচ্চ-স্তরের ওভারভিউ

দ্বারা Venkat Raman15m2024/04/23
Read on Terminal Reader

অতিদীর্ঘ; পড়তে

নিবন্ধটি সমান্তরাল কম্পিউটিং কাজগুলি পরিচালনা করার ক্ষেত্রে CPU এবং GPU-গুলির মধ্যে মূল পার্থক্যগুলিকে ব্যাখ্যা করে, ভন নিউম্যান আর্কিটেকচার, হাইপার-থ্রেডিং এবং নির্দেশনা পাইপলাইনিংয়ের মতো ধারণাগুলিকে কভার করে৷ এটি গভীর শিক্ষার অ্যালগরিদমগুলিকে ত্বরান্বিত করার জন্য গ্রাফিক্স প্রসেসর থেকে শক্তিশালী সরঞ্জামগুলিতে GPU গুলির বিবর্তন ব্যাখ্যা করে৷
featured image - CPU এবং GPU ক্ষমতাগুলির একটি হজমযোগ্য উচ্চ-স্তরের ওভারভিউ
Venkat Raman HackerNoon profile picture

দ্য ডাই-এ কী ঘটে তার একটি হজমযোগ্য উচ্চ-স্তরের ওভারভিউ

এই নিবন্ধে, আমরা গ্রাফিক্স, নিউরাল নেটওয়ার্ক এবং ডিপ লার্নিং টাস্কে কেন GPU গুলি ভাল এবং সিপিইউগুলি বিস্তৃত ক্রমিক, জটিল সাধারণ উদ্দেশ্য কম্পিউটিং কাজগুলিতে ভাল তা বোঝার জন্য আমরা কিছু মৌলিক নিম্ন-স্তরের বিশদ বিবরণ দিয়ে যাব। বেশ কয়েকটি বিষয় ছিল যা আমাকে গবেষণা করতে হয়েছিল এবং এই পোস্টের জন্য একটু বেশি দানাদার বোঝাপড়া পেতে হয়েছিল, যার মধ্যে কয়েকটি আমি পাস করার সময় উল্লেখ করব। এটি ইচ্ছাকৃতভাবে করা হয় শুধুমাত্র CPU এবং GPU প্রক্রিয়াকরণের সম্পূর্ণ মৌলিক বিষয়গুলিতে ফোকাস করার জন্য।


ভন নিউম্যান আর্কিটেকচার

আগেকার কম্পিউটার ছিল ডেডিকেটেড ডিভাইস। হার্ডওয়্যার সার্কিট এবং লজিক গেটগুলি একটি নির্দিষ্ট সেট করার জন্য প্রোগ্রাম করা হয়েছিল। যদি নতুন কিছু করতে হয়, সার্কিটগুলিকে পুনরায় ওয়্যার করা দরকার। "নতুন কিছু" দুটি ভিন্ন সমীকরণের জন্য গাণিতিক গণনা করার মতোই সহজ হতে পারে। দ্বিতীয় বিশ্বযুদ্ধের সময়, অ্যালান টুরিং এনিগমা মেশিনকে হারানোর জন্য একটি প্রোগ্রামেবল মেশিনে কাজ করছিলেন এবং পরে "টুরিং মেশিন" কাগজ প্রকাশ করেছিলেন। প্রায় একই সময়ে, জন ভন নিউম্যান এবং অন্যান্য গবেষকরাও একটি ধারণা নিয়ে কাজ করছিলেন যা মৌলিকভাবে প্রস্তাবিত:


  • নির্দেশ এবং ডেটা শেয়ার করা মেমরিতে (সঞ্চিত প্রোগ্রাম) সংরক্ষণ করা উচিত।
  • প্রসেসিং এবং মেমরি ইউনিট আলাদা হতে হবে।
  • কন্ট্রোল ইউনিট প্রক্রিয়াকরণ ইউনিট ব্যবহার করে গণনা করতে মেমরি থেকে ডেটা এবং নির্দেশাবলী পড়ার যত্ন নেয়।


বটলনেক

  • প্রসেসিং বটলনেক - একটি প্রসেসিং ইউনিটে (ফিজিক্যাল লজিক গেট) এক সময়ে শুধুমাত্র একটি নির্দেশ এবং এর অপারেন্ড থাকতে পারে। নির্দেশ একের পর এক পর্যায়ক্রমে কার্যকর করা হয়। বছরের পর বছর ধরে, প্রসেসরগুলিকে ছোট, দ্রুত ঘড়ি চক্র এবং কোরের সংখ্যা বৃদ্ধিতে ফোকাস এবং উন্নতি করা হয়েছে।
  • মেমরি বটলনেক - প্রসেসরগুলি দ্রুত এবং দ্রুত বৃদ্ধি পাওয়ার সাথে সাথে মেমরি এবং প্রসেসিং ইউনিটের মধ্যে স্থানান্তর করা যেতে পারে এমন ডেটার গতি এবং পরিমাণ একটি বাধা হয়ে দাঁড়িয়েছে। মেমরি সিপিইউ-এর চেয়ে অনেকগুলি অর্ডার ধীর। বছরের পর বছর ধরে, ফোকাস এবং উন্নতিগুলি স্মৃতিকে আরও ঘন এবং ছোট করে তোলার জন্য হয়েছে।


সিপিইউ

আমরা জানি যে আমাদের কম্পিউটারের সবকিছুই বাইনারি। স্ট্রিং, ইমেজ, ভিডিও, অডিও, ওএস, অ্যাপ্লিকেশন প্রোগ্রাম, ইত্যাদি, সব 1s এবং 0s হিসাবে উপস্থাপন করা হয়। CPU আর্কিটেকচার (RISC, CISC, ইত্যাদি) স্পেসিফিকেশনে নির্দেশনা সেট (x86, x86-64, ARM, ইত্যাদি), যা CPU নির্মাতাদের অবশ্যই মেনে চলতে হবে এবং হার্ডওয়্যারের সাথে ইন্টারফেস করার জন্য OS এর জন্য উপলব্ধ।


ডেটা সহ ওএস এবং অ্যাপ্লিকেশন প্রোগ্রামগুলি সিপিইউতে প্রক্রিয়াকরণের জন্য নির্দেশ সেট এবং বাইনারি ডেটাতে অনুবাদ করা হয়। চিপ স্তরে, ট্রানজিস্টর এবং লজিক গেটে প্রক্রিয়াকরণ করা হয়। আপনি যদি দুটি সংখ্যা যোগ করার জন্য একটি প্রোগ্রাম চালান, প্রসেসরের একটি লজিক গেটে যোগ ("প্রসেসিং") করা হয়।


ভন নিউম্যান আর্কিটেকচার অনুসারে সিপিইউতে, যখন আমরা দুটি সংখ্যা যোগ করি, তখন একটি একক যোগ নির্দেশনা সার্কিটে দুটি সংখ্যার উপর চলে। সেই মিলিসেকেন্ডের একটি ভগ্নাংশের জন্য, প্রসেসিং ইউনিটের (এক্সিকিউশন) কোরে শুধুমাত্র অ্যাড নির্দেশনা কার্যকর করা হয়েছিল! এই বিস্তারিত সবসময় আমাকে মুগ্ধ.


একটি আধুনিক CPU-তে কোর

একটি CPU কোরে উপাদানগুলির ওভারভিউ (একক HW থ্রেড)


উপরের চিত্রের উপাদানগুলো স্বতঃসিদ্ধ। আরও বিস্তারিত এবং বিস্তারিত ব্যাখ্যার জন্য এই চমৎকার নিবন্ধটি পড়ুন। আধুনিক CPU-তে, একটি একক ভৌত কোরে একাধিক পূর্ণসংখ্যা ALU, ফ্লোটিং-পয়েন্ট ALU ইত্যাদি থাকতে পারে, আবার, এই ইউনিটগুলি হল ভৌত লজিক গেট।

জিপিইউ-এর আরও ভাল উপলব্ধির জন্য আমাদের সিপিইউ কোরে 'হার্ডওয়্যার থ্রেড' বুঝতে হবে। একটি হার্ডওয়্যার থ্রেড কম্পিউটিংয়ের একটি ইউনিট যা একটি সিপিইউ কোরের এক্সিকিউশন ইউনিটে, প্রতিটি সিপিইউ ঘড়ি চক্রে করা যেতে পারে। এটি কাজের ক্ষুদ্রতম এককের প্রতিনিধিত্ব করে যা একটি কোরে কার্যকর করা যেতে পারে।


নির্দেশনা চক্র

একটি প্রক্রিয়া, একটি সিপিইউ কোরে চলছে, একটি একক হার্ডওয়্যার থ্রেডে, পাইপলাইনিং বা সুপারস্কেলারের সাথে


উপরের চিত্রটি CPU নির্দেশনা চক্র/মেশিন চক্রকে চিত্রিত করে। এটি একটি একক নির্দেশ (যেমন: c=a+b) কার্যকর করার জন্য সিপিইউ সঞ্চালিত পদক্ষেপগুলির একটি সিরিজ।


  • আনয়ন: প্রোগ্রাম কাউন্টার (সিপিইউ কোরে বিশেষ রেজিস্টার) কোন নির্দেশ আনতে হবে তা ট্র্যাক রাখে। নির্দেশ আনা হয় এবং নির্দেশ রেজিস্টারে সংরক্ষণ করা হয়। সাধারণ ক্রিয়াকলাপের জন্য, সংশ্লিষ্ট ডেটাও আনা হয়।

  • ডিকোড: অপারেটর এবং অপারেন্ড দেখতে নির্দেশনা ডিকোড করা হয়।

  • সঞ্চালন: নির্দিষ্ট অপারেশনের উপর ভিত্তি করে, উপযুক্ত প্রক্রিয়াকরণ ইউনিট নির্বাচন করা হয় এবং কার্যকর করা হয়।

  • মেমরি অ্যাক্সেস: যদি কোনও নির্দেশ জটিল হয় বা অতিরিক্ত ডেটার প্রয়োজন হয় (বেশ কয়েকটি কারণ এটি ঘটাতে পারে), মেমরি অ্যাক্সেস কার্যকর করার আগে করা হয়। (সরলতার জন্য উপরের চিত্রে উপেক্ষা করা হয়েছে)। একটি জটিল নির্দেশের জন্য, প্রারম্ভিক ডেটা গণনা ইউনিটের ডেটা রেজিস্টারে পাওয়া যাবে, তবে নির্দেশের সম্পূর্ণ বাস্তবায়নের জন্য, L1 এবং L2 ক্যাশে থেকে ডেটা অ্যাক্সেস প্রয়োজন। এর মানে হল কম্পিউট ইউনিট এক্সিকিউট হওয়ার আগে একটি ছোট অপেক্ষার সময় হতে পারে এবং অপেক্ষার সময় হার্ডওয়্যার থ্রেড এখনও কম্পিউট ইউনিট ধরে রাখে।

  • Write Back: যদি এক্সিকিউশন আউটপুট উৎপন্ন করে (যেমন: c=a+b), আউটপুটটি আবার রেজিস্টার/ক্যাশে/মেমরিতে লেখা হয়। (উপরের ডায়াগ্রামে উপেক্ষা করা হয়েছে বা সরলতার জন্য পোস্টে পরে অন্য কোথাও)


উপরের চিত্রে, শুধুমাত্র t2 এ গণনা করা হচ্ছে। বাকি সময়, কোরটি কেবল নিষ্ক্রিয় (আমরা কোন কাজ পাচ্ছি না)।

আধুনিক CPU-তে এইচডব্লিউ উপাদান রয়েছে যা অপরিহার্যভাবে সক্ষম করে (ফেচ-ডিকোড-এক্সিকিউট) পদক্ষেপগুলি ঘড়ির চক্রে একযোগে ঘটতে।

একটি একক হার্ডওয়্যার থ্রেড এখন প্রতিটি ঘড়ি চক্রে গণনা করতে পারে। একে বলা হয় ইন্সট্রাকশন পাইপলাইনিং।


ফেচ, ডিকোড, মেমরি অ্যাক্সেস এবং রাইট ব্যাক একটি CPU-তে অন্যান্য উপাদান দ্বারা সম্পন্ন হয়। একটি ভাল শব্দের অভাবের জন্য, এগুলিকে "পাইপলাইন থ্রেড" বলা হয়। পাইপলাইন থ্রেড একটি হার্ডওয়্যার থ্রেডে পরিণত হয় যখন এটি একটি নির্দেশ চক্রের কার্যকরী পর্যায়ে থাকে।


একটি প্রক্রিয়া, একটি একক হার্ডওয়্যার থ্রেডে একটি সিপিইউ কোরে চলমান, সঙ্গে পাইপলাইনিং


আপনি দেখতে পাচ্ছেন, আমরা t2 থেকে প্রতি চক্রের কম্পিউট আউটপুট পাই। পূর্বে, আমরা প্রতি 3 চক্রে একবার কম্পিউট আউটপুট পেয়েছি। পাইপলাইন গণনা থ্রুপুট উন্নত করে। এটি ভন নিউম্যান আর্কিটেকচারে প্রক্রিয়াকরণের বাধাগুলি পরিচালনা করার কৌশলগুলির মধ্যে একটি। এছাড়াও অন্যান্য অপ্টিমাইজেশান রয়েছে যেমন-আউট-অফ-অর্ডার এক্সিকিউশন, ব্রাঞ্চ প্রেডিকশন, স্পেকুলেটিভ এক্সিকিউশন ইত্যাদি।

হাইপার-থ্রেডিং

আমরা শেষ করার এবং GPU-তে যাওয়ার আগে এটিই শেষ ধারণাটি আমি CPU-তে আলোচনা করতে চাই। ঘড়ির গতি বৃদ্ধির সাথে সাথে প্রসেসরগুলিও দ্রুত এবং আরও দক্ষ হয়ে উঠেছে। অ্যাপ্লিকেশন (নির্দেশনা সেট) জটিলতা বৃদ্ধির সাথে, CPU কম্পিউট কোরগুলি কম ব্যবহার করা হয়েছিল এবং এটি মেমরি অ্যাক্সেসের জন্য অপেক্ষায় আরও বেশি সময় ব্যয় করছে।


সুতরাং, আমরা একটি মেমরি বাধা দেখতে. কম্পিউট ইউনিট মেমরি অ্যাক্সেসের জন্য সময় ব্যয় করছে এবং কোনও দরকারী কাজ করছে না। মেমরি সিপিইউ-এর চেয়ে অনেকগুলি অর্ডার ধীর এবং ব্যবধানটি শীঘ্রই বন্ধ হবে না। ধারণাটি ছিল একটি সিপিইউ কোরের কিছু ইউনিটে মেমরি ব্যান্ডউইথ বাড়ানো এবং মেমরি অ্যাক্সেসের অপেক্ষায় থাকা অবস্থায় কম্পিউট ইউনিটগুলি ব্যবহার করার জন্য ডেটা প্রস্তুত রাখা।


হাইপার-থ্রেডিং 2002 সালে ইন্টেল দ্বারা Xeon এবং Pentium 4 প্রসেসরে উপলব্ধ করা হয়েছিল। হাইপার-থ্রেডিংয়ের আগে, প্রতি কোরে শুধুমাত্র একটি হার্ডওয়্যার থ্রেড ছিল। হাইপার-থ্রেডিংয়ের সাথে, প্রতি কোরে 2টি হার্ডওয়্যার থ্রেড থাকবে। এর মানে কী? কিছু রেজিস্টার, প্রোগ্রাম কাউন্টার, ফেচ ইউনিট, ডিকোড ইউনিট ইত্যাদির জন্য ডুপ্লিকেট প্রসেসিং সার্কিট।

2 HW থ্রেড সহ একটি CPU কোর (হাইপার-থ্রেডিং)


উপরের চিত্রটি হাইপারথ্রেডিং সহ একটি CPU কোরে নতুন সার্কিট উপাদানগুলি দেখায়। এইভাবে অপারেটিং সিস্টেমে একটি একক ভৌত কোর 2 কোর হিসাবে দৃশ্যমান হয়। আপনার যদি একটি 4-কোর প্রসেসর থাকে, যার সাথে হাইপার-থ্রেডিং সক্ষম হয়, এটি OS দ্বারা 8 কোর হিসাবে দেখা হয়। L1 - L3 ক্যাশের আকার বাড়বে অতিরিক্ত রেজিস্টারের জন্য। উল্লেখ্য যে মৃত্যুদন্ড ইউনিট ভাগ করা হয়.


দুটি প্রসেস, দুটি হার্ডওয়্যার থ্রেড সহ একটি CPU কোরে চলছে, সঙ্গে পাইপলাইনিং


ধরে নিই আমাদের কাছে P1 এবং P2 প্রসেস আছে যা a=b+c, d=e+f করে, এগুলি HW থ্রেড 1 এবং 2 এর কারণে একক ঘড়ি চক্রে একযোগে চালানো যেতে পারে। সম্ভব হবে না। এখানে আমরা হার্ডওয়্যার থ্রেড যোগ করে একটি কোরের মধ্যে মেমরি ব্যান্ডউইথ বৃদ্ধি করছি যাতে প্রক্রিয়াকরণ ইউনিট দক্ষতার সাথে ব্যবহার করা যায়। এটি কম্পিউট কনকারেন্সি উন্নত করে।


কিছু আকর্ষণীয় পরিস্থিতি:

  • CPU-তে শুধুমাত্র একটি পূর্ণসংখ্যা ALU আছে। একটি HW থ্রেড 1 বা HW থ্রেড 2 অবশ্যই একটি ঘড়ি চক্রের জন্য অপেক্ষা করতে হবে এবং পরবর্তী চক্রে গণনার সাথে এগিয়ে যেতে হবে।
  • CPU-তে একটি পূর্ণসংখ্যা ALU এবং একটি ফ্লোটিং পয়েন্ট ALU রয়েছে। HW থ্রেড 1 এবং HW থ্রেড 2 যথাক্রমে ALU এবং FPU ব্যবহার করে একযোগে যোগ করতে পারে।
  • সমস্ত উপলব্ধ ALUs HW Thread 1 দ্বারা ব্যবহার করা হচ্ছে। HW Thread 2 কে ALU উপলব্ধ না হওয়া পর্যন্ত অপেক্ষা করতে হবে। (উপরের সংযোজন উদাহরণের জন্য প্রযোজ্য নয়, তবে অন্যান্য নির্দেশাবলীর সাথে ঘটতে পারে)।

কেন CPU ঐতিহ্যগত ডেস্কটপ/সার্ভার কম্পিউটিং এ এত ভাল?

  • উচ্চ ঘড়ির গতি - GPU ঘড়ির গতির চেয়ে বেশি। নির্দেশনা পাইপলাইনিংয়ের সাথে এই উচ্চ গতির সংমিশ্রণ, সিপিইউগুলি অনুক্রমিক কাজগুলিতে অত্যন্ত ভাল। বিলম্বের জন্য অপ্টিমাইজ করা হয়েছে।
  • বিভিন্ন অ্যাপ্লিকেশন এবং গণনার প্রয়োজনীয়তা - ব্যক্তিগত কম্পিউটার এবং সার্ভারগুলিতে বিস্তৃত অ্যাপ্লিকেশন এবং গণনার প্রয়োজন রয়েছে। এর ফলে একটি জটিল নির্দেশনা সেট হয়। CPU বেশ কিছু বিষয়ে ভালো হতে হবে।
  • মাল্টিটাস্কিং এবং মাল্টি-প্রসেসিং - আমাদের কম্পিউটারে অনেক অ্যাপের সাথে, CPU কাজের চাপ প্রসঙ্গ পরিবর্তনের দাবি রাখে। এটি সমর্থন করার জন্য ক্যাশিং সিস্টেম এবং মেমরি অ্যাক্সেস সেট আপ করা হয়েছে। যখন সিপিইউ হার্ডওয়্যার থ্রেডে একটি প্রক্রিয়া নির্ধারিত হয়, তখন এটিতে সমস্ত প্রয়োজনীয় ডেটা প্রস্তুত থাকে এবং একের পর এক দ্রুত কম্পিউট নির্দেশাবলী কার্যকর করে।

CPU অপূর্ণতা

এই নিবন্ধটি দেখুন এবং Colab নোটবুক ব্যবহার করে দেখুন। এটি দেখায় কিভাবে ম্যাট্রিক্স গুণন একটি সমান্তরাল কাজ এবং কিভাবে সমান্তরাল কম্পিউট কোর গণনার গতি বাড়াতে পারে।

  • ক্রমিক কাজগুলিতে অত্যন্ত ভাল কিন্তু সমান্তরাল কাজগুলিতে ভাল নয়।
  • জটিল নির্দেশ সেট এবং জটিল মেমরি অ্যাক্সেস প্যাটার্ন।
  • CPU কম্পিউট ছাড়াও কনটেক্সট স্যুইচিং, এবং কন্ট্রোল ইউনিট ক্রিয়াকলাপগুলিতে প্রচুর শক্তি ব্যয় করে

কী Takeaways

  • নির্দেশনা পাইপলাইন কম্পিউট থ্রুপুট উন্নত করে।
  • মেমরি ব্যান্ডউইথ বৃদ্ধি কম্পিউট কনকারেন্সি উন্নত করে।
  • সিপিইউগুলি অনুক্রমিক কাজগুলিতে ভাল (লেটেন্সির জন্য অপ্টিমাইজ করা)। ব্যাপকভাবে সমান্তরাল কাজগুলিতে ভাল নয় কারণ এটির জন্য প্রচুর সংখ্যক কম্পিউট ইউনিট এবং হার্ডওয়্যার থ্রেড প্রয়োজন যা উপলব্ধ নয় (থ্রুপুটের জন্য অপ্টিমাইজ করা হয়নি)। এগুলি উপলব্ধ নয় কারণ সিপিইউগুলি সাধারণ-উদ্দেশ্য কম্পিউটিং-এর জন্য তৈরি করা হয়েছে এবং জটিল নির্দেশাবলীর সেট রয়েছে৷


জিপিইউ

কম্পিউটিং শক্তি যেমন বেড়েছে, তেমনি গ্রাফিক্স প্রসেসিংয়ের চাহিদাও বেড়েছে। UI রেন্ডারিং এবং গেমিংয়ের মতো কাজগুলির জন্য সমান্তরাল ক্রিয়াকলাপগুলির প্রয়োজন হয়, সার্কিট স্তরে অসংখ্য ALUs এবং FPU-এর প্রয়োজনকে চালিত করে৷ সিপিইউ, ক্রমিক কাজের জন্য ডিজাইন করা, এই সমান্তরাল কাজের চাপগুলিকে কার্যকরভাবে পরিচালনা করতে পারেনি। এইভাবে, গ্রাফিক্স কাজগুলিতে সমান্তরাল প্রক্রিয়াকরণের চাহিদা পূরণের জন্য GPU গুলি তৈরি করা হয়েছিল, পরে গভীর শিক্ষার অ্যালগরিদমগুলিকে ত্বরান্বিত করার জন্য তাদের গ্রহণের পথ প্রশস্ত করে।


আমি অত্যন্ত সুপারিশ করব:

  • ভিডিও গেম রেন্ডারিংয়ের সাথে জড়িত সমান্তরাল কাজগুলি ব্যাখ্যা করে এই দেখা৷
  • একটি ট্রান্সফরমার জড়িত সমান্তরাল কাজ বুঝতে এই ব্লগ পোস্ট পড়া. সিএনএন এবং আরএনএন-এর মতো অন্যান্য গভীর শিক্ষার আর্কিটেকচারও রয়েছে। যেহেতু এলএলএমগুলি বিশ্ব দখল করছে, তাই ট্রান্সফরমার কার্যগুলির জন্য প্রয়োজনীয় ম্যাট্রিক্স গুণে সমান্তরালতার উচ্চ-স্তরের উপলব্ধি এই পোস্টের বাকি অংশগুলির জন্য একটি ভাল প্রসঙ্গ সেট করবে। (পরবর্তী সময়ে, আমি ট্রান্সফরমারগুলিকে সম্পূর্ণরূপে বোঝার পরিকল্পনা করছি এবং একটি ছোট GPT মডেলের ট্রান্সফরমার স্তরগুলিতে কী ঘটে তার একটি হজমযোগ্য উচ্চ-স্তরের ওভারভিউ শেয়ার করব।)

নমুনা CPU বনাম GPU স্পেস

কোর, হার্ডওয়্যার থ্রেড, ঘড়ির গতি, মেমরি ব্যান্ডউইথ এবং সিপিইউ এবং জিপিইউ-এর অন-চিপ মেমরি উল্লেখযোগ্যভাবে আলাদা। উদাহরণ:

  • Intel Xeon 8280 এর আছে :
    • 2700 MHz বেস এবং 4000 MHz টার্বোতে
    • 28 কোর এবং 56 হার্ডওয়্যার থ্রেড
    • সামগ্রিক পাইপলাইন থ্রেড: 896 - 56
    • L3 ক্যাশে: 38.5 MB (সমস্ত কোর দ্বারা ভাগ করা হয়েছে) L2 ক্যাশে: 28.0 MB (কোরগুলির মধ্যে ভাগ করা হয়েছে) L1 ক্যাশে: 1.375 MB (কোরগুলির মধ্যে ভাগ করা হয়েছে)
    • রেজিস্টারের আকার সর্বজনীনভাবে উপলব্ধ নয়
    • সর্বোচ্চ মেমরি: 1TB DDR4, 2933 MHz, 6 চ্যানেল
    • সর্বোচ্চ মেমরি ব্যান্ডউইথ: 131 GB/s
    • পিক FP64 পারফরম্যান্স = 4.0 GHz 2 AVX-512 ইউনিট 8 অপারেশন প্রতি AVX-512 ইউনিট প্রতি ঘড়ি চক্র * 28 কোর = ~2.8 TFLOPs [ব্যবহার করে প্রাপ্ত: পিক FP64 পারফরম্যান্স = (সর্বোচ্চ টার্বো ফ্রিকোয়েন্সি) (এভিএক্স-এর সংখ্যা 512) AVX-512 ইউনিট প্রতি ঘড়ি চক্রে অপারেশন) * (কোরের সংখ্যা)]
      • এই সংখ্যাটি GPU-এর সাথে তুলনা করার জন্য ব্যবহৃত হয় কারণ সাধারণ-উদ্দেশ্য কম্পিউটিং-এর সর্বোচ্চ কর্মক্ষমতা পাওয়া খুবই বিষয়ভিত্তিক। এই সংখ্যাটি একটি তাত্ত্বিক সর্বোচ্চ সীমা যার মানে, FP64 সার্কিটগুলি তাদের সম্পূর্ণরূপে ব্যবহার করা হচ্ছে।


  • Nvidia A100 80GB SXM আছে :
    • 1065 MHz বেস এবং Turbo এ 1410 MHz
    • 108 SMs, 64 FP32 CUDA কোর (যাকে SPs বলা হয়) প্রতি SM, 4 FP64 টেনসর কোর প্রতি SM, 68টি হার্ডওয়্যার থ্রেড (64 + 4)
      • GPU প্রতি সামগ্রিক: 6912 64 FP32 CUDA কোর, 432 FP 64 টেনসর কোর, 7344 (6912 + 432) হার্ডওয়্যার থ্রেড
    • পাইপলাইন থ্রেড প্রতি এসএম: 2048 - 68 = 1980 প্রতি এসএম
      • GPU প্রতি সামগ্রিক পাইপলাইন থ্রেড: (2048 x 108) - (68 x 108) = 21184 - 7344 = 13840
      • পড়ুন: cudaLimitDevRuntimePendingLaunchCount
    • L2 ক্যাশে: 40 MB (সমস্ত এসএমএসের মধ্যে শেয়ার করা হয়েছে) L1 ক্যাশে: মোট 20.3 MB (192 KB প্রতি SM)
    • নিবন্ধনের আকার: 27.8 MB (256 KB প্রতি এসএম)
    • সর্বোচ্চ GPU প্রধান মেমরি: 80GB HBM2e, 1512 MHz
    • সর্বোচ্চ GPU প্রধান মেমরি ব্যান্ডউইথ: 2.39 TB/s
    • পিক FP64 পারফরম্যান্স = 19.5 TFLOPs [শুধুমাত্র সমস্ত FP64 টেনসর কোর ব্যবহার করে]। CUDA কোরে শুধুমাত্র FP64 ব্যবহার করা হলে 9.7 TFLOP-এর নিম্ন মান। এই সংখ্যাটি একটি তাত্ত্বিক সর্বোচ্চ সীমা যার মানে, FP64 সার্কিটগুলি তাদের সম্পূর্ণরূপে ব্যবহার করা হচ্ছে।


একটি আধুনিক জিপিইউতে কোর

আমরা CPU-তে যে পরিভাষাগুলি দেখেছি তা সবসময় সরাসরি GPU-তে অনুবাদ করে না। এখানে আমরা উপাদান এবং মূল NVIDIA A100 GPU দেখতে পাব। এই নিবন্ধটির জন্য গবেষণা করার সময় একটি জিনিস যা আমার কাছে আশ্চর্যজনক ছিল তা হল CPU বিক্রেতারা প্রকাশ করে না যে একটি কোরের এক্সিকিউশন ইউনিটে কতগুলি ALU, FPU, ইত্যাদি পাওয়া যায়। NVIDIA কোরের সংখ্যা সম্পর্কে খুব স্বচ্ছ এবং CUDA ফ্রেমওয়ার্ক সার্কিট স্তরে সম্পূর্ণ নমনীয়তা এবং অ্যাক্সেস দেয়।


একটি আধুনিক CPU বনাম NVIDIA GPU (সূত্র: NVIDIA)


GPU-তে উপরের চিত্রে, আমরা দেখতে পাচ্ছি যে কোনও L3 ক্যাশে নেই, ছোট L2 ক্যাশে, ছোট কিন্তু অনেক বেশি কন্ট্রোল ইউনিট এবং L1 ক্যাশে এবং প্রচুর পরিমাণে প্রসেসিং ইউনিট নেই।


NVIDIA A100 GPU (সূত্র: NVIDIA)

NVIDIA A100 GPU স্ট্রিমিং মাল্টিপ্রসেসর (একটি CPU কোরের সমান) উৎস: NVIDIA


আমাদের প্রাথমিক বোঝার জন্য এখানে উপরের ডায়াগ্রামে GPU উপাদান এবং তাদের CPU সমতুল্য রয়েছে। আমি CUDA প্রোগ্রামিং করিনি, তাই এটিকে CPU সমতুল্যের সাথে তুলনা করা প্রাথমিক বোঝার সাথে সাহায্য করে। CUDA প্রোগ্রামাররা এটা খুব ভালো বোঝে।

  • একাধিক স্ট্রিমিং মাল্টিপ্রসেসর <> মাল্টি-কোর সিপিইউ
  • স্ট্রিমিং মাল্টিপ্রসেসর (এসএম) <> সিপিইউ কোর
  • স্ট্রিমিং প্রসেসর (SP)/ CUDA Core <> ALU/FPU একটি CPU কোরের এক্সিকিউশন ইউনিটে
  • টেনসর কোর (একটি নির্দেশে 4x4 FP64 অপারেশন করতে সক্ষম) <> একটি আধুনিক CPU কোরে SIMD এক্সিকিউশন ইউনিট (যেমন: AVX-512)
  • হার্ডওয়্যার থ্রেড (একক ঘড়ি চক্রে CUDA বা টেনসর কোরে গণনা করা) <> হার্ডওয়্যার থ্রেড (একক ঘড়ি চক্রে এক্সিকিউশন ইউনিট [ALUs, FPUs, ইত্যাদিতে গণনা করা)
  • HBM / VRAM / DRAM / GPU মেমরি <> RAM
  • অন-চিপ মেমরি/SRAM (রেজিস্টার, L1, L2 ক্যাশে) <> অন-চিপ মেমরি/SRAM (রেজিস্টার, L1, L2, L3 ক্যাশে)
    • দ্রষ্টব্য: একটি SM-এ রেজিস্টারগুলি একটি কোরের রেজিস্টারের তুলনায় উল্লেখযোগ্যভাবে বড়। কারণ থ্রেডের সংখ্যা বেশি। মনে রাখবেন যে সিপিইউতে হাইপার-থ্রেডিং-এ, আমরা রেজিস্টারের সংখ্যা বৃদ্ধি দেখেছি কিন্তু কম্পিউট ইউনিট নয়। এখানে একই নীতি।

মুভিং ডাটা এবং মেমরি ব্যান্ডউইথ

গ্রাফিক্স এবং ডিপ লার্নিং টাস্কের জন্য সিম(ডি/টি) [একক নির্দেশ মাল্টি ডেটা/থ্রেড] টাইপ এক্সিকিউশন প্রয়োজন। অর্থাৎ, একটি একক নির্দেশের জন্য প্রচুর পরিমাণে ডেটা পড়া এবং কাজ করা।


আমরা নির্দেশনা পাইপলাইনিং এবং সিপিইউতে হাইপার-থ্রেডিং নিয়ে আলোচনা করেছি এবং জিপিইউ-এরও ক্ষমতা রয়েছে। এটি কীভাবে বাস্তবায়িত হয় এবং কাজ করা হয় তা কিছুটা আলাদা তবে নীতিগুলি একই।

GPU সময়সূচী (সূত্র: NVIDIA)

CPU-এর বিপরীতে, GPUs (CUDA এর মাধ্যমে) পাইপলাইন থ্রেডগুলিতে সরাসরি অ্যাক্সেস প্রদান করে (মেমরি থেকে ডেটা আনা এবং মেমরি ব্যান্ডউইথ ব্যবহার করা)। GPU শিডিউলাররা প্রথমে কম্পিউট ইউনিট পূরণ করার চেষ্টা করে (সংশ্লিষ্ট শেয়ার্ড L1 ক্যাশে এবং কম্পিউট অপারেন্ড সঞ্চয় করার জন্য রেজিস্টার সহ), তারপর "পাইপলাইন থ্রেড" যা রেজিস্টার এবং HBM-এ ডেটা নিয়ে আসে। আবার, আমি জোর দিয়ে বলতে চাই যে CPU অ্যাপ প্রোগ্রামাররা এটি সম্পর্কে ভাবেন না, এবং "পাইপলাইন থ্রেড" এবং প্রতি কোরে কম্পিউট ইউনিটের সংখ্যা সম্পর্কে চশমা প্রকাশ করা হয় না। এনভিডিয়া শুধুমাত্র এগুলি প্রকাশ করে না কিন্তু প্রোগ্রামারদের সম্পূর্ণ নিয়ন্ত্রণও প্রদান করে।


আমি CUDA প্রোগ্রামিং মডেল এবং মডেল পরিবেশন অপ্টিমাইজেশান টেকনিকের "ব্যাচিং" সম্পর্কে একটি উত্সর্গীকৃত পোস্টে এই সম্পর্কে আরও বিশদে যাব যেখানে আমরা দেখতে পারি এটি কতটা উপকারী।


GPU - উচ্চ থ্রুপুট প্রসেসর (সূত্র: NVIDIA)


উপরের চিত্রটি CPU এবং GPU কোরে হার্ডওয়্যার থ্রেড এক্সিকিউশনকে চিত্রিত করে। "মেমরি অ্যাক্সেস" বিভাগটি দেখুন যা আমরা আগে CPU পাইপলাইনিংয়ে আলোচনা করেছি। এই চিত্রটি তা দেখায়। CPUs জটিল মেমরি ম্যানেজমেন্ট এই অপেক্ষার সময়টিকে যথেষ্ট ছোট করে তোলে (কয়েকটি ঘড়ির চক্র) L1 ক্যাশে থেকে রেজিস্টারে ডেটা আনার জন্য। যখন L3 বা প্রধান মেমরি থেকে ডেটা আনার প্রয়োজন হয়, অন্য থ্রেড যার জন্য ডেটা ইতিমধ্যেই রেজিস্টারে রয়েছে (আমরা এটি হাইপার-থ্রেডিং বিভাগে দেখেছি) এক্সিকিউশন ইউনিটের নিয়ন্ত্রণ পায়।


GPU-তে, ওভারসাবস্ক্রিপশন (উচ্চ সংখ্যক পাইপলাইন থ্রেড এবং রেজিস্টার) এবং সহজ নির্দেশনা সেটের কারণে, রেজিস্টারে মুলতুবি থাকা অবস্থায় প্রচুর পরিমাণে ডেটা ইতিমধ্যেই পাওয়া যায়। এক্সিকিউশনের জন্য অপেক্ষমান এই পাইপলাইন থ্রেডগুলি হার্ডওয়্যার থ্রেডে পরিণত হয় এবং GPU-তে পাইপলাইন থ্রেডগুলি লাইটওয়েট হওয়ার কারণে প্রতিটি ঘড়ি চক্র যতবারই এক্সিকিউশন করে।


ব্যান্ডউইথ, কম্পিউট ইনটেনসিটি এবং লেটেন্সি

গোলের বেশি কি?

  • GPU থেকে সেরাটা পেতে প্রতিটি ঘড়ি চক্রে হার্ডওয়্যার রিসোর্স (কম্পিউট ইউনিট) সম্পূর্ণরূপে ব্যবহার করুন।
  • গণনা ইউনিটগুলিকে ব্যস্ত রাখতে, আমাদের এটিকে পর্যাপ্ত ডেটা খাওয়াতে হবে।

CPU বনাম GPU-তে ম্যাট্রিক্স গুণন


ছোট ম্যাট্রিক্সের ম্যাট্রিক্স গুণনের লেটেন্সি CPU এবং GPU-তে কমবেশি একই হওয়ার এটাই প্রধান কারণ। চেষ্টা কর .

কার্যগুলি যথেষ্ট সমান্তরাল হওয়া দরকার, কম্পিউট FLOPs এবং মেমরি ব্যান্ডউইথকে পরিপূর্ণ করার জন্য ডেটা যথেষ্ট পরিমাণে হওয়া দরকার। যদি একটি একক কাজ যথেষ্ট বড় না হয়, তবে হার্ডওয়্যারটি সম্পূর্ণরূপে ব্যবহার করার জন্য মেমরিকে পরিপূর্ণ করতে এবং গণনা করার জন্য এই জাতীয় একাধিক কাজকে প্যাক করতে হবে।


গণনা তীব্রতা = FLOPs / ব্যান্ডউইথ । অর্থাৎ, প্রতি সেকেন্ডে কম্পিউট ইউনিট দ্বারা করা কাজের পরিমাণ এবং প্রতি সেকেন্ডে মেমরি দ্বারা সরবরাহ করা ডেটার পরিমাণের অনুপাত।

কম্পিউট ইনটেনসিটি (সূত্র: NVIDIA)

উপরের চিত্রে, আমরা দেখতে পাচ্ছি যে আমরা উচ্চতর লেটেন্সি এবং কম ব্যান্ডউইথ মেমরিতে যাওয়ার সাথে সাথে গণনার তীব্রতা বৃদ্ধি পায়। আমরা এই সংখ্যাটিকে যতটা সম্ভব ছোট করতে চাই যাতে গণনা সম্পূর্ণরূপে ব্যবহার করা যায়। তার জন্য, আমাদের যতটা ডেটা L1/রেজিস্টারে রাখতে হবে যাতে কম্পিউট দ্রুত ঘটতে পারে। যদি আমরা HBM থেকে একক ডেটা আনয়ন করি, তবে মাত্র কয়েকটি অপারেশন আছে যেখানে আমরা একক ডেটার উপর 100টি অপারেশন করি যাতে এটিকে মূল্যবান করা যায়। যদি আমরা 100টি অপারেশন না করি, তাহলে গণনা ইউনিটগুলি নিষ্ক্রিয় ছিল। এখানেই GPU-তে উচ্চ সংখ্যক থ্রেড এবং রেজিস্টার কার্যকর হয়। কম্পিউটের তীব্রতা কম রাখতে এবং সমান্তরাল কোরকে ব্যস্ত রাখতে L1/রেজিস্টারে যতটা ডেটা রাখা হয়।

CUDA এবং টেনসর কোরের মধ্যে 4X এর কম্পিউট তীব্রতার পার্থক্য রয়েছে কারণ CUDA কোর শুধুমাত্র একটি 1x1 FP64 MMA করতে পারে যেখানে টেনসর কোর প্রতি ঘড়ি চক্রে 4x4 FP64 MMA নির্দেশনা করতে পারে।

কী Takeaways

উচ্চ সংখ্যক কম্পিউট ইউনিট (CUDA এবং টেনসর কোর), উচ্চ সংখ্যক থ্রেড এবং রেজিস্টার (অভার সাবস্ক্রিপশন), কম নির্দেশনা সেট, L3 ক্যাশে নেই, HBM (SRAM), সহজ এবং উচ্চ থ্রুপুট মেমরি অ্যাক্সেস প্যাটার্ন (CPU-এর তুলনায় - প্রসঙ্গ স্যুইচিং , মাল্টি লেয়ার ক্যাশিং, মেমরি পেজিং, TLB, ইত্যাদি) হল সেই নীতিগুলি যা GPU গুলিকে সমান্তরাল কম্পিউটিং (গ্রাফিক্স রেন্ডারিং, ডিপ লার্নিং, ইত্যাদি) থেকে CPU গুলিকে অনেক বেশি উন্নত করে তোলে৷


জিপিইউ এর বাইরে

GPU গুলি প্রথমে গ্রাফিক্স প্রসেসিং কাজগুলি পরিচালনা করার জন্য তৈরি করা হয়েছিল। এআই গবেষকরা CUDA এবং CUDA কোরের মাধ্যমে শক্তিশালী সমান্তরাল প্রক্রিয়াকরণে এর সরাসরি অ্যাক্সেসের সুবিধা নেওয়া শুরু করেছেন। এনভিআইডিএ জিপিইউতে টেক্সচার প্রসেসিং, রে ট্রেসিং, রাস্টার, পলিমর্ফ ইঞ্জিন ইত্যাদি রয়েছে (গ্রাফিক্স-নির্দিষ্ট নির্দেশনা সেট বলা যাক)। AI গ্রহণের বৃদ্ধির সাথে সাথে, Tensor cores যা 4x4 ম্যাট্রিক্স ক্যালকুলেশনে ভালো (MMA নির্দেশনা) যোগ করা হচ্ছে যা গভীর শিক্ষার জন্য নিবেদিত।


2017 সাল থেকে, NVIDIA প্রতিটি আর্কিটেকচারে টেনসর কোরের সংখ্যা বাড়িয়ে চলেছে। তবে, এই জিপিইউগুলি গ্রাফিক্স প্রসেসিংয়েও ভাল। যদিও GPU-তে নির্দেশনা সেট এবং জটিলতা অনেক কম, এটি গভীর শিক্ষার (বিশেষ করে ট্রান্সফরমার আর্কিটেকচার) জন্য সম্পূর্ণরূপে নিবেদিত নয়।


FlashAttention 2 , ট্রান্সফরমার আর্কিটেকচারের জন্য একটি সফ্টওয়্যার স্তর অপ্টিমাইজেশান (অ্যাটেনশন লেয়ারের মেমরি অ্যাক্সেস প্যাটার্নের জন্য যান্ত্রিক সহানুভূতি) কাজগুলিতে 2X গতি প্রদান করে।


CPU এবং GPU সম্পর্কে আমাদের গভীরভাবে প্রথম নীতি-ভিত্তিক বোঝাপড়ার মাধ্যমে, আমরা ট্রান্সফরমার অ্যাক্সিলারেটরের প্রয়োজনীয়তা বুঝতে পারি: একটি ডেডিকেটেড চিপ (শুধুমাত্র ট্রান্সফরমার অপারেশনের জন্য সার্কিট), সমান্তরালতার জন্য এমনকি প্রচুর সংখ্যক কম্পিউট ইউনিট সহ, কম নির্দেশনা সেট, কোন L1/L2 ক্যাশে, HBM প্রতিস্থাপনকারী বিশাল DRAM (রেজিস্টার), ট্রান্সফরমার আর্কিটেকচারের মেমরি অ্যাক্সেস প্যাটার্নের জন্য অপ্টিমাইজ করা মেমরি ইউনিট। সর্বোপরি এলএলএমগুলি মানুষের জন্য নতুন সঙ্গী (ওয়েব এবং মোবাইলের পরে), এবং তাদের দক্ষতা এবং কর্মক্ষমতার জন্য নিবেদিত চিপগুলির প্রয়োজন৷

কিছু এআই অ্যাক্সিলারেটর:

ট্রান্সফরমার এক্সিলারেটর:

FPGA ভিত্তিক ট্রান্সফরমার এক্সিলারেটর:


তথ্যসূত্র: