এই পর্বে যা শিখবেন
- প্রতিটি যুগে কোন সীমা ছিল, আর কোন architecture-ধারণা সেই সীমা পার করাল
- Stored-program ধারণা, ISA family, microprocessor আর RISC আন্দোলনের মূল যুক্তি
- Moore-এর সূত্র ঠিক কী বলে আর কী বলে না — হাতে আর simulator-এ হিসাব করে
- P ≈ α·C·V²·f দিয়ে Dennard scaling, তার ভেঙে পড়া আর power wall-এর প্রমাণ
- কেন multicore, কেন accelerator, আর আজকের chip-এর দাবি যাচাই করবেন কীভাবে
১ · ইতিহাস কেন — প্রতিটি যুগে একটি দেয়াল, আর একটি নতুন ধারণা
পর্ব ০১-এ (কম্পিউটার আর্কিটেকচার কী) দেখেছেন, একটি কম্পিউটার অনেকগুলো স্তরে সাজানো — transistor থেকে logic gate, তারপর ISA, তারপর operating system আর অ্যাপ। এই পর্বে প্রশ্নটা অন্য: এই স্তরগুলো কেন ঠিক এভাবে সাজানো হলো? উত্তর লুকিয়ে আছে ইতিহাসে।
এখানে কম্পিউটারের সাধারণ ইতিহাস — abacus, প্রজন্মের তালিকা, কোন কম্পিউটার কত বড় ছিল — আমরা আবার বলব না। সেটি আছে Computer Fundamentals কোর্সের কম্পিউটারের ইতিহাস, প্রজন্ম আর প্রকারভেদ পর্বে। আমাদের চোখ থাকবে শুধু architecture-এর দিকে।
একটি রেস্তোরাঁর রান্নাঘর ভাবুন। প্রথমে একজন বাবুর্চি আরও দ্রুত হাত চালান — কিন্তু হাত একসময় আর দ্রুত চলে না। তখন আসে আরও চুলা আর আরও বাবুর্চি। তারপর সবাই এক ফ্রিজের সামনে লাইনে দাঁড়ান। শেষে আসে আলাদা পরোটা-কারিগর, আলাদা কাবাব-কারিগর। কম্পিউটারের ইতিহাস প্রায় হুবহু এই গল্প: একটি দ্রুত core → clock আর বাড়ে না → অনেক core → মেমরির লাইন (memory wall) → বিশেষ কাজের বিশেষ hardware (accelerator).
যন্ত্রের যুগটি সংক্ষেপে বলে নিই, কারণ এর দুটি ধারণা আজও প্রাসঙ্গিক। ১৮৩০-এর দশকে Charles Babbage তাঁর Analytical Engine-এর নকশা করেন — দাঁতওয়ালা চাকার যন্ত্র, যার নকশায় আলাদা “store” (মেমরি) আর “mill” (হিসাবের অংশ) ছিল, আর প্রোগ্রাম আসত punched card থেকে। যন্ত্রটি তাঁর জীবদ্দশায় তৈরি হয়নি, তবে মেমরি আর processor আলাদা রাখার চিন্তাটি এখানেই প্রথম স্পষ্টভাবে দেখা যায়। ১৯৪১ সালে জার্মানিতে Konrad Zuse-এর Z3 relay (বিদ্যুৎ-চালিত সুইচ) দিয়ে তৈরি হয়; এটি binary আর floating-point সংখ্যা ব্যবহার করত, প্রোগ্রাম পড়ত ছিদ্র করা ফিল্ম থেকে। অনেকে একে প্রথম কার্যকর programmable কম্পিউটার বলেন, যদিও “প্রথম” দাবিটি সংজ্ঞার ওপর নির্ভর করে, তাই বিতর্ক আছে।
এই পর্বের প্রতিটি অংশ একই ছাঁচে পড়ুন: সীমা → ধারণা → ফল। তারের সীমা → stored program; বেমানান মডেলের সীমা → ISA family; জটিল instruction-এর সীমা → RISC; তাপের সীমা → multicore; সাধারণ-কাজের core-এর দক্ষতার সীমা → accelerator. ধারণাগুলো বদলায়, ছাঁচটি বদলায় না।
২ · ENIAC থেকে stored-program — তার জুড়ে প্রোগ্রাম বনাম মেমরিতে প্রোগ্রাম
দ্বিতীয় বিশ্বযুদ্ধের সময় যুক্তরাষ্ট্রের University of Pennsylvania-তে J. Presper Eckert আর John Mauchly তৈরি করেন ENIAC. যন্ত্রটি ১৯৪৫ সালের শেষ দিকে কাজ শুরু করে আর ১৯৪৬ সালের ফেব্রুয়ারিতে জনসমক্ষে আনা হয়। এতে ছিল প্রায় ১৮ হাজার vacuum tube — কাচের বাল্বের মতো electronic সুইচ — ওজন প্রায় ৩০ টন, বিদ্যুৎ খরচ প্রায় ১৫০ kW. গতি ছিল সেকেন্ডে প্রায় ৫ হাজার যোগ, যা তখনকার relay যন্ত্রের চেয়ে বহু গুণ বেশি।
ENIAC-এর দুটি বৈশিষ্ট্য architecture-এর দিক থেকে গুরুত্বপূর্ণ। এক, এটি decimal ছিল — প্রতিটি সংখ্যা রাখা হতো ১০টি দশমিক অঙ্কে, প্রতিটি অঙ্কের জন্য দশ অবস্থার একটি ring counter. Binary নয়। দুই, প্রোগ্রাম রাখার কোনো মেমরি ছিল না। কোন unit-এর পরে কোন unit কাজ করবে, সেটি ঠিক হতো তার (cable) জুড়ে আর হাজারো সুইচ ঘুরিয়ে। নতুন সমস্যা মানে নতুন করে তার জোড়া — যা প্রায়ই কয়েক দিন লাগত বলে বর্ণনা পাওয়া যায়। ENIAC-এর এই প্রোগ্রামিংয়ের কাজটি করতেন মূলত ছয়জন নারী গণিতজ্ঞ — Kathleen McNulty, Jean Jennings, Betty Snyder, Marlyn Wescoff, Frances Bilas আর Ruth Lichterman — যাঁদের অবদান বহু দশক আড়ালে ছিল।
ENIAC তৈরির সময়েই দল বুঝে যায় সমস্যাটা কোথায়। ১৯৪৫ সালের জুনে গণিতবিদ John von Neumann, যিনি এই দলের পরামর্শক ছিলেন, পরের যন্ত্র EDVAC-এর জন্য একটি খসড়া লেখেন — First Draft of a Report on the EDVAC. এতে স্পষ্ট বলা হয়: প্রোগ্রামের instruction-ও সংখ্যা, তাই সেগুলোকে ডেটার সাথে একই মেমরিতে রাখা যায়। একে বলে stored-program ধারণা, আর এই নকশাকে আজ বলা হয় von Neumann architecture.
কৃতিত্ব নিয়ে বিতর্ক: খসড়াটি শুধু von Neumann-এর নামে ছড়িয়ে পড়ে। Eckert আর Mauchly পরে দাবি করেন, মেমরিতে প্রোগ্রাম রাখার ধারণা নিয়ে তাঁরা আগে থেকেই কাজ করছিলেন — বিশেষ করে Eckert-এর delay-line মেমরির চিন্তা। ইতিহাসবিদরা আজও একমত নন যে কার ভাগ কতটা। এর আগে ১৯৩৬ সালে Alan Turing-এর “universal machine”-এর তত্ত্বেও প্রোগ্রামকে ডেটা হিসেবে দেখার চিন্তা ছিল। তাই নিরাপদ বক্তব্য: stored-program ধারণা একটি দলের কাজ থেকে এসেছে; von Neumann-এর খসড়া একে প্রথম গুছিয়ে লিখিত রূপ দেয়।
ধারণাটি প্রথম বাস্তবে চলে ইংল্যান্ডে। ১৯৪৮ সালের ২১ জুন University of Manchester-এর ছোট পরীক্ষামূলক যন্ত্র Manchester Baby (SSEM) মেমরিতে রাখা একটি প্রোগ্রাম চালায় — মেমরি ছিল Williams–Kilburn tube নামের এক ধরনের cathode-ray tube (পুরোনো টিভির ছবির নলের মতো), মাত্র ৩২টি word (প্রতিটি ৩২ বিটের ঘর)। এক বছর পর, ১৯৪৯ সালের মে মাসে Cambridge-এ Maurice Wilkes-এর EDSAC নিয়মিত কাজের জন্য চালু হয় — একে সাধারণত প্রথম ব্যবহারিক stored-program কম্পিউটার বলা হয়। মজার ব্যাপার, যে EDVAC-এর জন্য খসড়াটি লেখা, সেটি নানা কারণে পিছিয়ে যায় আর নিয়মিত কাজ শুরু করে এদের পরে, পঞ্চাশের দশকের শুরুতে।
নিচের stepper-এ একই কাজ দুই যুগে কীভাবে “প্রোগ্রাম” হতো, ধাপে ধাপে দেখুন। Stored-program অংশের instruction কাল্পনিক — শুধু ধারণা বোঝানোর জন্য।
কাজ: C = A + B (A = 7, B = 5) পরের সপ্তাহের কাজ: C = A × B
[accumulator 1: A] ──তার──┐ [accumulator 2: B] ──তার──┼──▶ [accumulator 3: C] [master programmer] সুইচ: "1 আর 2 থেকে 3-এ যোগ, একবার" তার জোড়া আর সুইচ মেলানো: কয়েক ঘণ্টা থেকে কয়েক দিন
pulse ─▶ যোগ ─▶ C = 12 হিসাব: মিলিসেকেন্ডেরও কম · প্রস্তুতি: ঘণ্টা বা দিনের ঘরে
[accumulator 1] ──╳ (তার খোলা) [multiplier unit] ◀──নতুন তার── [accumulator 1], [accumulator 2] [multiplier unit] ──নতুন তার──▶ [accumulator 3] যন্ত্র একই, কিন্তু “প্রোগ্রাম” মানে আবার হাতের কাজ
ঠিকানা বিষয়বস্তু 0 LOAD [100] ; A আনা 1 ADD [101] ; B যোগ 2 STORE [102] ; C-তে রাখা 3 HALT 100 7 101 5 102 12
ঠিকানা বিষয়বস্তু 0 LOAD [100] 1 MUL [101] ; ঠিকানা 1-এর সংখ্যাটি বদলানো হলো 2 STORE [102] 3 HALT 100 7 101 5 102 35 tape বা card থেকে নতুন প্রোগ্রাম লোড: মিনিটের ঘরে
- একই সমস্যা, দুই যুগ। কাজটি সহজ: A = ৭ আর B = ৫ যোগ করে C-তে রাখা। পরের সপ্তাহে কাজ বদলাবে — যোগের বদলে গুণ। দেখা যাক দুই ধরনের যন্ত্রে “প্রোগ্রাম বদলানো” মানে কী।
- ENIAC-এ প্রোগ্রাম লেখা মানে তার জোড়া। কোন accumulator (যোগ আর সংখ্যা রাখার unit) থেকে কোথায় সংখ্যা যাবে, সেটি ঠিক হয় তারের পথ আর সুইচের অবস্থানে। প্রোগ্রাম কোনো মেমরিতে নেই — যন্ত্রের গায়েই লেখা। ঠিক যেন সুইচবোর্ডে কোন সুইচ কোন বাতি জ্বালাবে, তা মিস্ত্রিকে ডেকে নতুন করে তার টেনে ঠিক করানো।
- চালালে হিসাব চোখের পলকে। সব জোড়া হয়ে গেলে C = ১২ পেতে সময় লাগে মিলিসেকেন্ডেরও কম। সমস্যা হিসাবের গতিতে নয় — প্রস্তুতির সময়ে।
- নতুন কাজ মানে সব খুলে আবার জোড়া। গুণের জন্য multiplier unit-এ নতুন তার টানতে হয়, পুরোনোগুলো খুলতে হয়। ভুল তার মানে ভুল ফল, আর ভুল খোঁজাও হাতে।
- Stored-program: instruction-ও সংখ্যা। এবার মেমরির ঘরগুলো দেখুন। ঠিকানা ০–৩-এ instruction, ১০০–১০২-এ ডেটা — দুটোই একই মেমরিতে, দুটোই সংখ্যা। CPU একটি একটি করে instruction আনে, বোঝে আর চালায়: ৭ + ৫ = ১২ জমা হয় ঠিকানা ১০২-এ। তারে কেউ হাত দেয়নি।
- প্রোগ্রাম বদলাল শুধু একটি সংখ্যা বদলে। ঠিকানা ১-এর ADD-কে MUL করা হলো, ফল ৭ × ৫ = ৩৫. নতুন প্রোগ্রাম tape থেকে লোড হয় মিনিটে। আর যেহেতু প্রোগ্রামও ডেটা, একটি প্রোগ্রাম আরেকটি প্রোগ্রাম লিখতে পারে — এখান থেকেই assembler আর compiler সম্ভব হলো। দাম একটাই: instruction আর ডেটা একই পথ দিয়ে আসে, তাই সেই পথটি হয়ে ওঠে যানজটের জায়গা — একে বলে von Neumann bottleneck.
“Von Neumann bottleneck” কথাটি চালু করেন John Backus — FORTRAN-এর স্রষ্টা — তাঁর ১৯৭৭ সালের Turing Award ভাষণে। Instruction আর ডেটার জন্য আলাদা মেমরি আর আলাদা পথ রাখার নকশাকে বলে Harvard architecture. আজকের CPU দুটো মিলিয়ে চলে: বাইরে একটাই মেমরি (von Neumann), কিন্তু ভেতরে instruction cache আর data cache আলাদা (Harvard-এর মতো)। এর বিস্তারিত মডিউল ৮-এ cache-এর পর্বগুলোতে।
৩ · Transistor, IC আর IBM System/360 — “architecture” শব্দের জন্ম
Vacuum tube গরম হতো, প্রচুর বিদ্যুৎ খেত, আর প্রায়ই পুড়ে যেত — হাজার হাজার tube-এর যন্ত্রে প্রতিদিনই কোনো না কোনোটি বদলাতে হতো। সমাধান এলো ১৯৪৭ সালের ডিসেম্বরে, Bell Labs-এ: John Bardeen আর Walter Brattain প্রথম কার্যকর transistor দেখান, আর William Shockley পরে junction transistor-এর তত্ত্ব দেন। তিনজনই ১৯৫৬ সালে পদার্থবিজ্ঞানে Nobel পান। Transistor হলো semiconductor (অর্ধপরিবাহী, যেমন silicon) দিয়ে তৈরি একটি ছোট সুইচ — tube-এর কাজই করে, কিন্তু অনেক ছোট, ঠান্ডা আর টেকসই। পঞ্চাশের দশকের মাঝামাঝি থেকে transistor-চালিত কম্পিউটার আসে (Manchester-এর পরীক্ষামূলক যন্ত্র আর Bell Labs-এর TRADIC প্রথম দিকের উদাহরণ হিসেবে উল্লেখিত), আর পঞ্চাশের দশকের শেষ থেকে IBM 7090-এর মতো বাণিজ্যিক যন্ত্র tube-এর জায়গা নেয়।
পরের সমস্যা ছিল তার। হাজার হাজার আলাদা transistor হাতে ঝালাই করে জোড়া — ভুল আর খরচ দুটোই বেশি। ১৯৫৮ সালে Texas Instruments-এর Jack Kilby একই germanium টুকরোর ওপর কয়েকটি উপাদান জুড়ে প্রথম integrated circuit (IC) দেখান; ১৯৫৯ সালে Fairchild-এর Robert Noyce সহকর্মী Jean Hoerni-র planar পদ্ধতি (silicon-এর সমতল পিঠে স্তরে স্তরে উপাদান বানানো) কাজে লাগিয়ে এমন IC-র নকশা করেন, যা কারখানায় ব্যাপকভাবে বানানো যায়। আজকের প্রতিটি chip মূলত এই পদ্ধতির বংশধর। (Kilby ২০০০ সালে Nobel পান; Noyce তার আগেই মারা যান।)
IBM System/360 — একটি ISA, অনেক যন্ত্র
পঞ্চাশের দশকে প্রতিটি নতুন কম্পিউটার মডেলের instruction ছিল আলাদা। ছোট যন্ত্র থেকে বড় যন্ত্রে গেলে পুরো software নতুন করে লিখতে হতো। ১৯৬৪ সালের এপ্রিলে IBM ঘোষণা দেয় System/360: দাম আর গতিতে খুব আলাদা কয়েকটি মডেল, কিন্তু সবার একই instruction set. ছোট মডেলে লেখা প্রোগ্রাম বড় মডেলে কোনো বদল ছাড়াই চলবে।
এই প্রকল্পের নকশাকারী Gene Amdahl, Gerrit Blaauw আর Fred Brooks ১৯৬৪ সালের একটি প্রবন্ধে “architecture” শব্দটি এই অর্থে ব্যবহার করেন: প্রোগ্রামার যা দেখেন — instruction, register, ডেটার ধরন, মেমরির ঠিকানা দেওয়ার নিয়ম। আর সেটি hardware-এ কীভাবে বানানো হলো — কতটি adder, কত দ্রুত মেমরি — তা হলো implementation বা আজকের ভাষায় microarchitecture. পর্ব ০১-এ যে স্তরভাগ দেখেছেন, এই পার্থক্যটি তার কেন্দ্রে। System/360 থেকেই ৮ বিটের byte সাধারণ মান হয়ে দাঁড়ায়।
বাংলাদেশের যেকোনো দোকানের বৈদ্যুতিক সকেট ভাবুন। সকেটের আকার আর voltage একটি “চুক্তি”। পাখা, চার্জার, ইস্ত্রি — যে কোম্পানিরই হোক, চুক্তি মানলে লাগানো যায়। দেয়ালের ভেতরে তার কোন পথে গেছে, কোন কোম্পানির — সেটি আলাদা ব্যাপার। ISA হলো সেই সকেট; microarchitecture হলো দেয়ালের ভেতরের তার। চুক্তি ঠিক থাকলে ভেতরের নকশা যত খুশি উন্নত করা যায়।
System/360-এর ছোট আর মাঝারি মডেলগুলোর বেশিরভাগ microprogramming দিয়ে বানানো ছিল — ধারণাটি ১৯৫১ সালে Maurice Wilkes প্রস্তাব করেন। প্রতিটি জটিল instruction-কে ভেতরে একটি ছোট “প্রোগ্রাম” (microcode) দিয়ে চালানো হয়, যা থাকে processor-এর ভেতরের একটি দ্রুত ROM-এ (শুধু-পড়ার মেমরি)। ফলে সস্তা, সরল hardware-এও জটিল ISA চালানো যায় — শুধু ধীরে। এক ISA, নানা দামের implementation — এই কৌশলটিই System/360-কে সম্ভব করে। Microprogrammed control-এর ভেতরটা দেখবেন পর্ব ৩৪-এ।
ষাট-সত্তরের দশকে আসে minicomputer: DEC-এর PDP-8 (১৯৬৫, ১২ বিটের) ঘরজোড়া mainframe কম্পিউটারের চেয়ে অনেক ছোট আর সস্তা, ল্যাবরেটরি আর কারখানায় ঢুকে পড়ে। ১৯৭০ সালের PDP-11 (১৬ বিটের) পরিচ্ছন্ন, নিয়মিত instruction set-এর জন্য বিখ্যাত — Unix আর C বেড়ে ওঠে মূলত এতেই।
৪ · Microprocessor — 4004 থেকে x86 আর 68000
IC-তে transistor বাড়তে বাড়তে একসময় পুরো CPU একটি chip-এ ধরে গেল। ১৯৭১ সালে Intel বাজারে আনে 4004 — সাধারণত প্রথম বাণিজ্যিক single-chip microprocessor হিসেবে ধরা হয়। এটি ছিল ৪ বিটের, প্রায় ২,৩০০ transistor, আর clock ১ MHz-এরও কম (প্রায় ৭৪০ kHz). জাপানের একটি ক্যালকুলেটর কোম্পানি (Busicom)-র জন্য নকশা শুরু হয়েছিল; নকশাকারী দলে ছিলেন Federico Faggin, Ted Hoff, Stanley Mazor আর Busicom-এর Masatoshi Shima.
তারপর দ্রুত এলো একের পর এক chip:
| বছর (প্রায়) | Chip | বিট | কেন গুরুত্বপূর্ণ |
|---|---|---|---|
| ১৯৭১ | Intel 4004 | ৪ | প্রথম বাণিজ্যিক single-chip CPU; প্রায় ২,৩০০ transistor |
| ১৯৭৪ | Intel 8080 | ৮ | প্রথম দিকের সফল personal computer (যেমন Altair 8800)-এর মস্তিষ্ক |
| ১৯৭৮ | Intel 8086 | ১৬ | প্রায় ২৯,০০০ transistor; এখান থেকেই x86 বংশ। এর সহোদর 8088 ছিল ১৯৮১ সালের IBM PC-তে |
| ১৯৭৯ | Motorola 68000 | ৩২ (ভেতরে), ১৬ (data bus) | পরিচ্ছন্ন ৩২ বিটের register; প্রথম Apple Macintosh (১৯৮৪)-সহ বহু যন্ত্রে |
| ১৯৮৫ | Intel 80386 | ৩২ | x86-কে ৩২ বিটে নেয়, সাথে paging (virtual memory-র hardware, পর্ব ৫০) — আধুনিক OS চালানোর ভিত্তি |
এখানে সবচেয়ে বড় architecture-শিক্ষাটি হলো backward compatibility. IBM PC-র সাফল্যের পর x86-এ লেখা software-এর পাহাড় তৈরি হয়। প্রতিটি নতুন Intel আর AMD chip পুরোনো instruction চালাতে পারে — ১৯৭৮ সালের নকশার কিছু নিয়ম আজকের ৬৪ বিটের x86-64 chip-এও রয়ে গেছে। System/360-এর শিক্ষাই এখানে আরও বড় আকারে: একবার একটি ISA-তে অনেক software জমে গেলে, সেই ISA দশকের পর দশক টিকে থাকে — তার নকশা নিখুঁত না হলেও।
x86 আর 68000-এর মতো ISA-কে আশির দশকে নাম দেওয়া হয় CISC (Complex Instruction Set Computer): অনেক রকম আর নানা দৈর্ঘ্যের instruction, কিছু instruction এক ধাপেই মেমরি থেকে পড়ে হিসাব করে আবার মেমরিতে লেখে। কারণ সেই যুগে মেমরি দামি আর ধীর, compiler দুর্বল — প্রতিটি instruction দিয়ে যত বেশি কাজ, ততই ভালো মনে হতো। জটিলতা সামলাত microcode.
৫ · RISC আন্দোলন — IBM 801, Berkeley, Stanford থেকে ARM আর RISC-V
সত্তরের দশকের শেষে কয়েকজন গবেষক একটি অস্বস্তিকর প্রশ্ন তোলেন: compiler আসলে জটিল instruction-গুলোর কতটা ব্যবহার করে? মাপজোখে দেখা গেল, প্রোগ্রাম চলার বেশিরভাগ সময় যায় কয়েকটি সরল instruction-এ — load, store, যোগ, তুলনা, branch. জটিল instruction-গুলো খুব কম কাজে লাগে, অথচ তাদের জন্য hardware জটিল আর ধীর হয়।
উত্তর এলো তিন জায়গা থেকে, প্রায় একই সময়ে:
- IBM 801 — John Cocke-এর দল, সত্তরের দশকের মাঝামাঝি শুরু, আশির দশকের শুরুতে প্রোটোটাইপ। অনেকে একে প্রথম RISC নকশা বলেন, যদিও বহুদিন এটি IBM-এর ভেতরেই ছিল।
- Berkeley RISC — David Patterson-এর দল, ১৯৮০ সাল থেকে; RISC নামটি এখান থেকেই। এর বংশধর পরে Sun-এর SPARC.
- Stanford MIPS — John Hennessy-র দল, আশির দশকের শুরুতে; পরে বাণিজ্যিক MIPS processor হয়।
RISC (Reduced Instruction Set Computer)-এর মূল নিয়মগুলো সরল: নির্দিষ্ট দৈর্ঘ্যের instruction, অনেকগুলো register, শুধু load আর store মেমরিতে হাত দেয়, বাকি সব হিসাব register-এর মধ্যে। এতে প্রতিটি instruction সমান ছোট ধাপে ভাগ করা যায় — অর্থাৎ pipelining সহজ হয় (পর্ব ৩৫), আর microcode ছাড়াই সরাসরি hardware-এ control বানানো যায় (পর্ব ৩৩)। Hennessy আর Patterson ২০১৭ সালের Turing Award পান এই কাজের জন্য, আর তাঁদের পাঠ্যবই এই কোর্সের ধাঁচের ভিত্তি।
১৯৮৫ সালে ইংল্যান্ডের Acorn Computers তাদের নিজেদের কম্পিউটারের জন্য একটি ছোট RISC chip বানায় — ARM1 (Acorn RISC Machine); নকশায় ছিলেন Sophie Wilson আর Steve Furber. কম transistor আর কম বিদ্যুৎ খরচ ছিল এর বড় গুণ। ১৯৯০ সালে আলাদা কোম্পানি ARM গঠিত হয়, যারা নিজে chip না বানিয়ে নকশার license বিক্রি করে। কম বিদ্যুতের এই গুণটিই পরে মোবাইল ফোনের যুগে ARM-কে প্রায় একচেটিয়া করে তোলে — আপনার হাতের ফোনের CPU প্রায় নিশ্চিতভাবেই ARM ISA-র।
২০১০ সালে UC Berkeley-তে Krste Asanović, David Patterson আর তাঁদের ছাত্ররা (Andrew Waterman, Yunsup Lee প্রমুখ) একটি গবেষণা প্রকল্পের জন্য নতুন ISA বানানো শুরু করেন — RISC-V. এর বিশেষত্ব architecture-এ নয়, লাইসেন্সে: এটি একটি open ISA — যে কেউ রয়্যালটি ছাড়াই এই ISA মেনে chip বানাতে পারেন। ছোট একটি মূল অংশ (যেমন RV32I) আর তার ওপর ঐচ্ছিক extension — গুণ, floating point, vector ইত্যাদি। এর পরিচালনা এখন RISC-V International নামের একটি অলাভজনক সংগঠনের হাতে। এই কোর্সে আমরা RV32I-কেই মূল শিক্ষার ISA হিসেবে ব্যবহার করব; RISC বনাম CISC-এর পুরো তুলনা পর্ব ২৫-এ।
আজ RISC বনাম CISC এত সরল নয়: ১৯৯৫ সালের Pentium Pro থেকে x86 chip ভেতরে instruction-কে ছোট RISC-ধাঁচের micro-op-এ ভেঙে চালায় — বাইরে CISC চুক্তি, ভেতরে RISC-এর মতো কারখানা। বিস্তারিত ভাবনার প্রশ্ন ৩-এ।
৬ · Moore-এর সূত্র — ঠিক কী বলে, আর কী বলে না
১৯৬৫ সালে Fairchild-এর Gordon Moore (পরে Intel-এর সহ-প্রতিষ্ঠাতা) Electronics পত্রিকায় একটি ছোট প্রবন্ধ লেখেন। তিনি লক্ষ করেন, সবচেয়ে কম খরচে একটি chip-এ যতগুলো উপাদান বসানো যায়, সেই সংখ্যা প্রতি বছর মোটামুটি দ্বিগুণ হচ্ছে, আর অন্তত আরও দশ বছর এমন চলবে বলে তিনি অনুমান করেন। ১৯৭৫ সালে তিনি হার সংশোধন করে বলেন — প্রায় প্রতি দুই বছরে দ্বিগুণ। এটিই আজ Moore-এর সূত্র নামে পরিচিত।
যা বলে
একটি chip-এ (সাশ্রয়ী খরচে) transistor-এর সংখ্যা নিয়মিত হারে বাড়ে — প্রায় প্রতি ২ বছরে দ্বিগুণ। এটি একটি পর্যবেক্ষণ, যা পরে শিল্পের লক্ষ্য হয়ে ওঠে।
transistor count, অর্থনীতিযা বলে না
Clock frequency দ্বিগুণ হবে, কম্পিউটারের গতি দ্বিগুণ হবে, বা এটি পদার্থবিজ্ঞানের কোনো নিয়ম — এসব Moore বলেননি। প্রচলিত “১৮ মাস” সংখ্যাটি সাধারণত Intel-এর আরেক কর্মকর্তা David House-এর পারফরম্যান্স-সংক্রান্ত অনুমান থেকে এসেছে বলে উল্লেখ করা হয়।
গতি নয়, প্রাকৃতিক নিয়ম নয়হাতে হিসাব — 4004 থেকে আজ
শুরু ধরুন ১৯৭১ সালের 4004: N0 = ২,৩০০, T = ২ বছর।
- ১৯৭৮ (8086): (১৯৭৮ − ১৯৭১)/২ = ৩.৫ বার দ্বিগুণ। 23.5 ≈ ১১.৩১, তাই পূর্বাভাস ≈ ২,৩০০ × ১১.৩১ ≈ ২৬,০০০. আসল প্রায় ২৯,০০০ — খুব কাছে।
- ১৯৯৩ (Pentium): ১১ বার দ্বিগুণ, 211 = ২,০৪৮. পূর্বাভাস ≈ ২,৩০০ × ২,০৪৮ ≈ ৪৭ লাখ (4.7 million). আসল প্রায় ৩১ লাখ — পূর্বাভাসের প্রায় দুই-তৃতীয়াংশ।
- ২০২১: ২৫ বার দ্বিগুণ, 225 = ৩,৩৫,৫৪,৪৩২. পূর্বাভাস ≈ ৭,৭২০ কোটি (77.2 billion). এই সময়ের বড় chip-গুলোতে transistor সত্যিই কয়েক হাজার কোটির ঘরে (tens of billions) — অর্থাৎ পঞ্চাশ বছর পরেও সূত্রটি মাত্রার দিক থেকে মেলে।
নিচের simulator একই হিসাব দশক ধরে ছাপে আর আনুমানিক বাস্তব মানের সাথে মেলায়। period বদলে ১ বা ৩ করে চালিয়ে দেখুন — দ্বিগুণ হওয়ার সময়ের সামান্য পার্থক্য পঞ্চাশ বছরে কত বড় হয়:
// Moore's-law projector: N(year) = N0 * 2^((year - Y0) / period)
const N0 = 2300, Y0 = 1971; // Intel 4004, ~2,300 transistors
const period = 2; // doubling period in years (1975 revision)
const predict = (y, p = period) => N0 * Math.pow(2, (y - Y0) / p);
const fmt = n => n >= 1e9 ? (n / 1e9).toFixed(1) + " billion"
: n >= 1e6 ? (n / 1e6).toFixed(1) + " million"
: Math.round(n).toLocaleString("en-US");
console.log("year doublings predicted transistors");
for (let y = 1971; y <= 2021; y += 10)
console.log(String(y).padEnd(6) + String((y - Y0) / period).padEnd(11) + fmt(predict(y)));
// Approximate real milestones (well-known, rounded values)
const real = [
["Intel 4004", 1971, 2300, "~2,300"],
["Intel 8086", 1978, 29000, "~29,000"],
["Pentium", 1993, 3.1e6, "~3.1 million"],
["big chip, early 2020s", 2021, null, "tens of billions"],
];
console.log("\nchip year real (approx) predicted");
for (const [name, y, n, shown] of real) {
const ratio = n ? "pred/real = " + (predict(y) / n).toFixed(2) : "";
console.log((name.padEnd(23) + String(y).padEnd(6) + shown.padEnd(18) +
fmt(predict(y)).padEnd(14) + ratio).trimEnd());
}
// What if the 1965 "double every year" pace had continued?
console.log("\n1-year doubling would predict for 2021: " + predict(2021, 1).toExponential(2));আউটপুট (নির্ধারিত — প্রতিবার একই):
year doublings predicted transistors
1971 0 2,300
1981 5 73,600
1991 10 2.4 million
2001 15 75.4 million
2011 20 2.4 billion
2021 25 77.2 billion
chip year real (approx) predicted
Intel 4004 1971 ~2,300 2,300 pred/real = 1.00
Intel 8086 1978 ~29,000 26,022 pred/real = 0.90
Pentium 1993 ~3.1 million 4.7 million pred/real = 1.52
big chip, early 2020s 2021 tens of billions 77.2 billion
1-year doubling would predict for 2021: 2.59e+18
প্রতি দশকে ৫ বার দ্বিগুণ, অর্থাৎ ৩২ গুণ — 2,300 থেকে 73,600, তারপর 2.4 million, এভাবে। 8086-এ পূর্বাভাস আসলের ০.৯০ গুণ, Pentium-এ ১.৫২ গুণ — অর্থাৎ পথে কখনো একটু আগে, কখনো একটু পিছে, কিন্তু মাত্রা ঠিক। শেষ লাইনটি দেখায় কেন ১৯৭৫ সালের সংশোধন জরুরি ছিল: ১৯৬৫ সালের “প্রতি বছর দ্বিগুণ” চলতে থাকলে ২০২১ সালে লাগত প্রায় 2.59 × 1018 transistor — বাস্তবের চেয়ে কোটি গুণেরও বেশি। বাস্তব মানগুলো আনুমানিক, গোল করা; আধুনিক chip-এর জন্য ইচ্ছা করেই কোনো একক সংখ্যা দেওয়া হয়নি, কারণ “বড় chip” কোনটি তার ওপর মান অনেক বদলায়।
Moore-এর সূত্র আসলে অর্থনীতির কথা: transistor ছোট হলে একই silicon-এ বেশি transistor ধরে, তাই প্রতি transistor-এর খরচ কমে। গত দশকে নতুন কারখানা আর যন্ত্রের খরচ এত বেড়েছে যে এই খরচ আগের মতো দ্রুত কমছে না বলে অনেকে মনে করেন — বিতর্কটি ভাবনার প্রশ্ন ৪-এ।
৭ · Dennard scaling আর power wall — P ≈ α·C·V²·f
Transistor বাড়ল, কিন্তু chip গলে গেল না কেন? উত্তর ১৯৭৪ সালে IBM-এর Robert Dennard আর সহকর্মীদের একটি প্রবন্ধে। এর আগে একটু পদার্থবিজ্ঞান লাগবে — chip কেন বিদ্যুৎ খায়।
Dynamic power-এর সমীকরণ
CMOS circuit-এ (পর্ব ০৮) প্রতিটি gate-এর output-এ একটি ছোট capacitance (charge জমিয়ে রাখার ক্ষমতা) থাকে — তার আর পরের gate-এর input মিলিয়ে। Output ০ থেকে ১ হলে এই capacitance-কে voltage V পর্যন্ত charge করতে হয়, আর ১ থেকে ০ হলে charge ফেলে দিতে হয়। একবার charge আর discharge-এ supply থেকে আসা শক্তি C·V², যার পুরোটাই শেষে তাপ হয়ে যায়। Clock-এর প্রতি cycle-এ সব gate উল্টায় না — যে ভগ্নাংশ gate-এর output ০ থেকে ১-এ ওঠে (অর্থাৎ charge হয়), তাকে বলে activity factor α. সেকেন্ডে f বার cycle হলে:
এখানে C হলো পুরো chip-এর মোট switching capacitance. (কিছু বইয়ে সামনে ½ থাকে — সেখানে α ধরা হয় যেকোনো দিকে (০→১ বা ১→০) উল্টানোর সম্ভাবনা, কারণ প্রতিটি উল্টানোয় গড়ে ½·C·V² শক্তি তাপ হয়; মূল কথা একই।) এর সাথে আছে leakage বা static power — transistor বন্ধ থাকলেও সামান্য current চুইয়ে যায়। এই দ্বিতীয়টিই পরে গল্পের খলনায়ক।
সমীকরণে dynamic power-এর সবচেয়ে শক্তিশালী হাতল হলো V, কারণ সেটি বর্গে আছে। একটি উদাহরণ: α = ০.১, C = ১০০ nF, V = ১.০ V, f = ৩ GHz হলে
এখন আশির দশকের মতো ৫ V-এ একই chip চালালে V² হতো ২৫ গুণ — ৭৫০ W, যা কোনো সাধারণ CPU ঠান্ডা রাখতে পারবে না। পুরোনো chip ৫ V-এ চলতে পারত, কারণ তখন transistor কম আর f অনেক কম ছিল। নব্বইয়ের দশক জুড়ে supply voltage ৫ V থেকে ধাপে ধাপে ৩.৩ V, তারপর ২ V-এর নিচে, আর পরে প্রায় ১ V-এর ঘরে নেমে আসে। Voltage কমানোই ছিল transistor আর clock একসাথে বাড়ানোর গোপন চাবি।
Dennard scaling — কেন power density স্থির থাকত
Dennard-এর যুক্তি: ধরুন প্রতি প্রজন্মে transistor-এর সব মাপ (দৈর্ঘ্য, প্রস্থ, oxide-এর পুরুত্ব) আর voltage — সব κ গুণ ছোট করা হলো (সাধারণত κ ≈ ১.৪, অর্থাৎ মাপ × ০.৭)। তাহলে:
- প্রতিটি transistor-এর ক্ষেত্রফল 1/κ², তাই একই জায়গায় transistor κ² গুণ (≈ ২ গুণ — এটিই Moore-এর দ্বিগুণ)।
- Capacitance C ∝ মাপ → 1/κ; voltage V → 1/κ.
- Gate ছোট আর দ্রুত হয়, delay 1/κ, তাই f → κ গুণ।
- প্রতি transistor-এর power: C·V²·f → (1/κ)·(1/κ²)·κ = 1/κ².
- প্রতি বর্গমিলিমিটারে power = (প্রতি transistor-এর power) × (transistor-এর ঘনত্ব) = (1/κ²) × κ² = ১ — অর্থাৎ অপরিবর্তিত।
এটাই Dennard scaling: প্রতি প্রজন্মে দ্বিগুণ transistor, ১.৪ গুণ clock, অথচ chip-এর প্রতি বর্গমিলিমিটারে তাপ একই — অর্থাৎ power density স্থির। প্রায় তিন দশক ধরে নকশাকারীরা এই “বিনা পয়সার ভোজ” পেয়েছেন। নিচের stepper-এ প্রজন্ম ধরে ধরে দেখুন, আর শেষে দেখুন voltage আটকে গেলে কী হয় (সব মান প্রথম প্রজন্মের তুলনায় আপেক্ষিক, κ = ১.৪):
| প্রজন্ম | |
| মাপ L ও capacitance C | |
| voltage V | |
| clock f | |
| power / transistor (C·V²·f) | |
| transistor / mm² | |
| power density |
- শুরুর প্রজন্ম। সব মান ১ ধরে নিলাম — এটিই আমাদের মাপকাঠি। প্রতি বর্গমিলিমিটারে যে তাপ হয়, cooler ঠিক ততটাই সরাতে পারে।
- প্রজন্ম ১ — সব ০.৭ গুণ। মাপ, C আর V সবই ০.৭১, clock ১.৪০ গুণ। প্রতি transistor-এর power (১/১.৪) × (১/১.৪)² × ১.৪ = ১/১.৯৬ ≈ ০.৫১. একই জায়গায় transistor ১.৯৬ ≈ ২ গুণ, তাই power density (১/১.৯৬) × ১.৯৬ = ১.০০ — কোনো বাড়তি তাপ নেই।
- প্রজন্ম ২। Transistor ৩.৮ গুণ, clock ১.৯৬ গুণ, প্রতি transistor-এর power ০.২৬, power density এখনো ১.০০ — নব্বইয়ের দশক পর্যন্ত শিল্পের ছন্দ মোটামুটি এমনই।
- প্রজন্ম ৩। Transistor ৭.৫ গুণ, clock ২.৭৪ গুণ, voltage ০.৩৬ গুণ, power density তবুও ১.০০. কিন্তু voltage কমাতে হলে threshold voltage-ও (যে voltage-এ transistor চালু হয়) কমাতে হয়, আর তাতে leakage দ্রুত বাড়ে।
- প্রজন্ম ৪ — voltage আর কমে না। ২০০০-এর দশকের মাঝামাঝি leakage এত বেড়ে গেল যে V আর কমানো গেল না (প্রায় ১ V-এর কাছে আটকে গেল)। মাপ আর C কমল, clock বাড়ল, কিন্তু V রইল ০.৩৬-এ। প্রতি transistor-এর power আর কমল না (০.১৩৩), অথচ transistor দ্বিগুণ — power density লাফিয়ে ১.৯৬. এটাই power wall.
- উপায় খোঁজা — clock থামানো। একই প্রজন্ম ৪-এ clock না বাড়িয়ে আগের ২.৭৪-এ রাখলে প্রতি transistor-এর power নামে ০.০৯৫-এ, তবু power density ১.৪০ — এখনো বেশি। অর্থাৎ clock থামিয়েও সব transistor একসাথে পূর্ণ গতিতে চালানো যায় না; কিছু অংশ বন্ধ রাখতে হবে। এখান থেকেই multicore আর “dark silicon”-এর গল্প।
একই হিসাব যন্ত্রে মিলিয়ে নিন। প্রথম অংশে একটি chip-এর clock বাড়াতে গেলে voltage-ও বাড়াতে হয় (দ্রুত switch করতে বেশি voltage লাগে) — তখন P কেমন বাড়ে; দ্বিতীয় অংশে প্রজন্ম ধরে power density:
// Dynamic power: P = alpha * C * V^2 * f
const P = (alpha, C, V, f) => alpha * C * V * V * f;
const alpha = 0.1, C = 100e-9; // activity factor, switched capacitance (F)
console.log("Part A: one chip, V raised together with f");
console.log("V(volt) f(GHz) P(watt) P/P0");
const base = P(alpha, C, 1.0, 3e9);
for (const [V, fGHz] of [[1.0, 3], [1.1, 3.3], [1.2, 3.6], [1.333, 4]]) {
const p = P(alpha, C, V, fGHz * 1e9);
console.log(V.toFixed(3).padEnd(9) + fGHz.toFixed(1).padEnd(8) +
p.toFixed(1).padEnd(9) + (p / base).toFixed(2));
}
console.log("\nPart B: power density per generation (k = 1.4 shrink)");
console.log("gen rule P/transistor transistors/area power density");
const k = 1.4;
let pt = 1, dens = 1;
for (let g = 1; g <= 6; g++) {
const dennard = g <= 3; // first 3 generations: V scales too
const vScale = dennard ? 1 / k : 1; // later: V stuck (leakage)
pt *= (1 / k) * vScale * vScale * k; // C x V^2 x f (f still x k)
dens *= k * k;
console.log(String(g).padEnd(5) + (dennard ? "Dennard" : "V stuck").padEnd(12) +
pt.toFixed(3).padEnd(14) + dens.toFixed(1).padEnd(18) + (pt * dens).toFixed(2));
}আউটপুট (নির্ধারিত):
Part A: one chip, V raised together with f
V(volt) f(GHz) P(watt) P/P0
1.000 3.0 30.0 1.00
1.100 3.3 39.9 1.33
1.200 3.6 51.8 1.73
1.333 4.0 71.1 2.37
Part B: power density per generation (k = 1.4 shrink)
gen rule P/transistor transistors/area power density
1 Dennard 0.510 2.0 1.00
2 Dennard 0.260 3.8 1.00
3 Dennard 0.133 7.5 1.00
4 V stuck 0.133 14.8 1.96
5 V stuck 0.133 28.9 3.84
6 V stuck 0.133 56.7 7.53
Part A: clock ৩ থেকে ৪ GHz — মাত্র ৩৩% বেশি — কিন্তু power ৩০ W থেকে ৭১.১ W, প্রায় ২.৩৭ গুণ। কারণ V-ও f-এর সাথে সমানুপাতে বাড়ছে, তাই P ∝ V²·f ∝ f³, আর (৪/৩)³ ≈ ২.৩৭. এই প্রায়-ঘন (cubic-ish) সম্পর্কের জন্যই clock বাড়ানো খুব দ্রুত অসম্ভব রকম দামি হয়ে যায়। বাস্তবে সম্পর্কটি পুরো ঘন নয় — voltage-এর একটি নিম্নসীমা আছে, আর leakage আলাদা যোগ হয় — কিন্তু ধারাটা এমনই। Part B: প্রথম তিন প্রজন্মে power density ১.০০-এ স্থির, stepper-এর সাথে হুবহু মেলে। V আটকে যাওয়ার পর প্রতি প্রজন্মে ১.৯৬ গুণ (κ²) — তিন প্রজন্মে ৭.৫৩ গুণ। কোনো cooler এই হারে তাল রাখতে পারে না।
দেয়ালটি সবচেয়ে স্পষ্ট দেখা যায় Intel-এর Pentium 4-এ। এর নকশা ছিল খুব লম্বা pipeline দিয়ে clock যত সম্ভব বাড়ানো; ২০০৪ সালে এটি ৩.৮ GHz-এ পৌঁছায়। তাপের সমস্যায় ২০০৪ সালে Intel পরের উচ্চ-clock প্রকল্প বাতিল করে একাধিক core-এর পথে ঘোরে। প্রায় দুই দশক পরেও সাধারণ desktop chip-এর সর্বোচ্চ (boost) clock মোটামুটি ৫–৬ GHz-এর ঘরে — আগের হারে (বছরে প্রায় ৩০%) চললে যা এতদিনে কয়েকশো GHz হওয়ার কথা ছিল।
৮ · Multicore-এর দিকে মোড় — কেন একাধিক core
Clock বাড়ানো বন্ধ, কিন্তু Moore-এর সূত্র তখনো transistor দিচ্ছে। এই বাড়তি transistor দিয়ে কী করা যায়? উত্তর: একটি chip-এ একাধিক সম্পূর্ণ processor — multicore. IBM-এর POWER4 (২০০১) সাধারণত প্রথম বাণিজ্যিক dual-core chip হিসেবে উল্লেখ করা হয়; ২০০৫ সালে AMD আর Intel দুজনেই সাধারণ ক্রেতার জন্য dual-core chip বাজারে আনে। কেন এটি power-এর দিক থেকে লাভজনক, নিচের stepper-এ দেখুন। ধরে নেওয়া হলো V ∝ f (তাই এক core-এর P ∝ f³), সব মান এক core-এর শুরুর মানের তুলনায় আপেক্ষিক:
| নকশা | |
| মোট power | |
| কাজ পুরো সমান্তরাল হলে গতি | |
| কাজের অর্ধেক সমান্তরাল হলে গতি |
- শুরু: একটি core. Clock f = ১, voltage ১, power ১, গতি ১. ধরুন chip-এর cooler বড়জোর প্রায় ২ একক তাপ সরাতে পারে।
- Clock ৩০% বাড়ালাম। V-ও ১.৩ গুণ লাগে, তাই power ১.৩³ ≈ ২.২০ — সীমার কাছাকাছি, একটু বেশিও। গতি মাত্র ১.৩০ গুণ। ৩০% গতির জন্য ১২০% বাড়তি বিদ্যুৎ।
- আরও ঠেলে ১.৬ গুণ। Power ১.৬³ ≈ ৪.১০ — cooler-এর সীমার দ্বিগুণ। Chip হয় গরমে নিজের গতি কমিয়ে দেবে (throttling), নয়তো বানানোই যাবে না। একক core-এর পথ এখানে বন্ধ।
- দুটি ধীর core. প্রতিটি core f = ০.৮ আর V = ০.৮-এ: প্রতিটির power ০.৮³ = ০.৫১২, দুটি মিলে ১.০২ — শুরুর প্রায় সমান! কাজ পুরো সমান্তরাল হলে গতি ২ × ০.৮ = ১.৬০, ঠিক আগের ধাপের সমান, অথচ বিদ্যুৎ চার ভাগের এক ভাগ। কিন্তু কাজের অর্ধেক যদি ক্রমিক (একটার পর একটা করতেই হয়) হয়, সময় = ০.৫/০.৮ + ০.৫/১.৬ = ০.৯৩৭৫, গতি মাত্র ১.০৭ গুণ।
- চারটি ধীর core. Power ৪ × ০.৫১২ ≈ ২.০৫ — মোটামুটি সীমার সমান। পুরো সমান্তরাল কাজে গতি ৩.২০. অর্ধেক-সমান্তরাল কাজে সময় = ০.৫/০.৮ + ০.৫/৩.২ = ০.৭৮১, গতি ১.২৮. এটিই Amdahl-এর সূত্রের শিক্ষা — যে অংশ সমান্তরাল নয়, সেটিই শেষে সীমা টানে (পর্ব ০৩-এ বিস্তারিত)।
- চার core আর turbo. আধুনিক chip একটি চালাকি করে: যখন শুধু ক্রমিক অংশ চলে, বাকি তিনটি core ঘুমিয়ে পড়ে আর একটি core বাড়তি clock নেয় — ধরুন f = ১.২ (power ১.২³ ≈ ১.৭৩, তবু সীমার মধ্যে)। তখন সময় = ০.৫/১.২ + ০.৫/৩.২ ≈ ০.৫৭৩, গতি ১.৭৫. অর্থাৎ একই বিদ্যুতের বাজেট কখনো একজনকে, কখনো চারজনকে দেওয়া — এটাই “turbo boost” ধরনের কৌশলের মূল ভাবনা।
এই মোড়ের দাম দিতে হলো software-কে: দ্রুততর হতে হলে প্রোগ্রামকে নিজেই thread-এ ভাগ হতে হবে, সাথে আসে race condition, lock আর cache coherence-এর ঝামেলা (পর্ব ৫৩; OS কোর্সের multiprocessor scheduling পর্বেও)।
নিচের টেবিল-প্রিন্টার কয়েকটি প্রতিনিধিত্বমূলক বিন্দু দিয়ে clock আর core-এর গল্পটা সংখ্যায় দেখায়। মানগুলো আনুমানিক, প্রতিটি সারি ওই সময়ের একটি সাধারণ desktop শ্রেণির chip বোঝায় — কোনো নির্দিষ্ট মডেলের সঠিক স্পেক নয়:
// Clock frequency vs cores: representative, approximate data points
const rows = [
// [year, representative chip/class, clock in MHz, cores]
[1971, "Intel 4004", 0.74, 1],
[1978, "Intel 8086", 5, 1],
[1993, "Intel Pentium", 60, 1],
[2000, "Pentium 4 (launch)", 1500, 1],
[2004, "Pentium 4 (fastest)", 3800, 1],
[2006, "Core 2 Duo class", 2900, 2],
[2017, "desktop, ~8 cores", 4000, 8],
[2022, "desktop, ~16 cores", 5700, 16],
];
const fmtClk = m => m >= 1000 ? (m / 1000).toFixed(1) + " GHz" : m + " MHz";
console.log("year chip / class clock cores cores x GHz");
for (const [y, name, mhz, c] of rows)
console.log(String(y).padEnd(6) + name.padEnd(24) + fmtClk(mhz).padEnd(11) +
String(c).padEnd(7) + (mhz * c / 1000).toFixed(3));
const at = y => rows.find(r => r[0] === y);
const grow = (a, b, i) => at(b)[i] / at(a)[i];
const perYear = (a, b) =>
((Math.pow(grow(a, b, 2), 1 / (b - a)) - 1) * 100).toFixed(1) + "% per year";
console.log("\nclock 1971->2004: x" + Math.round(grow(1971, 2004, 2)) +
", about " + perYear(1971, 2004));
console.log("clock 2004->2022: x" + grow(2004, 2022, 2).toFixed(2) +
", about " + perYear(2004, 2022));
console.log("cores 2004->2022: x" + grow(2004, 2022, 3));আউটপুট (নির্ধারিত):
year chip / class clock cores cores x GHz
1971 Intel 4004 0.74 MHz 1 0.001
1978 Intel 8086 5 MHz 1 0.005
1993 Intel Pentium 60 MHz 1 0.060
2000 Pentium 4 (launch) 1.5 GHz 1 1.500
2004 Pentium 4 (fastest) 3.8 GHz 1 3.800
2006 Core 2 Duo class 2.9 GHz 2 5.800
2017 desktop, ~8 cores 4.0 GHz 8 32.000
2022 desktop, ~16 cores 5.7 GHz 16 91.200
clock 1971->2004: x5135, about 29.6% per year
clock 2004->2022: x1.50, about 2.3% per year
cores 2004->2022: x16
১৯৭১ থেকে ২০০৪ — ৩৩ বছরে clock প্রায় ৫,১৩৫ গুণ, বছরে গড়ে প্রায় ৩০%. ২০০৪ থেকে ২০২২ — ১৮ বছরে মাত্র ১.৫ গুণ, বছরে প্রায় ২.৩%. ঠিক সেই সময়ে core ১৬ গুণ। ২০০৬ সালের সারিটি খেয়াল করুন: প্রথম দিকের dual-core chip-এর clock আগের দ্রুততম single-core-এর চেয়ে কম (২.৯ বনাম ৩.৮ GHz) — stepper-এর ধাপ ৪-এর মতো, ধীর কিন্তু একাধিক। শেষ কলামের “cores × GHz” শুধু একটি মোটা দাগের সূচক, আসল গতি নয় — প্রতি clock-এ কতগুলো instruction চলে (IPC), মেমরি কত দ্রুত, আর software কতটা সমান্তরাল, সেগুলো এতে ধরা নেই (পর্ব ০৩-এ CPU time-এর পুরো সমীকরণ)।
এবার যে যন্ত্রে এই কোর্সের কোড চলে, সেটির core আর clock নিজেই দেখে নিন। Script-টি শুধু core আর clock-এর সংখ্যা আর দুটি মৌলিক ISA-flag দেখায়; CPU-র মডেলের নাম ইচ্ছা করে বাদ দেয়:
echo "== cores the OS lets this program use =="
command -v nproc >/dev/null && echo "nproc: $(nproc)" || echo "nproc নেই"
echo "logical CPUs listed in /proc/cpuinfo: $(grep -c '^processor' /proc/cpuinfo)"
echo "== topology (lscpu, model/vendor lines filtered out) =="
if command -v lscpu >/dev/null; then
lscpu | grep -E '^(Architecture|CPU\(s\)|Thread\(s\) per core|Core\(s\) per socket|Socket\(s\)|CPU max MHz|CPU min MHz):' \
|| echo "lscpu: no matching fields"
else
echo "lscpu not installed"
fi
echo "== frequency =="
f=/sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq
if [ -r "$f" ]; then
echo "cpufreq max: $(( $(cat "$f") / 1000 )) MHz"
else
echo "cpufreq not exposed here (common inside VMs/containers)"
fi
mhz=$(grep -m1 '^cpu MHz' /proc/cpuinfo | awk -F: '{printf "%.0f", $2}')
echo "cpu MHz reported by /proc/cpuinfo (cpu0): ${mhz:-unknown}"
echo "== two flags every x86-64 CPU must have =="
flags=$(grep -m1 '^flags' /proc/cpuinfo)
for x in lm sse2; do
case " $flags " in *" $x "*) echo "$x: yes";; *) echo "$x: no";; esac
doneআউটপুট (এক রানের — যন্ত্র বদলালে মান বদলায়):
== cores the OS lets this program use ==
nproc: 2
logical CPUs listed in /proc/cpuinfo: 2
== topology (lscpu, model/vendor lines filtered out) ==
Architecture: x86_64
CPU(s): 2
Thread(s) per core: 2
Core(s) per socket: 1
Socket(s): 1
== frequency ==
cpufreq not exposed here (common inside VMs/containers)
cpu MHz reported by /proc/cpuinfo (cpu0): 1996
== two flags every x86-64 CPU must have ==
lm: yes
sse2: yes
এই রানে কোড চলেছে একটি shared virtual machine-এ — একটি x86-64 CPU-র ছোট একটি ভাগে। OS দেখছে ২টি logical CPU, কিন্তু lscpu বলছে আসলে ১টি core, প্রতি core-এ ২টি thread — অর্থাৎ একটি physical core দুটি hardware thread চালাচ্ছে (SMT বা Hyper-Threading, পর্ব ৪৩)। সম্ভবত একটি বড় server chip-এর বহু core-এর মাত্র একটি টুকরো এই machine পেয়েছে। /proc/cpuinfo-র clock এই রানে প্রায় ২ GHz (মানটি রান আর machine ভেদে বদলাতে পারে) — ২০০৪ সালের Pentium 4-এর ৩.৮ GHz-এর চেয়েও কম! Server chip সাধারণত অনেক core-কে মাঝারি clock-এ চালায়, ঠিক multicore stepper-এর যুক্তিতে। cpufreq ফাইলটি এখানে নেই — virtual machine বা container-এ এটি প্রায়ই লুকানো থাকে, তাই সর্বোচ্চ (boost) clock জানা গেল না। শেষে দুটি flag: lm (৬৪-বিটের long mode) আর sse2 — প্রতিটি x86-64 CPU-তে এ দুটি থাকতেই হয়। AVX, AVX2, AVX-512-এর মতো ঐচ্ছিক extension chip ভেদে আলাদা (পর্ব ৪২)। নিজের Linux ল্যাপটপে চালালে আলাদা সংখ্যা পাবেন; সেখানে পুরো flag-তালিকা দেখতে grep -m1 '^flags' /proc/cpuinfo চালাতে পারেন।
৯ · আজকের প্রবণতা — dark silicon, accelerator, chiplet আর memory wall
Dark silicon আর বিশেষায়িত hardware
Dennard stepper-এর শেষ ধাপ মনে করুন: clock থামিয়েও power density ১.৪০. অর্থাৎ chip-এ যত transistor আছে, সবগুলো একসাথে পূর্ণ গতিতে চালালে chip অতিরিক্ত গরম হবে। কিছু অংশ যেকোনো মুহূর্তে বন্ধ বা ধীর রাখতে হবে — একে বলে dark silicon. শব্দটি ২০১০-এর দশকের শুরুতে গবেষণা-প্রবন্ধে জনপ্রিয় হয়।
যে transistor সবসময় জ্বালানো যাবে না, সেগুলো দিয়ে কী করা যায়? উত্তর: বিশেষ কাজের জন্য বিশেষ circuit, যা দরকারের সময়ই শুধু জ্বলে। সাধারণ CPU core প্রতিটি instruction আনা-বোঝায় যত শক্তি খরচ করে, আসল যোগ-গুণে তার সামান্য অংশ। একটি বিশেষায়িত accelerator এই খরচ বাদ দিয়ে একই কাজ অনেক কম শক্তিতে করে:
- GPU: প্রথমে ছবি আঁকার জন্য, পরে (২০০৭ সালের দিকে NVIDIA-র CUDA আসার পর) সাধারণ সমান্তরাল হিসাবের জন্য — হাজার হাজার সরল core, একই কাজ অনেক ডেটায় (পর্ব ৫৫)।
- TPU আর NPU: Google-এর TPU (Tensor Processing Unit; ২০১৫ সাল থেকে নিজেদের data center-এ ব্যবহার, ২০১৬ সালে প্রকাশ্যে ঘোষণা) আর ফোনের NPU (Neural Processing Unit) — মূলত matrix গুণের জন্য বিশাল সমান্তরাল গুণ-যোগের grid.
- ছোট ছোট বিশেষ block: video encode/decode, এনক্রিপশন, ছবি প্রক্রিয়াকরণ — আজকের ফোনের chip (SoC — পুরো system এক chip-এ) আসলে এমন অনেক বিশেষ block আর কয়েকটি CPU core-এর একটি শহর (পর্ব ৫৬)।
Chiplet আর process node-এর নাম
একটি বিশাল chip বানালে একটি ছোট ত্রুটিতেই পুরোটা নষ্ট হতে পারে — chip যত বড়, ত্রুটিহীন chip পাওয়ার হার (yield) তত কম। তাই ২০১০-এর দশকের শেষ দিক থেকে কিছু কোম্পানি, যেমন AMD, একটি বড় chip-এর বদলে কয়েকটি ছোট chiplet বানিয়ে একই package-এ (chip-এর বাইরের খোলস) জুড়ে দেওয়ার পথ জনপ্রিয় করে। ছোট টুকরো সস্তা, আর আলাদা টুকরো আলাদা প্রযুক্তিতেও বানানো যায়। Chiplet জোড়ার সাধারণ মান (যেমন UCIe) তৈরির চেষ্টা চলছে — ক্ষেত্রটি এখনো বিকাশমান।
আর একটি সাধারণ বিভ্রান্তি: “৭ nm”, “৫ nm”, “৩ nm” chip. বহু দশক ধরে process node-এর নামটি মোটামুটি transistor-এর কোনো আসল মাপের (যেমন gate-এর দৈর্ঘ্য) সাথে মিলত। নব্বইয়ের দশকের শেষ দিক থেকে এই মিল ক্রমে ভেঙে যায়; আজকের “৩ nm” chip-এ ৩ ন্যানোমিটার মাপের কোনো প্রধান অংশ খুঁজে পাবেন না। নামটি এখন একটি প্রজন্মের লেবেল — “আগের প্রজন্মের চেয়ে ঘনত্ব আর দক্ষতা ভালো” — আর আলাদা কোম্পানির একই নামের node সমান নাও হতে পারে। ২০২১ সালে Intel নিজেদের node-এর নাম বদলে (যেমন “Intel 7”) এই তুলনা সহজ করার চেষ্টা করে। তুলনা করতে চাইলে নামের বদলে প্রতি বর্গমিলিমিটারে transistor-এর ঘনত্ব আর power-performance-এর তথ্য দেখুন।
Memory wall
রেস্তোরাঁর গল্পের ফ্রিজের লাইন মনে আছে? CPU-র গতি যখন বছরে কয়েক দশ শতাংশ হারে বাড়ছিল, DRAM মেমরির latency — একটি ডেটা চেয়ে পেতে কত সময় লাগে — বেড়েছে খুব ধীরে। ফলে ফারাক বছরে বছরে বেড়েছে। ১৯৯৫ সালে William Wulf আর Sally McKee একটি প্রবন্ধে একে নাম দেন memory wall. আজকের একটি CPU একটি DRAM access-এর অপেক্ষায় কয়েকশো clock cycle বসে থাকতে পারে। এজন্যই chip-এর বড় অংশ জুড়ে থাকে cache — কাছের ডেস্কের খাতা, যাতে বারবার আলমারিতে যেতে না হয়। পুরো গল্প মডিউল ৮-এ (পর্ব ৪৪ থেকে)।
আরও গভীরে: Hennessy আর Patterson তাঁদের ২০১৮ সালের Turing ভাষণে এই সময়কে বলেন “কম্পিউটার আর্কিটেকচারের নতুন স্বর্ণযুগ” — কারণ সাধারণ CPU-র উন্নতি ধীর হওয়ায় domain-specific architecture, open ISA আর hardware-software একসাথে নকশার (co-design) গুরুত্ব বেড়েছে। শিল্পে transistor-এর গঠনও বদলাচ্ছে: সমতল transistor থেকে FinFET (current চলার পথ পাখনার মতো খাড়া; ২০১০-এর দশকের শুরু থেকে), আর এখন gate-all-around (GAA — সেই পথের চারদিক gate দিয়ে ঘেরা) নকশা; সাথে বাড়ছে 3D stacking — যেমন chip-এর ওপরে মেমরির স্তর বসানো বা High Bandwidth Memory (HBM) — যা memory wall খানিকটা নিচু করে। গবেষণায় আলোচিত হচ্ছে মেমরির ভেতরেই হিসাব (processing-in-memory) আর আলোর সংকেতে chip-এর ভেতরের যোগাযোগ।
বাংলাদেশের প্রেক্ষাপট
বাংলাদেশে chip তৈরির বাণিজ্যিক কারখানা (fab) আছে বলে জানা যায় না, আর অদূর ভবিষ্যতে হওয়াও সহজ নয় — একটি আধুনিক fab-এর খরচ বহু বিলিয়ন ডলার। কিন্তু chip-এর কাজ মানেই কারখানা নয়। নকশা (RTL design), যাচাই (verification), physical design (chip-এর ওপর circuit-এর আসল বিন্যাস) আর পরীক্ষা — এই কাজগুলো কম্পিউটারেই হয়, আর বিশ্বজুড়ে এগুলোর জন্য দক্ষ প্রকৌশলীর বড় চাহিদা আছে। দেশের বিভিন্ন বিশ্ববিদ্যালয়ে VLSI (বিপুল transistor-এর chip নকশা) আর digital design-এর কোর্স ও গবেষণা হয়, আর semiconductor নকশা ও শিক্ষা নিয়ে সরকারি-বেসরকারি আগ্রহ গত কয়েক বছরে বেড়েছে বলে খবর পাওয়া যায়। RISC-V আর ওপেন-সোর্স নকশা-টুল এই শেখাকে সস্তা করেছে — ল্যাপটপেই একটি RISC-V core-এর নকশা লিখে simulate করা যায়; পর্ব ৫৭-এর ক্যাপস্টোনে আপনি নিজেই একটি RISC-V CPU simulator বানাবেন। নির্দিষ্ট প্রতিষ্ঠান বা সংখ্যার জন্য সাম্প্রতিক নির্ভরযোগ্য সূত্র দেখুন।
১০ · AI-এর যুগে — ইতিহাস আর chip-এর দাবি যাচাই
ইতিহাস আর chip-এর স্পেক — এই দুই বিষয়ে AI খুব আত্মবিশ্বাসী আর খুব সাবলীল, অথচ এখানেই সে সবচেয়ে বেশি বানিয়ে বলে। বছর, transistor-এর সংখ্যা, কে প্রথম — এসব দেখতে “তথ্য”, কিন্তু AI প্রায়ই কাছাকাছি দুটি ঘটনা মিশিয়ে ফেলে। এই বিষয়ে সাধারণ ভুলগুলো:
| AI-এর ভুল | উদাহরণ | কীভাবে যাচাই করবেন |
|---|---|---|
| Moore-এর সূত্র ভুলভাবে বলা | “CPU-র গতি প্রতি ১৮ মাসে দ্বিগুণ হয়” বা “এটি একটি প্রাকৃতিক নিয়ম” | Moore-এর ১৯৬৫ সালের মূল প্রবন্ধ আর ১৯৭৫ সালের সংশোধন পড়ুন — কথা transistor-এর সংখ্যা নিয়ে |
| “প্রথম” নিয়ে একতরফা দাবি | “ENIAC প্রথম stored-program কম্পিউটার”, “von Neumann একাই stored-program আবিষ্কার করেন” | সংজ্ঞা আলাদা করুন (electronic? programmable? stored-program?); Computer History Museum-এর মতো জাদুঘরের সূত্র দেখুন |
| বানানো স্পেক | Transistor সংখ্যা, clock বা cache-এর মাপ নির্ভুল দেখায় কিন্তু ভুল | নির্মাতার datasheet বা ঘোষণা; অন্তত দুটি স্বাধীন সূত্র |
| Node নামকে আসল মাপ ধরা | “৩ nm chip-এর transistor ৩ nm লম্বা” | ঘনত্ব (transistor/mm²) আর নির্মাতার প্রকাশিত তথ্য দেখুন |
| সূত্রে ভুল অনুপাত | “voltage অর্ধেক হলে power অর্ধেক হয়” | P ≈ α·C·V²·f নিজে বসিয়ে হিসাব করুন — V অর্ধেক হলে dynamic power এক-চতুর্থাংশ |
| Dennard আর Moore গুলিয়ে ফেলা | “Moore-এর সূত্র ২০০৫ সালে শেষ হয়েছে” | ২০০৫ সালের দিকে ভেঙেছে Dennard scaling (voltage আর power density); transistor সংখ্যা এরপরও বেড়েছে |
ইতিহাস বা স্পেক জানতে AI ব্যবহার করুন — কিন্তু তাকে নিজের অনিশ্চয়তা বলতে বাধ্য করুন, আর সংখ্যার হিসাব নিজে করুন:
AI-এর দেওয়া ইতিহাস বা স্পেক গ্রহণের আগে — চেকলিস্ট
পরীক্ষা ও ইন্টারভিউতে এই বিষয়ে প্রায়ই যা জিজ্ঞেস করা হয়:
- Stored-program ধারণা কী? — Instruction আর ডেটা দুটোই সংখ্যা হিসেবে একই মেমরিতে থাকে; CPU মেমরি থেকে instruction এনে চালায়, তাই প্রোগ্রাম বদলাতে hardware বদলাতে হয় না।
- Architecture আর organization/microarchitecture-এর পার্থক্য? — Architecture (ISA) প্রোগ্রামার যা দেখেন; microarchitecture হলো সেটি hardware-এ কীভাবে বানানো। উদাহরণ: IBM System/360-এর একই ISA-র নানা মডেল।
- Dynamic power-এর সূত্র, আর voltage কমানো কেন সবচেয়ে কার্যকর? — P ≈ α·C·V²·f; V বর্গে আছে, তাই f একই রেখে V ১০% কমালে power প্রায় ১৯% কমে (০.৯² = ০.৮১)।
- Dennard scaling কী, আর কেন থামল? — মাপ আর voltage একসাথে কমালে power density স্থির থাকে; leakage-এর জন্য voltage আর কমানো গেল না, তাই ২০০৫ সালের আশেপাশে power wall.
ভাবনার প্রশ্ন
প্রতিটি প্রশ্ন নিয়ে নিজে কিছুক্ষণ ভাবুন — তারপর “→ উত্তর” চাপুন। ইতিহাসের প্রতিটি সিদ্ধান্তের পেছনে একটি trade-off আছে; সেটিই খুঁজুন।
প্র ০১Stored-program ধারণার কৃতিত্ব কার — von Neumann, Eckert–Mauchly, নাকি Turing? আর নামটা কেন গুরুত্বপূর্ণ?
সৎ উত্তর হলো: একক কোনো ব্যক্তির নয়। ১৯৩৬ সালে Alan Turing তাঁর “universal machine”-এর তত্ত্বে দেখান, একটি যন্ত্র অন্য যন্ত্রের বর্ণনা টেপে পড়ে তাকে অনুকরণ করতে পারে — অর্থাৎ প্রোগ্রামও এক ধরনের ডেটা। এটি ছিল গাণিতিক ধারণা, বাস্তব যন্ত্রের নকশা নয়।
ENIAC-এর কাজ চলার সময় Eckert আর Mauchly বুঝেছিলেন তার জোড়ার সমস্যা, আর দ্রুত মেমরি (mercury delay line) নিয়ে ভাবছিলেন। ১৯৪৫ সালে von Neumann দলের আলোচনার ভিত্তিতে EDVAC-এর খসড়া লেখেন, যা শুধু তাঁর নামে বিলি হয়। এতে মেমরি, হিসাবের অংশ, নিয়ন্ত্রণ আর ইনপুট-আউটপুটের যে যৌক্তিক কাঠামো দেওয়া হয়, তা অসাধারণ স্পষ্ট — বহু দল এটি পড়েই যন্ত্র বানায়। Eckert আর Mauchly মনে করতেন তাঁদের অবদান মুছে গেছে; খসড়াটি প্রকাশিত হয়ে যাওয়ায় তাঁদের patent দাবিও দুর্বল হয়ে পড়ে বলে উল্লেখ করা হয়।
তারপর আছে বাস্তবায়নের কৃতিত্ব: Manchester-এর Frederic Williams, Tom Kilburn আর Geoff Tootill (Baby, ১৯৪৮), Cambridge-এর Maurice Wilkes (EDSAC, ১৯৪৯)। ধারণা কাগজে থাকা আর যন্ত্রে চলা — দুটো আলাদা অর্জন।
নামটা কেন গুরুত্বপূর্ণ? কারণ “von Neumann architecture” নামটি পাঠ্যবইয়ে একটি গল্প বলে — একজন প্রতিভা, একটি আবিষ্কার। বাস্তবে প্রায় সব বড় প্রকৌশল-অগ্রগতি দলের কাজ, আর অনেক অবদান (যেমন ENIAC-এর নারী প্রোগ্রামারদের) দীর্ঘদিন আড়ালে থাকে। আজ অনেক লেখক “stored-program computer” বলাই বেশি নিরপেক্ষ মনে করেন। আরেকটি শিক্ষা: যুদ্ধকালীন গোপনীয়তার জন্য ব্রিটেনের Colossus-এর কথা বহু দশক প্রকাশ্যে আসেনি, তাই পুরোনো বইয়ের “প্রথম”-এর তালিকা প্রায়ই অসম্পূর্ণ।
মূল উপলব্ধি: ইতিহাসে “কে প্রথম” প্রশ্নের উত্তর প্রায়ই নির্ভর করে সংজ্ঞা আর কোন নথি টিকে আছে তার ওপর। প্রকৌশলীর কাজ হলো ধারণাটির যুক্তি বোঝা — প্রোগ্রামকে ডেটা বানালে নমনীয়তা আসে, আর দাম হয় একটি ভাগাভাগি করা পথ।
প্র ০২IBM System/360-কে কেন “বিশাল বাজি” বলা হয়, আর ISA compatibility কীভাবে আজও x86-কে টিকিয়ে রেখেছে?
ষাটের দশকের শুরুতে IBM-এর নিজেরই কয়েকটি আলাদা, পরস্পরের সাথে বেমানান কম্পিউটার লাইন ছিল। প্রতিটির জন্য আলাদা software, আলাদা যন্ত্রাংশ, আলাদা প্রশিক্ষণ। System/360 মানে ছিল সেই সব লাইন বাদ দিয়ে একটি নতুন পরিবারে সবকিছু বাজি ধরা। প্রকল্পের খরচ ছিল তখনকার হিসাবে বিশাল — বিভিন্ন সূত্রে কয়েক বিলিয়ন ডলারের কথা বলা হয় — আর software (OS/360) দেরিতে আর বহু সমস্যা নিয়ে আসে। এই অভিজ্ঞতা থেকেই Fred Brooks তাঁর বিখ্যাত বই The Mythical Man-Month লেখেন: দেরি হওয়া software প্রকল্পে মানুষ বাড়ালে আরও দেরি হয়।
কিন্তু বাজিটি সফল হয়। গ্রাহক ছোট মডেল কিনে পরে বড় মডেলে যেতে পারতেন, software না বদলেই। এর মূল চাবি ছিল ISA আর implementation-এর বিভাজন, আর ছোট মডেলে microcode দিয়ে বড় ISA চালানো। আজকের IBM-এর mainframe (z-সিরিজ) এখনো ১৯৬৪ সালের এই ISA-র বংশধর — অনেক পুরোনো ব্যাংকিং ও বিমা software এখনো চলছে।
x86-এর গল্প একই সূত্রের। 8086-এর নকশায় অনেক অদ্ভুত দিক ছিল — segment দিয়ে মেমরির ঠিকানা, অল্প কয়েকটি register, নানা দৈর্ঘ্যের instruction. কিন্তু IBM PC-র পর এতে লেখা software-এর পরিমাণ এত বেড়ে গেল যে প্রতিটি নতুন chip পুরোনো সবকিছু চালাতে বাধ্য হলো। Intel নিজেই ২০০১ সালে Itanium নামে একটি নতুন, বেমানান ৬৪ বিটের ISA আনে; বাজার শেষ পর্যন্ত বেছে নেয় AMD-র x86-64 (২০০৩), যা পুরোনো x86-এর সম্প্রসারণ। এখন compatibility-র খরচ chip-এর ভেতরে লুকানো: জটিল decoder, যা x86 instruction-কে micro-op-এ ভাঙে।
মূল উপলব্ধি: একটি ISA-র মূল্য তার নকশার সৌন্দর্যে যতটা, তার ওপর জমা software-এ তার চেয়ে অনেক বেশি। এজন্যই নতুন ISA (যেমন RISC-V) সাধারণত সেই জায়গায় আগে ঢোকে যেখানে পুরোনো software-এর বোঝা কম — embedded যন্ত্র, নতুন accelerator, গবেষণা।
প্র ০৩RISC যদি এত ভালো, তাহলে desktop-এ x86 (CISC) কেন জিতল, আর ফোনে ARM কেন?
আশির দশকে RISC chip একই প্রযুক্তিতে CISC chip-এর চেয়ে স্পষ্টভাবে দ্রুত ছিল, কারণ সরল instruction-এ pipeline সহজ, আর বাঁচানো transistor দিয়ে cache আর register বাড়ানো যেত। Workstation-এর বাজারে (Sun SPARC, MIPS, পরে IBM POWER) RISC প্রায় রাজত্ব করত।
কিন্তু x86-এর ছিল দুটি বিশাল সুবিধা। এক, software-এর পাহাড় — Windows আর হাজারো অ্যাপ (আগের প্রশ্ন দেখুন)। দুই, বিক্রির পরিমাণ — PC কোটি কোটি বিক্রি হতো, তাই Intel-এর কাছে সবচেয়ে উন্নত কারখানা আর সবচেয়ে বড় নকশা-দলের টাকা ছিল। Moore-এর সূত্র যখন প্রতি প্রজন্মে দ্বিগুণ transistor দিচ্ছিল, তখন x86-এর জটিল decoder-এর জন্য বাড়তি কয়েক লাখ transistor মোট chip-এর তুলনায় ক্রমেই নগণ্য হয়ে গেল। ১৯৯৫ সালের Pentium Pro থেকে x86 chip ভেতরে RISC-এর মতো micro-op চালায় — RISC-এর মূল কৌশল ভেতরে নিয়ে, বাইরে পুরোনো চুক্তি রেখে।
ফোনে খেলা অন্য: সেখানে প্রধান সীমা ব্যাটারি আর তাপ, আর শুরুতে পুরোনো desktop software-এর বোঝা ছিল না। ARM-এর ছোট, কম-বিদ্যুতের core আর license ব্যবসা — যেকোনো কোম্পানি নিজের chip-এ ARM core বসাতে পারে — একে ফোনের প্রায় একমাত্র পছন্দ বানায়। ২০২০ সালে Apple-এর M1 দেখায়, একই ARM ISA ভালো microarchitecture আর উন্নত কারখানা পেলে ল্যাপটপেও শক্তিশালী প্রতিযোগী; পুরোনো x86 software চালাতে Apple একটি অনুবাদ-স্তর (Rosetta 2) ব্যবহার করে।
মূল উপলব্ধি: ISA-র “ভালো-মন্দ” একা কিছু ঠিক করে না। Software ecosystem, ব্যবসার মডেল, কারখানার প্রযুক্তি আর বাজারের প্রধান সীমা (গতি, না ব্যাটারি) — সব মিলিয়ে বিজয়ী ঠিক হয়। আজ RISC আর CISC-এর ভেতরের পার্থক্য অনেক কমে এসেছে; পার্থক্যটা বেশি চুক্তিতে আর ব্যবসায়।
প্র ০৪Moore-এর সূত্র কি “মৃত”? কোন অর্থে হ্যাঁ, কোন অর্থে না?
উত্তর নির্ভর করে আপনি সূত্রটির কোন রূপ বোঝাচ্ছেন তার ওপর। অন্তত তিনটি আলাদা দাবি প্রায়ই একসাথে গুলিয়ে ফেলা হয়:
- Transistor সংখ্যা: বড় chip-এ transistor এখনো বাড়ছে — কয়েক হাজার কোটির ঘরে। তবে অনেকে মনে করেন দ্বিগুণ হওয়ার গতি আগের মতো নিয়মিত ২ বছর নেই, আর বড় সংখ্যার একটি অংশ আসছে বড় die, chiplet আর 3D stacking থেকে, শুধু ছোট transistor থেকে নয়।
- প্রতি transistor-এর খরচ: Moore-এর মূল প্রবন্ধ খরচের কথাই বলেছিল। নতুন node-এর কারখানা আর EUV lithography-র (অতিবেগুনি আলো দিয়ে silicon-এ নকশা ছাপার) যন্ত্র এত দামি যে প্রতি transistor-এর খরচ আগের মতো দ্রুত কমছে না বলে শিল্পের অনেকে বলেন। এই অর্থে সূত্রটি অন্তত দুর্বল হয়েছে।
- গতি আর power: এটি কখনো Moore-এর সূত্র ছিল না — এটি Dennard scaling. সেটি ২০০৫ সালের আশেপাশেই ভেঙেছে, আর সেটিই clock থেমে যাওয়ার কারণ।
শিল্পের নেতারাও একমত নন — কেউ বলেন সূত্রটি শেষ, কেউ বলেন নতুন রূপে চলছে। এখানে একটি গভীর বিষয় আছে: Moore-এর সূত্র অনেকটা স্বপূরণকারী ভবিষ্যদ্বাণী ছিল। শিল্প নিজেই এটিকে লক্ষ্য হিসেবে নিয়েছিল, আর কোম্পানিগুলো একসাথে একটি roadmap বানাত, যাতে যন্ত্র, রাসায়নিক আর নকশা-টুল একই সময়ে প্রস্তুত থাকে। প্রতিটি “দেয়াল” — আলোর তরঙ্গদৈর্ঘ্য, leakage, সমতল transistor-এর সীমা — নতুন উদ্ভাবন (immersion lithography, high-k metal gate, FinFET, EUV) দিয়ে পার হয়েছে, যদিও প্রতিবার খরচ বেড়েছে।
মূল উপলব্ধি: “Moore-এর সূত্র মৃত” শুনলে জিজ্ঞেস করুন — কোনটি? সংখ্যা, খরচ, না গতি? Architecture-এর দিক থেকে আসল খবর হলো: বিনা পয়সায় দ্রুততর একক core-এর যুগ শেষ; transistor এখনো আসছে, কিন্তু সেগুলো ভালোভাবে কাজে লাগানোর দায়িত্ব এখন নকশাকারী আর প্রোগ্রামারের।
প্র ০৫Multicore আর accelerator-এর যুগ একজন সাধারণ প্রোগ্রামারের কাজ কীভাবে বদলে দিয়েছে?
২০০৫ সালের আগে একটি ধীর প্রোগ্রামের সহজ সমাধান ছিল অপেক্ষা — দেড়-দুই বছর পরের CPU-তে সেটি প্রায় দ্বিগুণ দ্রুত চলত, একটি লাইন না বদলেই। Herb Sutter ২০০৫ সালের প্রবন্ধে লেখেন, এই “বিনা পয়সার ভোজ” শেষ। একক thread-এর গতি এখনো বাড়ে — ভালো branch prediction, বড় cache, প্রতি clock-এ বেশি instruction দিয়ে — কিন্তু অনেক ধীরে।
ফলে প্রোগ্রামারের হাতে তিনটি নতুন দায়িত্ব এলো:
- সমান্তরালতা: কাজকে thread বা process-এ ভাগ করা। এখানে Amdahl-এর সূত্র নির্মম — কোডের ১০% ক্রমিক হলে অসীম core দিয়েও গতি ১০ গুণের বেশি হবে না (পর্ব ০৩)। সাথে আসে race condition আর deadlock-এর মতো নতুন ধরনের বাগ।
- মেমরি-সচেতনতা: memory wall-এর কারণে অনেক প্রোগ্রামের আসল সীমা হিসাব নয়, ডেটা আনা। একই algorithm ডেটা সাজানোর ধরন বদলালে কয়েক গুণ দ্রুত হতে পারে (পর্ব ৪৮; C কোর্সের performance আর cache পর্ব)।
- ঠিক hardware বেছে নেওয়া: machine learning-এর গুণ-যোগ GPU বা NPU-তে, video encode বিশেষ block-এ। আজকের AI-এর উত্থান অনেকটাই সম্ভব হয়েছে কারণ GPU-র বিশাল সমান্তরাল hardware neural network-এর হিসাবের সাথে চমৎকার মেলে।
Hennessy আর Patterson এই সময়কে বলেন architecture-এর “নতুন স্বর্ণযুগ”: যেহেতু সাধারণ CPU আর আগের মতো দ্রুত হচ্ছে না, নির্দিষ্ট কাজের জন্য নির্দিষ্ট hardware (domain-specific architecture) আর তার সাথে মানানসই ভাষা ও compiler বানানোর মূল্য বেড়েছে। বাংলাদেশের একজন developer-এর জন্য বাস্তব অর্থ: যে hardware বোঝে — core, cache, SIMD, GPU — সে একই সার্ভারে বেশি কাজ করাতে পারে, cloud-এর বিল কমাতে পারে, ফোনের অ্যাপের ব্যাটারি বাঁচাতে পারে।
মূল উপলব্ধি: power wall-এর পর পারফরম্যান্স আর hardware-এর “উপহার” নয়, hardware আর software-এর যৌথ নকশার ফল। এই কোর্সের বাকি পর্বগুলো ঠিক সেই যৌথ বোঝাপড়ার প্রস্তুতি।
অনুশীলন
খাতা-কলম আর ক্যালকুলেটর নিন। প্রথম দুটি হাতে হিসাব, তৃতীয়টি আউটপুট আন্দাজ, চতুর্থটি ছোট কোড।
-
Moore-এর হিসাব: 8086 (১৯৭৮, প্রায় ২৯,০০০ transistor) থেকে শুরু করে প্রতি ২ বছরে দ্বিগুণ ধরে ২০০০ সালের chip-এ কত transistor হওয়ার কথা? ২০০০ সালের Pentium 4-এ ছিল প্রায় ৪ কোটি ২০ লাখ (42 million) — পূর্বাভাস আসলের কত গুণ?
(২০০০ − ১৯৭৮)/২ = ১১ বার দ্বিগুণ, 211 = ২,০৪৮. পূর্বাভাস = ২৯,০০০ × ২,০৪৮ = ৫,৯৩,৯২,০০০ ≈ ৫.৯ কোটি (59.4 million). আসল প্রায় ৪.২ কোটি, তাই পূর্বাভাস/আসল ≈ ৫৯.৪/৪২ ≈ ১.৪১. অর্থাৎ পূর্বাভাস একটু বেশি, কিন্তু মাত্রা একই — Moore-এর সূত্র দশকের হিসাবে মেলে, প্রতিটি chip-এ নিখুঁত নয়। (বাস্তব সংখ্যা আনুমানিক; Pentium 4-এর আলাদা সংস্করণে সংখ্যা আলাদা।)
-
Power-এর হিসাব: একটি ফোনের chip-এ α = ০.২, C = ৫০ nF, V = ১.২ V, f = ২ GHz. (ক) Dynamic power কত? (খ) ব্যাটারি বাঁচাতে OS chip-কে V = ০.৯ V আর f = ১.৫ GHz-এ নামাল — এখন power কত, আর আগের কত শতাংশ? (গ) একটি কাজে নির্দিষ্ট সংখ্যক cycle লাগে; দ্বিতীয় অবস্থায় সেই কাজে মোট শক্তি (energy) আগের কত শতাংশ, আর সময় কত গুণ?
(ক) P = ০.২ × ৫০×10−9 × ১.২² × ২×109 = ০.২ × ৫০ × ১.৪৪ × ২ = ২৮.৮ W. (এত বেশি power ফোনে টানা চলে না — বাস্তব chip-এর বেশিরভাগ অংশ সবসময় চলে না; সংখ্যাগুলো শুধু অনুশীলনের জন্য।)
(খ) P = ০.২ × ৫০ × ০.৮১ × ১.৫ = ১২.১৫ W, আগের ১২.১৫/২৮.৮ ≈ ৪২% (= (০.৯/১.২)² × (১.৫/২) = ০.৫৬২৫ × ০.৭৫)।
(গ) একটি কাজে N cycle লাগলে সময় = N/f, তাই শক্তি = P × সময় = α·C·V²·N — f কেটে যায়! শক্তি শুধু V²-এর ওপর নির্ভর করে: (০.৯/১.২)² = ৫৬.২৫%. সময় ২/১.৫ ≈ ১.৩৩ গুণ. শিক্ষা: শুধু f কমালে প্রতি কাজের dynamic শক্তি বাঁচে না (কাজ ধীরে হয়, কিন্তু মোট শক্তি একই); শক্তি বাঁচে voltage কমালে। এজন্যই ফোন আর ল্যাপটপ f আর V একসাথে নামায় — একে বলে DVFS (dynamic voltage and frequency scaling).
-
আউটপুট আন্দাজ করুন: অংশ ৭-এর
dynamic_power.js-এ লাইনটিconst dennard = g <= 3;বদলেconst dennard = false;করা হলো — অর্থাৎ প্রথম প্রজন্ম থেকেই voltage আটকে আছে। Part B-র শেষ কলামে (power density) ছয়টি প্রজন্মে কী কী সংখ্যা আসবে? চালানোর আগে হিসাব করুন।V আটকে থাকলে প্রতি প্রজন্মে প্রতি transistor-এর power = (1/κ) × 1 × κ = ১ — অপরিবর্তিত, আর ঘনত্ব κ² = ১.৯৬ গুণ। তাই power density প্রতি প্রজন্মে ১.৯৬ গুণ:
1.96, 3.84, 7.53, 14.76, 28.93, 56.69— আউটপুটে দুই দশমিক ঘরে ঠিক এভাবেই আসবে (toFixed(2)). P/transistor কলামে প্রতিবার1.000. তুলনা করুন: Dennard scaling থাকায় বাস্তবে প্রথম তিন প্রজন্মে এই ৭.৫৩ গুণ তাপ আসেনি — তিন দশকের উন্নতি voltage কমানোর ওপর কতটা নির্ভরশীল ছিল, এটি তার মাপ। -
কোড লিখুন:
moore_projector.js-এ একটি ছোট অংশ যোগ করুন, যা হিসাব করে কোন বছরে পূর্বাভাসিত transistor সংখ্যা প্রথম ১০০ কোটি (109) ছাড়ায়। সূত্রটি উল্টে লিখুন, লুপ দিয়ে নয়।N0 × 2(y − Y0)/T = N ⇒ y = Y0 + T × log2(N/N0). কোডে:
const yearFor = N => Y0 + period * Math.log2(N / N0); console.log("1 billion reached in: " + yearFor(1e9).toFixed(1));log2(109/২,৩০০) = log2(৪,৩৪,৭৮৩) ≈ ১৮.৭৩, তাই y ≈ ১৯৭১ + ২ × ১৮.৭৩ ≈ ২০০৮.৫. বাস্তবে প্রথম ১০০ কোটির বেশি transistor-এর chip এসেছিল ২০০৬ সালের দিকে, কিছু বড় server processor-এ — অর্থাৎ আবারও মাত্রায় মেলে, দু-এক বছরের এদিক-ওদিক।
নিজেকে যাচাই করুন
ভুল হলে কারণসহ ব্যাখ্যা পাবেন, আবার চেষ্টাও করতে পারবেন।
ক্রমঘটনাগুলো সময়ের ক্রমে সাজান (▲▼ চেপে সরান)
- ENIAC চালু হলো — তার আর সুইচ দিয়ে প্রোগ্রাম
- Bell Labs-এ প্রথম কার্যকর transistor
- Manchester Baby মেমরিতে রাখা প্রোগ্রাম চালাল
- IBM System/360 ঘোষণা — এক ISA, অনেক মডেল
- Intel 4004 — প্রথম বাণিজ্যিক single-chip microprocessor
- UC Berkeley-তে RISC-V-এর কাজ শুরু
Stored-program কম্পিউটারের মূল নতুনত্ব কোনটি?
- যন্ত্রটি relay-র বদলে vacuum tube দিয়ে তৈরি
- Instruction আর ডেটা দুটোই সংখ্যা হিসেবে একই মেমরিতে থাকে
- যন্ত্রটি decimal-এর বদলে binary ব্যবহার করে
- Instruction আর ডেটার জন্য সম্পূর্ণ আলাদা মেমরি থাকে
১৯৭৫ সালের সংশোধিত রূপে Moore-এর সূত্র কী বলে?
- CPU-র clock frequency প্রতি ২ বছরে দ্বিগুণ হয়
- কম্পিউটারের গতি প্রতি ১৮ মাসে দ্বিগুণ হয় — এটি একটি প্রাকৃতিক নিয়ম
- একটি chip-এ transistor-এর সংখ্যা মোটামুটি প্রতি ২ বছরে দ্বিগুণ হয়
- প্রতি প্রজন্মে chip-এর power density স্থির থাকে
Dennard scaling-এ transistor-এর সব মাপ আর supply voltage κ গুণ ছোট হয়, clock κ গুণ বাড়ে। কোনটি অপরিবর্তিত থাকে?
- প্রতি একক ক্ষেত্রফলে power (power density)
- প্রতিটি transistor-এর power
- একই ক্ষেত্রফলে transistor-এর সংখ্যা
- প্রতিটি gate-এর delay
একটি chip-এর dynamic power P ≈ α·C·V²·f. f আর বাকি সব একই রেখে V = 1.2 V থেকে 0.9 V করা হলো। নতুন power আগের প্রায় কত শতাংশ?
- ৭৫%
- প্রায় ৫৬%
- প্রায় ৪২%
- ১০০% — voltage power-এ প্রভাব ফেলে না
২০০৫ সালের আশেপাশে সাধারণ CPU-র clock frequency বাড়া প্রায় থেমে যাওয়ার প্রধান কারণ কোনটি?
- Transistor আর ছোট করা যাচ্ছিল না, তাই সংখ্যা বাড়া থেমে যায়
- ব্যবহারকারীদের আর বেশি গতির দরকার ছিল না
- RISC chip-এর কাছে x86 হেরে যায়
- Voltage আর কমানো যাচ্ছিল না (Dennard scaling ভেঙে পড়ে), তাই বেশি clock মানে অসহনীয় তাপ
IBM System/360 (১৯৬৪) architecture-এর ইতিহাসে কেন গুরুত্বপূর্ণ?
- এটি ছিল প্রথম transistor-চালিত কম্পিউটার
- এটি ছিল প্রথম single-chip microprocessor
- এক ISA-র অধীনে নানা দাম ও গতির মডেল — software বদল ছাড়াই চলে
- এটি ছিল প্রথম RISC নকশা
শব্দকোষ
লেখার মধ্যে ডটেড দাগ দেওয়া শব্দে মাউস রাখুন বা চাপুন — অর্থ দেখাবে। এই পর্বের সব নতুন শব্দ এখানে একসাথে:
মনে রাখুন
- Stored-program (১৯৪৫-এর খসড়া, ১৯৪৮–৪৯-এ Baby ও EDSAC): instruction আর ডেটা একই মেমরিতে — নমনীয়তা আসে, দাম হয় von Neumann bottleneck.
- System/360 থেকে ISA আর implementation আলাদা; একবার software জমলে ISA দশকের পর দশক টেকে — x86 তার প্রমাণ।
- RISC: সরল, নির্দিষ্ট দৈর্ঘ্যের instruction, load/store — pipeline সহজ; ARM থেকে open ISA RISC-V.
- Moore = transistor-এর সংখ্যা প্রায় প্রতি ২ বছরে দ্বিগুণ; Dennard = power density স্থির। P ≈ α·C·V²·f — voltage আটকে যাওয়ায় power wall আর multicore.
- আজ: dark silicon, accelerator, chiplet, প্রজন্মের লেবেল হিসেবে “nm”, আর memory wall — আর সব দাবি নিজে হিসাব করে যাচাই।
আরও পড়ুন · ABCL TECH-এ আপনার পরবর্তী পদক্ষেপ
- পর্ব ০৩ · পারফরম্যান্স মাপা — CPU time, CPI, MIPS, Amdahl-এর সূত্র আর benchmarkপরবর্তী পর্বগতি মাপার সঠিক উপায় আর সমান্তরালতার সীমা।
- পর্ব ০১ · কম্পিউটার আর্কিটেকচার কীআগের পর্বTransistor থেকে অ্যাপ পর্যন্ত স্তর, ISA আর microarchitecture.
- কম্পিউটার আর্কিটেকচার ও ডিজিটাল লজিক · কোর্স হোম৬২টি পর্বপুরো কোর্সের রোডম্যাপ — লজিক গেট থেকে multicore.
- কম্পিউটারের ইতিহাস, প্রজন্ম আর প্রকারভেদComputer Fundamentalsসাধারণ ইতিহাস, পাঁচ প্রজন্ম আর কম্পিউটারের প্রকার।
- অপারেটিং সিস্টেমের ইতিহাসপাশের ট্র্যাকHardware বদলের সাথে OS কীভাবে বদলেছে।