সরাসরি পর্বে যান
পর্ব ৬০ · ৬২-এর মধ্যে · মডিউল ১০

লিখিত ও মৌখিক (ভাইভা) প্রশ্ন — লজিক, ISA, pipeline আর মেমরি

Computer Architecture & Digital Logic — Written and Viva Questions: Mark-Oriented Model Answers, Diagrams, Comparison Tables, Derivations and Module-Wise Oral Drills

Taught in Bangla, this page prepares written and viva answers for computer architecture and digital logic: what examiners look for, answer length by marks and diagram rules, 25 module-wise written questions with model answers, eight comparison tables, proofs of pipeline speedup, AMAT and Amdahl's law, oral-answer technique, a sample viva, 48 quick-fire questions, common mark-losing mistakes, and using AI as a strict examiner.

এই পর্বে যা শিখবেন

  • আর্কিটেকচার আর ডিজিটাল লজিকের লিখিত উত্তর নম্বর-ভাগের ক্রমে সাজানো, আর truth table, timing diagram, datapath, pipeline diagram ও cache-এর ছবি ঠিকভাবে আঁকা
  • De Morgan, K-map, carry-lookahead, latch-এর race, metastability, Booth আর IEEE 754-এর ক্লাসিক “উদাহরণসহ ব্যাখ্যা করুন” প্রশ্নের নির্ভুল মডেল উত্তর
  • Datapath, control signal, hazard ও forwarding, branch prediction, cache mapping, virtual memory আর MESI — হাতে করা trace আর যাচাই করা হিসাবসহ
  • আটটি তুলনার টেবিল আর pipeline speedup, AMAT ও Amdahl-এর প্রমাণ নিজে থেকে লিখতে পারা
  • ভাইভায় দুই–চার বাক্যে নির্ভুল উত্তর, follow-up সামলানো, সাধারণ ভুল এড়ানো আর AI-এর দেওয়া উত্তর যাচাই করা

১ · পরীক্ষক কী খোঁজেন — উত্তরের কাঠামো, নম্বর-ভাগ আর ছবি আঁকা

MCQ-তে উত্তর ঠিক অথবা ভুল। লিখিত পরীক্ষা আর ভাইভা আলাদা: দুজন একই pipeline জানেন, অথচ একজন বেশি নম্বর পান — কারণ তিনি pipeline diagram-এ cycle নম্বর লিখেছেন, forwarding-এর তীরটি কোন pipeline register থেকে আসছে তা দেখিয়েছেন, আর শেষে load-use-এর এক cycle stall-এর কথা নিজে থেকে তুলেছেন। পরীক্ষকের হাতে থাকে একটি মার্ক-স্কিম — কোন অংশে কত নম্বর। উত্তর সেই অংশগুলো চোখের সামনে সাজিয়ে দিলে নম্বর হারায় না, ঠিক যেমন রেস্তোরাঁর রান্নাঘরে অর্ডারের স্লিপ ক্রমে সাজানো থাকলে কোনো থালা বাদ পড়ে না।

পূর্ণ নম্বরের কাঠামো
সংজ্ঞা → ব্যাখ্যা → ছবি বা টেবিল → উদাহরণ → উপসংহার
  1. সংজ্ঞা (এক–দুই বাক্য): নির্ভুল, শর্তসহ। “Cache হলো CPU আর main memory-র মাঝের ছোট, দ্রুত SRAM মেমরি, যা সাম্প্রতিক ব্যবহৃত ডেটা আর তার আশেপাশের block রাখে — locality-র ওপর ভর করে গড় access time কমাতে।”
  2. ব্যাখ্যা: কীভাবে কাজ করে, ধাপে ধাপে, নম্বর দিয়ে — কেন এমন নকশা, কোন সমস্যার সমাধান।
  3. ছবি বা টেবিল: truth table, gate diagram, timing diagram, datapath, pipeline diagram, cache-এর সংগঠন বা তুলনার টেবিল। প্রতিটি বাক্স, তার আর অক্ষের নাম লিখুন; বিটের চওড়া (যেমন “৩২”) তারের পাশে বসান।
  4. উদাহরণ: ছোট, নির্দিষ্ট সংখ্যায় — একটি ঠিকানা 0x12345678, তিনটি instruction, ৪ বিটের দুটি সংখ্যা। সংখ্যা থাকলে সূত্র → মান বসানো → একক সহ উত্তর।
  5. উপসংহার: এক–দুই বাক্যে সুবিধা ও সীমা বা বাস্তব প্রয়োগ — “আজকের প্রায় সব CPU-তে L1 আলাদা instruction আর data cache, তাই structural hazard থাকে না।”

নিচের প্রতিটি মডেল উত্তর এই ক্রম মেনেছে। মুখস্থ নয় — কাঠামোটি শিখে নিজের ভাষায় লিখুন; পরীক্ষক হুবহু বাক্য খোঁজেন না, খোঁজেন অংশগুলো।

নম্বর অনুযায়ী উত্তরের দৈর্ঘ্য — একই প্রশ্ন তিন মাপে

প্রশ্নটি ধরুন “Cache memory কী?” — নম্বর বদলালে উত্তরের গভীরতা বদলায়, বিষয় নয়:

নম্বরমাপ“Cache memory”-র উত্তরে যা থাকবে
২ (সংক্ষিপ্ত টীকা)দুই–তিন বাক্য, ৪০–৬০ শব্দসংজ্ঞা + কেন কাজ করে (temporal ও spatial locality) + একটি সংখ্যা (“hit time ১–৪ cycle, DRAM-এ প্রায় ১০০”)।
৫১২০–১৮০ শব্দ, একটি ছবি বা টেবিলসংজ্ঞা, hit/miss, address-এর tag-index-offset ভাগ (ছোট ছবি), তিন রকম mapping-এর এক লাইন করে, AMAT সূত্র।
১০৩০০–৪৫০ শব্দ, দুটি ছবি বা টেবিল আর একটি হিসাবওপরের সব + direct-mapped cache-এর সংগঠনের ছবি (comparator, valid bit, mux), একটি address split-এর হিসাব, write-through বনাম write-back, তিন C, আর উপসংহারে multi-level cache.

কোন ছবি কীভাবে আঁকবেন — খাতায় যা থাকতেই হবে

ছবিকী আঁকবেনযা প্রায়ই বাদ পড়ে
Truth tableইনপুট কলাম binary ক্রমে (000, 001, … 111), সারির পাশে minterm নম্বর, আউটপুট কলাম আলাদা দাগেসারি এলোমেলো; don't care-কে X না লিখে ০ বা ১ বসানো
Gate diagramবাঁ থেকে ডানে ইনপুট → আউটপুট, প্রতিটি gate-এর সঠিক প্রতীক, ইনপুটের নাম, আউটপুটে সমীকরণNAND-এর বুদবুদ (bubble) ভুলে যাওয়া; জোড়া আর পারাপার তারের পার্থক্য (জোড়ায় বিন্দু)
Timing diagramওপরে clock (উঠন্ত ধারে খাড়া দাগ), তার নিচে ইনপুট, তারপর আউটপুট; একই সময়-অক্ষ; tsetup, thold, tpcq-এর জানালা তীর দিয়েআউটপুট ধারের ঠিক সাথে বদলানো (delay ছাড়া); কোন ধারে মান নেওয়া হয় না দেখানো
DatapathPC → instruction memory → register file → ALU → data memory → write-back mux; প্রতিটি mux-এর control signal-এর নাম; তারের পাশে বিটের চওড়াsign-extend বা imm-gen বাক্স; branch target-এর adder; PCSrc mux
Pipeline diagramসারিতে instruction, কলামে cycle ১, ২, ৩…; ঘরে IF/ID/EX/MEM/WB; stall-এ bubble; forwarding-এ এক ঘর থেকে আরেক ঘরে তীরcycle নম্বর না লেখা; forwarding তীর সময়ের পেছনে টানা (অসম্ভব)
Cache-এর সংগঠনওপরে address-এর tag | index | offset বাক্স আর বিট-সংখ্যা; নিচে V, tag, data কলামের টেবিল; index → সারি; tag comparator → AND V → hit; offset → muxvalid bit; set-associative-এ প্রতিটি way-এর আলাদা comparator
State diagramবৃত্তে state; Moore-এ বৃত্তের ভেতরে output, Mealy-তে তীরে input/output; reset তীরপ্রতিটি state থেকে প্রতিটি input-এর তীর আছে কি না যাচাই

সময় ভাগ

নিয়মটি সরল: মোট মিনিট ÷ মোট নম্বর। ১৮০ মিনিটে ৯০ নম্বর হলে প্রতি নম্বরে দুই মিনিট — একটি ১০ নম্বরের প্রশ্নে কুড়ি মিনিট। শুরুতে পাঁচ মিনিট প্রশ্ন বাছাইয়ে, শেষে দশ মিনিট হিসাব মেলাতে রাখুন। Numerical-এ আটকে গেলে পদ্ধতি আর সূত্র লিখে এগিয়ে যান; পদ্ধতির নম্বর থাকে।

নিচের stepper-এ একটি ১০ নম্বরের প্রশ্নের উত্তর ধাপে ধাপে গড়া হয়েছে — প্রতিটি অংশ যোগ হলে নম্বর কীভাবে জমে, আর সময় কতটা যায়:

প্রতিটি অংশ যোগ করার পর
যোগ হলো
খাতায় যা লিখলেন
জমা নম্বর
খরচ হওয়া সময়
  1. পরিকল্পনা। মার্জিনে পাঁচ শব্দের খসড়া — এক মিনিটে কাঠামো ঠিক, কোনো অংশ বাদ পড়বে না।
  2. সংজ্ঞা — ১ নম্বর। “Data hazard হলো এমন অবস্থা, যেখানে একটি instruction-এর operand আগের এমন instruction-এর ফল, যা pipeline-এ এখনো register file-এ লেখা হয়নি — read after write (RAW).”
  3. ব্যাখ্যা — আরও ২ নম্বর। add x1, x2, x3 তারপর sub x4, x1, x5: add cycle ৫-এ WB-তে লেখে, কিন্তু sub cycle ৩-এ ID-তে x1 পড়ে ফেলে — পুরোনো মান। কিছু না করলে দুই cycle stall লাগত।
  4. ছবি — আরও ৩ নম্বর। সারিতে instruction, কলামে cycle; add-এর EX-এর ফল EX/MEM register-এ বসে থাকে — সেখান থেকে sub-এর EX-এর ইনপুটে তীর (cycle ৪)। পরের instruction-এর জন্য MEM/WB থেকে তীর (cycle ৫)। তীর সবসময় সময়ের সামনের দিকে।
  5. উদাহরণ — আরও ৩ নম্বর। Forwarding unit-এর শর্ত: EX/MEM.RegWrite = ১, EX/MEM.rd ≠ ০, EX/MEM.rd = ID/EX.rs1 → ForwardA = 10; double hazard-এ EX/MEM-কে অগ্রাধিকার। তারপর ব্যতিক্রম: lw x1, 0(x2)-এর ঠিক পরে add x3, x1, x4 — মান MEM-এর শেষে আসে, তাই ১টি bubble লাগেই (load-use hazard).
  6. উপসংহার — শেষ ১ নম্বর। Forwarding বেশিরভাগ RAW stall দূর করে; load-use-এর বাকিটা compiler instruction সাজিয়ে লুকায়; CPI আদর্শ ১-এর কাছে থাকে। উনিশ মিনিটে দশ নম্বর।

কোন মডিউলের প্রশ্ন কোথায়

কোর্সের মডিউলপর্বলিখিত প্রশ্নভাইভা প্রশ্ন
১ · আর্কিটেকচারের ভিত্তি০১–০৬অংশ ২ (ক-০১–ক-০৩)ভ-০১–ভ-০৪
২ · Combinational লজিক০৭–১৪অংশ ২ (ক-০৪–ক-০৬)ভ-০৫–ভ-১০
৩ · Sequential লজিক১৫–১৯অংশ ৩ (খ-০১–খ-০৩)ভ-১১–ভ-১৪
৪ · গাণিতিক কাজ২০–২৪অংশ ৩ (খ-০৪–খ-০৫)ভ-১৫–ভ-১৯
৫ · Instruction set আর্কিটেকচার২৫–৩১অংশ ৪ (গ-০১–গ-০২)ভ-২০–ভ-২৩
৬ · প্রসেসর নকশা৩২–৩৮অংশ ৪ (গ-০৩–গ-০৬)ভ-২৪–ভ-৩০
৭ · উন্নত প্রসেসর৩৯–৪৩অংশ ৫ (ঘ-০১)ভ-৩১–ভ-৩৫
৮ · মেমরি হায়ারার্কি৪৪–৫০অংশ ৫ (ঘ-০২–ঘ-০৪)ভ-৩৬–ভ-৪২
৯ · I/O, সমান্তরালতা, আধুনিক সিস্টেম৫১–৫৭অংশ ৬ (ঙ-০১–ঙ-০৪)ভ-৪৩–ভ-৪৮

এই পাতার কোনো প্রশ্ন কোনো নির্দিষ্ট পরীক্ষা বা প্রতিষ্ঠানের ইন্টারভিউ থেকে নেওয়া নয়; এগুলো বিশ্ববিদ্যালয়ের Digital Logic ও Computer Architecture কোর্সে, চাকরির লিখিত পরীক্ষায় আর ইন্টারভিউতে প্রায়ই আসা ধরনের প্রশ্ন। নম্বর আনুমানিক; প্রতিটি numerical-এর প্রথা প্রশ্নেই লেখা। ISA হিসেবে কোর্সের মতোই RISC-V (RV32I) আর Patterson–Hennessy-ধাঁচের পাঁচ ধাপের pipeline ধরা হয়েছে; অন্য বই (যেমন MIPS সংস্করণ) কোথাও আলাদা হলে তা বলা আছে।

২ · অংশ ক — ভিত্তি, সংখ্যা আর combinational লজিক (মডিউল ১–২)

রিভিশন: পর্ব ০১ (স্তর, von Neumann), পর্ব ০৩ (CPU time, CPI, Amdahl), পর্ব ০৪ (রূপান্তর), পর্ব ০৫ (two's complement, overflow), পর্ব ০৭ (De Morgan, SOP–POS), পর্ব ০৮ (CMOS, universal gate), পর্ব ০৯ (K-map), পর্ব ১০ (QM, hazard), পর্ব ১১ (adder) আর পর্ব ১২ (mux, decoder).

ক-০১Stored-program ধারণা কী? von Neumann আর Harvard architecture-এর পার্থক্য ছবিসহ লিখুন। von Neumann bottleneck কীভাবে কমানো হয়? — ৮ নম্বর (সহজ, ছবিসহ)

সংজ্ঞা: Stored-program ধারণায় instruction আর ডেটা দুটোই binary সংখ্যা হিসেবে একই read-write মেমরিতে থাকে; CPU মেমরি থেকে instruction এনে চালায়, তাই প্রোগ্রাম বদলাতে hardware বদলাতে হয় না (ENIAC-এর তার জুড়ে প্রোগ্রামের বিপরীতে)।

  von Neumann                      Harvard
 +-----+   one bus   +--------+    +-----+  I-bus  +--------+
 | CPU |<===========>| Memory |    | CPU |<=======>| I-mem  |
 +-----+  (instr +   | instr  |    |     |  D-bus  +--------+
          data)      | + data |    |     |<=======>| D-mem  |
                     +--------+    +-----+         +--------+

ব্যাখ্যা: von Neumann-এ একটি মেমরি আর একটি পথ — একই cycle-এ instruction আর ডেটা দুটো আনা যায় না। Harvard-এ দুটি আলাদা মেমরি আর পথ, তাই একসাথে আনা যায়। আধুনিক CPU “modified Harvard”: ভেতরে আলাদা L1 I-cache আর D-cache, কিন্তু main memory একটিই — প্রোগ্রামারের চোখে একটি address space.

Bottleneck: CPU অনেক দ্রুত, মেমরির একটি পথ ধীর — CPU অপেক্ষায় বসে থাকে (von Neumann bottleneck). কমানোর উপায়: cache-এর স্তর, আলাদা I/D cache, pipelining আর prefetching, চওড়া bus.

উদাহরণ ও উপসংহার: একটি lw instruction-এ দুবার মেমরি লাগে — একবার instruction আনতে, একবার ডেটা পড়তে; আলাদা I/D পথ থাকায় pipeline-এ দুটি একই cycle-এ ভিন্ন instruction-এর জন্য হতে পারে। ছোট microcontroller প্রায়ই খাঁটি Harvard (flash-এ কোড, SRAM-এ ডেটা)।

নম্বর কোথায়: stored-program-এর সংজ্ঞা (২), দুটি লেবেলসহ ছবি (২), পার্থক্য (২), bottleneck ও প্রতিকার (২)। পর্ব ০১ · পর্ব ০২

ক-০২CPU time-এর লৌহসূত্র লিখে প্রতিটি গুণক কে প্রভাবিত করে বলুন। একটি প্রোগ্রামে ২ × ১০৯টি instruction: ALU ৫০% (CPI ১), load ২০% (CPI ৫), store ১০% (CPI ৩), branch ২০% (CPI ২); clock ২ GHz. গড় CPI, CPU time আর MIPS বের করুন। Load-এর CPI ৩-এ নামালে speedup কত? — ৮ নম্বর (মাঝারি)

সূত্র: CPU time = IC × CPI × Tc = IC × CPI ÷ f — লৌহসূত্র। Algorithm, ভাষা আর compiler প্রভাবিত করে IC আর CPI; ISA তিনটিই; microarchitecture CPI আর Tc; technology শুধু Tc.

শ্রেণিঅনুপাতCPIঅবদান
ALU০.৫১০.৫
load০.২৫১.০
store০.১৩০.৩
branch০.২২০.৪
গড় CPI২.২

হিসাব: CPU time = ২ × ১০৯ × ২.২ ÷ (২ × ১০৯) = ২.২ s. MIPS = f ÷ (CPI × ১০৬) = ২০০০ ÷ ২.২ ≈ ৯০৯ MIPS. Load-এর CPI ৩ হলে অবদান ০.৬, নতুন CPI = ১.৮, সময় ১.৮ s, speedup = ২.২ ÷ ১.৮ ≈ ১.২২ গুণ.

উপসংহার: MIPS দিয়ে দুটি ভিন্ন ISA-র যন্ত্র তুলনা করা চলে না — IC বাদ পড়ে; তুলনা করতে হয় একই প্রোগ্রামের execution time দিয়ে।

নম্বর কোথায়: সূত্র ও গুণকের প্রভাব (২), weighted CPI-এর টেবিল (২), CPU time ও MIPS একক সহ (২), নতুন CPI ও speedup (২)। পর্ব ০৩

ক-০৩Two's complement কী? −৪৫-এর ৮ বিট রূপ বের করুন। ৮ বিটে ১০০ + ৫০ যোগ করে দেখান overflow কীভাবে চেনা যায়; carry আর overflow-এর পার্থক্য লিখুন। — ৬ নম্বর (সহজ)

সংজ্ঞা: n বিটের two's complement-এ MSB-এর ওজন −২n−১, বাকিগুলোর ধনাত্মক; পরিসর −২n−১ থেকে ২n−১ − ১ (৮ বিটে −১২৮ … ১২৭)। ঋণাত্মক করতে সব বিট উল্টে ১ যোগ: −x = ~x + 1, কারণ x + ~x = ২n − ১।

−৪৫: ৪৫ = 0010 1101 → উল্টে 1101 0010 → +1 = 1101 0011 (0xD3). যাচাই: −১২৮ + ৬৪ + ১৬ + ২ + ১ = −৪৫ ✓.

  carries : 0 1 1 0 0 0 0 0      (c_in to MSB = 1, c_out = 0)
    100   :   0 1 1 0 0 1 0 0
  +  50   :   0 0 1 1 0 0 1 0
  = -106  :   1 0 0 1 0 1 1 0    V = c_in(MSB) XOR c_out = 1 XOR 0 = 1

ব্যাখ্যা: দুটি ধনাত্মক সংখ্যার যোগফলের চিহ্ন-বিট ১ — ফল ১৫০ সীমার বাইরে, বিটগুলো −১০৬ পড়ায়। নিয়ম: একই চিহ্নের দুটি operand-এর ফলের চিহ্ন ভিন্ন হলে overflow; hardware-এ V = Cin ⊕ Cout (MSB-এ)। Carry বলে unsigned ফল সীমার বাইরে (এখানে C = ০ — unsigned ১৫০ ঠিকই আছে)।

উপসংহার: একই adder signed আর unsigned দুটোই যোগ করে; শুধু কোন flag দেখবেন তা আলাদা। Two's complement-এ শূন্য একটিই, তাই sign-magnitude-এর চেয়ে ভালো।

নম্বর কোথায়: সংজ্ঞা ও পরিসর (১), −৪৫ ধাপসহ (২), যোগ ও V (২), carry বনাম overflow (১)। পর্ব ০৫ · পর্ব ২০

ক-০৪De Morgan-এর সূত্র লিখে truth table দিয়ে প্রমাণ করুন। একটি circuit আর একটি প্রোগ্রামিং উদাহরণ দিন। শুধু NAND দিয়ে OR কীভাবে বানাবেন? — ৬ নম্বর (সহজ)

সংজ্ঞা: De Morgan: (A + B)′ = A′B′ আর (AB)′ = A′ + B′. ভাষায় — “যোগের উল্টো = উল্টোদের গুণ”, আর উল্টোটাও। (এই পাতায় complement লেখা হয়েছে A′ দিয়ে।)

 A B | A+B (A+B)' | A' B' A'B' | AB (AB)' A'+B'
 0 0 |  0     1   |  1  1   1  |  0   1     1
 0 1 |  1     0   |  1  0   0  |  0   1     1
 1 0 |  1     0   |  0  1   0  |  0   1     1
 1 1 |  1     0   |  0  0   0  |  1   0     0

ব্যাখ্যা: চার সারিতে (A + B)′ আর A′B′ কলাম হুবহু এক, (AB)′ আর A′ + B′-ও — perfect induction, সব ইনপুট পরীক্ষা করে প্রমাণ। n চলকে: (A1 + … + An)′ = A1′ ⋯ An′.

Circuit উদাহরণ: A + B = (A′B′)′ = NAND(A′, B′), আর A′ = NAND(A, A). তাই OR = NAND(NAND(A, A), NAND(B, B)) — তিনটি NAND. এটিই bubble pushing: OR-এর ইনপুটে বুদবুদ ঠেলে দিলে সেটি NAND হয়ে যায়।

প্রোগ্রামিং উদাহরণ: C-তে !(x > 0 && y > 0) আর x <= 0 || y <= 0 একই শর্ত। “দোকান খোলা আর মাল আছে — এমন নয়” মানে “দোকান বন্ধ, অথবা মাল নেই”।

উপসংহার: De Morgan থেকেই SOP → NAND–NAND আর POS → NOR–NOR রূপান্তর; CMOS-এ NAND আর NOR স্বভাবতই inverting বলে এই রূপান্তর chip-এ সবচেয়ে সস্তা।

নম্বর কোথায়: দুটি সূত্র (১), truth table (২), circuit ও প্রোগ্রাম উদাহরণ (২), NAND দিয়ে OR (১)। পর্ব ০৭ · পর্ব ০৮

ক-০৫K-map দিয়ে F(A, B, C, D) = Σm(0, 1, 2, 5, 8, 9, 10) সরল করুন। Prime আর essential prime implicant চিহ্নিত করুন, POS রূপ দিন, আর NAND–NAND circuit আঁকার নিয়ম লিখুন। — ১০ নম্বর (মাঝারি, ছবিসহ)

সংজ্ঞা: K-map হলো truth table-এর এমন সাজানো রূপ, যেখানে সারি আর কলাম Gray ক্রমে (00, 01, 11, 10) — পাশাপাশি দুটি ঘর ঠিক এক চলকে আলাদা, তাই XY + XY′ = X লাগিয়ে দল বানানো যায়। কিনারা পেরিয়েও ঘর পাশাপাশি (torus).

  AB\CD   00   01   11   10
   00   [ 1    1 ]   0  [ 1 ]      P = B'D'  : m0, m2, m8, m10 (four corners)
   01     0  ( 1 )   0    0        Q = B'C'  : m0, m1, m8, m9  (top + bottom rows)
   11     0    0     0    0        R = A'C'D : m1, m5
   10   [ 1    1 ]   0  [ 1 ]

ব্যাখ্যা: চার কোণ একটি ৪-এর দল (B′D′); ওপর আর নিচের সারির প্রথম দুই কলাম কিনারা পেরিয়ে আরেকটি ৪-এর দল (B′C′); m5 একা — তার একমাত্র সঙ্গী m1, তাই A′C′D. সব prime implicant: B′D′, B′C′, A′C′D. প্রতিটিই কোনো একটি 1-কে একাই ঢাকে (m2/m10 শুধু P-তে, m9 শুধু Q-তে, m5 শুধু R-এ), তাই তিনটিই essential.

উত্তর: F = B′C′ + B′D′ + A′C′D (৭টি literal). POS-এর জন্য 0-এর দল: F′ = AB + BD′ + CD, তাই F = (A′ + B′)(B′ + D)(C′ + D′).

NAND–NAND: প্রতিটি গুণফলের জন্য একটি NAND (B′, C′, D′, A′ ইনপুট হিসেবে — দরকারে NOT বা NAND(x, x)), তারপর তিনটির আউটপুট একটি ৩-ইনপুট NAND-এ। De Morgan-এর কারণে দুই স্তরের NAND–NAND = AND–OR.

যাচাই ও উপসংহার: একটি সারি মেলান — m5 = 0101: A′C′D = ১·১·১ = ১ ✓; m6 = 0110: তিনটি পদই ০ ✓. ৪-এর বেশি চলকে K-map চোখে কঠিন — তখন Quine-McCluskey (পর্ব ১০) বা tool.

নম্বর কোথায়: সঠিক map (২), তিনটি দল (৩), PI ও EPI (২), SOP ও POS (২), NAND–NAND (১)। পর্ব ০৯ · পর্ব ১০

ক-০৬Ripple-carry আর carry-lookahead adder-এর পার্থক্য লিখুন। Generate আর propagate-এর সংজ্ঞা দিয়ে c1–c4-এর সমীকরণ বের করুন। প্রতিটি gate-এর delay ১ ধরে n বিট ripple আর ৪ বিট CLA-র delay কত? — ১০ নম্বর (কঠিন)

সংজ্ঞা: Ripple-carry adder-এ n টি full adder শিকলে জোড়া — প্রতিটি ঘর ডান থেকে carry আসার অপেক্ষা করে। Carry-lookahead adder (CLA) সব carry সরাসরি মূল ইনপুট থেকে হিসাব করে।

Generate ও propagate: gi = aibi (ঘর নিজেই carry বানায়), pi = ai ⊕ bi (ঢোকা carry পার করে)। তাহলে ci+1 = gi + pici, আর বারবার বসিয়ে:

c1 = g0 + p0 c0
c2 = g1 + p1 g0 + p1 p0 c0
c3 = g2 + p2 g1 + p2 p1 g0 + p2 p1 p0 c0
c4 = g3 + p3 g2 + p3 p2 g1 + p3 p2 p1 g0 + p3 p2 p1 p0 c0
s_i = p_i XOR c_i

Delay-এর প্রমাণ: Ripple-এ ci আসার পর একটি AND আর একটি OR লাগে — ২ delay; g, p তৈরি সময় ১-এ, তাই আরোহে ci তৈরি হয় সময় 2i + 1-এ: cn = 2n + 1 (৪ বিটে ৯, ৩২ বিটে ৬৫, ৬৪ বিটে ১২৯)। CLA-তে g, p সময় ১-এ, ওপরের AND-OR দুই স্তর → প্রতিটি carry সময় ৩-এ, sum-এর XOR সময় ৪-এ — ৪ বিটে ৪ gate delay, n-এর ওপর নির্ভর করে না (fan-in সীমার ভেতরে)।

মাপকাঠিRipple-carryCarry-lookahead
DelayO(n): 2n + 1৪ বিট ব্লকে স্থির; বহুস্তরে O(log n)
Gate (৪ বিট)২০টি২৬টি
সমস্যাবড় n-এ ধীরবড় n-এ fan-in আর আকার বিস্ফোরণ — তাই group G, P দিয়ে বহুস্তর

উপসংহার: বাস্তবের ৬৪ বিট adder বহুস্তর lookahead বা prefix adder (Kogge–Stone, Brent–Kung) — সময় আর আয়তনের বিনিময়।

নম্বর কোথায়: দুটির সংজ্ঞা (২), g ও p (১), চারটি সমীকরণ (৩), ripple delay-এর যুক্তি (২), CLA delay ও তুলনা (২)। পর্ব ১১

৩ · অংশ খ — Sequential লজিক আর কম্পিউটারের গাণিতিক কাজ (মডিউল ৩–৪)

রিভিশন: পর্ব ১৫ (latch, flip-flop), পর্ব ১৬ (register, counter), পর্ব ১৭ (Moore, Mealy), পর্ব ১৮ (setup-hold, metastability), পর্ব ১৯ (প্রজেক্ট), পর্ব ২১ (Booth), পর্ব ২২ (ভাগ), পর্ব ২৩ আর পর্ব ২৪ (IEEE 754).

খ-০১NOR দিয়ে SR latch আঁকুন আর truth table লিখুন। S = R = 1 কেন নিষিদ্ধ — race condition উদাহরণসহ ব্যাখ্যা করুন। Latch আর flip-flop-এর পার্থক্য কী, আর JK-এর race-around কীভাবে দূর হয়? — ১০ নম্বর (মাঝারি, ছবিসহ)

সংজ্ঞা: SR latch দুটি cross-coupled NOR gate-এর একটি bistable circuit: Q = NOR(R, Q′), Q′ = NOR(S, Q). Feedback-এর কারণে এটি এক বিট মনে রাখে।

 R ---[NOR1]---+---> Q        Q  = NOR(R, Q')
        ^      |              Q' = NOR(S, Q)
        |      v   (cross-coupled feedback)
 S ---[NOR2]---+---> Q'

 S R | Q+          meaning
 0 0 | Q           hold
 0 1 | 0           reset
 1 0 | 1           set
 1 1 | 0 (Q' = 0)  forbidden

Race-এর ব্যাখ্যা: S = R = 1 দিলে দুটি NOR-এরই একটি ইনপুট ১, তাই Q = Q′ = ০ — “Q′ হলো Q-এর উল্টো” সম্পর্ক ভাঙে। আসল সমস্যা আসে তারপর: S আর R একসাথে ০-তে নামালে দুটি gate-ই দেখে অন্য আউটপুট ০, তাই দুটিই ১ হতে চায়। সমান delay ধরলে (এক একক, দুই gate একসাথে বদলায়) আউটপুট 00 → 11 → 00 → 11 … দোলে; বাস্তবে একটি gate সামান্য দ্রুত, তাই latch কোনো এক দিকে পড়ে — কিন্তু কোন দিকে, আগে বলা যায় না। এটিই race.

Timing diagram-এ যা আঁকবেন: তিনটি রেখা S, R, Q একই সময়-অক্ষে। S = ১ পালসে Q ওঠে (একটু delay পরে), R = ১ পালসে নামে; তারপর S আর R একসাথে ১ → Q = ০; একসাথে ০ হওয়ার মুহূর্তের পর Q-এর জায়গায় দ্রুত দোলা বা ধূসর “অনিশ্চিত” অংশ — লিখুন “race: মান অনির্দিষ্ট”।

Latch বনাম flip-flop: Latch level-sensitive — enable চালু থাকার পুরো সময় স্বচ্ছ, D-র প্রতিটি বদল Q-তে যায়; flip-flop edge-triggered — শুধু clock-এর ধারের মুহূর্তের D ধরে। দুটি D latch উল্টো enable-এ জুড়ে master–slave D flip-flop হয়।

Race-around: level-triggered JK-তে J = K = ১ আর clock pulse propagation delay-এর চেয়ে লম্বা হলে Q একটি pulse-এর মধ্যেই বারবার উল্টায় — শেষ মান অনিশ্চিত। প্রতিকার: master–slave বা edge-triggered গঠন (প্রতি ধারে ঠিক একবার toggle). Excitation table (JK): 0→0: 0X, 0→1: 1X, 1→0: X1, 1→1: X0.

উপসংহার: আধুনিক synchronous নকশায় প্রায় সব স্মৃতি-উপাদান edge-triggered D flip-flop; SR-এর আচরণ আসে asynchronous preset/clear হিসেবে।

নম্বর কোথায়: circuit ও truth table (২), নিষিদ্ধ অবস্থা আর race (৩), timing diagram (২), latch বনাম flip-flop (২), race-around ও প্রতিকার (১)। পর্ব ১৫

খ-০২Setup আর hold time কী? একটি পথে tpcq = ৩০ ps, critical path-এর tpd = ৩৫০ ps, tsetup = ২০ ps — সর্বোচ্চ clock frequency কত? সবচেয়ে ছোট পথে tccq = ২০ ps, tcd = ১৫ ps, thold = ৪০ ps হলে কী সমস্যা, আর সমাধান কী? Metastability উদাহরণসহ ব্যাখ্যা করুন। Clock skew শূন্য ধরুন। — ১০ নম্বর (কঠিন)

সংজ্ঞা: Setup time — clock ধারের আগে D যতক্ষণ স্থির থাকতে হবে; hold time — ধারের পরে যতক্ষণ স্থির থাকতে হবে। (Harris & Harris-এর লেখা: tpcq = clock-to-Q-এর সর্বোচ্চ, tccq = সর্বনিম্ন; tpd, tcd = logic-এর সর্বোচ্চ ও সর্বনিম্ন delay.)

Setup-এর শর্ত: একটি ধারে ছাড়া ডেটা পরের ধারের tsetup আগে পৌঁছাতে হবে: Tc ≥ tpcq + tpd + tsetup = ৩০ + ৩৫০ + ২০ = ৪০০ ps → fmax = ১ ÷ ৪০০ ps = ২.৫ GHz.

Hold-এর শর্ত: একই ধারে নতুন ডেটা এত দ্রুত পৌঁছানো চলবে না যে পরের flip-flop-এর hold জানালা ভাঙে: tccq + tcd ≥ thold. এখানে ২০ + ১৫ = ৩৫ ps < ৪০ ps — ৫ ps-এর hold violation. শর্তে Tc নেই, তাই clock ধীর করে সারে না; ছোট পথে অন্তত ৫ ps-এর buffer বসাতে হয়।

clk   ____|‾‾‾‾‾‾|______|‾‾‾‾‾‾|____
           ^ edge 1        ^ edge 2
D2    ====X=============X=======      setup window: before edge 2
          |<-tpcq+tpd-->|<tsu>|
          |<tccq+tcd>|               hold window: right after edge 1

Metastability: একটি asynchronous বোতামের সংকেত clock-এর সাথে মেলে না; কখনো সেটি ঠিক setup–hold জানালার ভেতরে বদলাবেই। তখন flip-flop ০ আর ১-এর মাঝামাঝি ভোল্টেজে কিছুক্ষণ আটকে থাকতে পারে — metastability. এটি এড়ানো যায় না, শুধু বিরল করা যায়: MTBF = etr/τ ÷ (T0 · fclk · fdata). Resolution time tr সূচকে বসে, তাই প্রথম flip-flop-এর পরে মাঝে কোনো logic ছাড়া দ্বিতীয় একটি flip-flop (two-flip-flop synchronizer) প্রায় এক cycle বাড়তি সময় দিয়ে MTBF বহুগুণ বাড়ায়।

উপসংহার: setup ঠিক করে গতি, hold ঠিক করে নির্ভুলতা; আর clock domain পেরোনো প্রতিটি সংকেতে synchronizer — বহু-বিট মান হলে Gray code বা async FIFO.

নম্বর কোথায়: দুটি সংজ্ঞা (২), setup শর্ত ও fmax (২), hold শর্ত, violation ও সমাধান (৩), metastability ও synchronizer (৩)। পর্ব ১৮

খ-০৩Moore আর Mealy machine-এর পার্থক্য লিখুন। একটি overlapping “1011” sequence detector-এর Mealy state diagram আর state table দিন। Moore-এ কয়টি state আর flip-flop লাগবে? — ৮ নম্বর (মাঝারি)

সংজ্ঞা: Moore-এর output শুধু বর্তমান state থেকে (এক cycle পরে, স্থির); Mealy-র output state আর বর্তমান input থেকে (একই cycle-এ, তবে input-এর ঝাঁকুনি output-এ যায়)। একই কাজে Mealy-তে state সমান বা কম।

State (অর্থ)x = 0 → next / zx = 1 → next / z
S0 (কিছু মেলেনি)S0 / 0S1 / 0
S1 (“1”)S2 / 0S1 / 0
S2 (“10”)S0 / 0S3 / 0
S3 (“101”)S2 / 0S1 / 1

ব্যাখ্যা: প্রতিটি state হলো “এখন পর্যন্ত মিলে যাওয়া সবচেয়ে লম্বা prefix”. S3-এ 1 এলে “1011” পূর্ণ — z = ১, আর overlapping বলে শেষের “1” নতুন শুরুর prefix, তাই S1-এ যাই। S3-এ 0 এলে “1010”-এর শেষ “10” prefix — S2. State diagram-এ চারটি বৃত্ত, প্রতিটি থেকে দুটি তীর, তীরে “x/z” লিখুন।

Moore: output state-এ বসাতে “1011 পাওয়া গেছে” নামে একটি বাড়তি state লাগে — ৫টি state, ⌈log২ ৫⌉ = ৩টি flip-flop; Mealy-তে ৪টি state, ২টি flip-flop.

উপসংহার: output-এর পরিচ্ছন্নতা জরুরি হলে (যেমন traffic light) Moore; কম state আর এক cycle আগে সাড়া চাইলে Mealy.

নম্বর কোথায়: পার্থক্য (২), সঠিক state table (৩), overlap-এর যুক্তি (১), Moore-এর হিসাব (২)। পর্ব ১৭ · পর্ব ১৯

খ-০৪Booth-এর algorithm-এর নিয়ম লিখে ৪ বিটে ৩ × (−৪) গুণ করুন — প্রতিটি ধাপে A, Q, Q−1 দেখান। Booth কেন কাজ করে, আর সবচেয়ে খারাপ ক্ষেত্র কোনটি? — ১০ নম্বর (কঠিন)

সংজ্ঞা ও নিয়ম: Booth-এর algorithm two's complement সংখ্যা সরাসরি গুণ করে। প্রতি ধাপে (Q0, Q−1) দেখুন: 10 → A = A − M; 01 → A = A + M; 00 বা 11 → কিছু নয়; তারপর A:Q:Q−1-এর arithmetic right shift. n বার; ফল A:Q-এর 2n বিট।

উদাহরণ: M = 0011 (৩), Q = 1100 (−৪), −M = 1101. নিচের stepper-এ প্রতিটি ধাপ:

M = 0011, −M = 1101
ধাপ
(Q₀, Q₋₁)
কাজ
A
Q
Q₋₁
  1. শুরু। A = 0000, Q = গুণক 1100, Q₋₁ = 0. M = 0011, আর −M = 1101 আগেই লিখে রাখুন।
  2. ধাপ ১ — জোড়া 00. যোগ-বিয়োগ নেই; A:Q:Q₋₁ এক ঘর ডানে (A-এর চিহ্ন-বিট কপি হয়): A = 0000, Q = 0110, Q₋₁ = 0.
  3. ধাপ ২ — আবার 00. শুধু shift: A = 0000, Q = 0011, Q₋₁ = 0.
  4. ধাপ ৩ — জোড়া 10. ১-এর সারি শুরু, তাই A − M = 0000 + 1101 = 1101; তারপর arithmetic shift — A = 1110, Q = 1001, Q₋₁ = 1.
  5. ধাপ ৪ — জোড়া 11. সারির ভেতরে, কিছু নয়; shift: A = 1111, Q = 0100, Q₋₁ = 1. ফল A:Q = 1111 0100 = −১২ ✓ — মাত্র একটি বিয়োগে।

কেন কাজ করে: two's complement-এ Q = −qn−1২n−1 + Σqi২i. q−1 = ০ ধরলে দেখানো যায় Q = Σi=0n−1 (qi−1 − qi)২i — দুই যোগফলের পদ মিলিয়ে বাতিল করলে শুধু −qn−1২n−1 আর বাকিগুলো থাকে। প্রতিটি অঙ্ক di = qi−1 − qi ∈ {−১, ০, +১}: (qi, qi−1) = (১, ০) → −১ (বিয়োগ), (০, ১) → +১ (যোগ)। তাই M × Q = Σdi·M·২i, আর প্রতিটি shift ২i-এর ওজন বসায়।

সবচেয়ে খারাপ ক্ষেত্র: পালাক্রমের বিট (0101…) — প্রতিটি ধাপে যোগ বা বিয়োগ, n টি কাজ; যেমন (−৩) × ৫-এ (Q = 0101) চারটি ধাপেই কাজ। সমাধান radix-4 Booth: তিন বিট দেখে অঙ্ক {−২ … +২}, partial product প্রায় অর্ধেক।

নম্বর কোথায়: নিয়ম (২), সম্পূর্ণ টেবিল (৪), সঠিক ফল ও যাচাই (১), প্রমাণের মূল যুক্তি (২), worst case (১)। পর্ব ২১

নিজের সংখ্যায় টেবিল মেলাতে এই ছোট tracer — পরীক্ষার টেবিলের মতোই ছাপে:

// Booth's algorithm, n-bit, printed as the exam table: step, (Q0,Q-1), action, A, Q, Q-1.
function booth(M, Q, n) {
  const mask = (1 << n) - 1, bits = v => v.toString(2).padStart(n, "0");
  let A = 0, q = Q & mask, q1 = 0;
  const m = M & mask;
  console.log(`M = ${bits(m)} (${M}), Q = ${bits(q)} (${Q}), n = ${n}`);
  console.log("step Q0Q-1 action   A     Q     Q-1");
  console.log(`init  --    ----   ${bits(A)}  ${bits(q)}  ${q1}`);
  for (let i = 1; i <= n; i++) {
    const pair = `${q & 1}${q1}`;
    let act = "shift ";
    if (pair === "10") { A = (A - m) & mask; act = "A-M,sh"; }
    if (pair === "01") { A = (A + m) & mask; act = "A+M,sh"; }
    q1 = q & 1;                                   // arithmetic right shift of A:Q:Q-1
    q = (q >>> 1) | ((A & 1) << (n - 1));
    A = (A >>> 1) | (A & (1 << (n - 1)));
    console.log(`  ${i}   ${pair}    ${act} ${bits(A)}  ${bits(q)}  ${q1}`);
  }
  let p = (A << n) | q;
  if (p & (1 << (2 * n - 1))) p -= 1 << (2 * n);  // read 2n bits as two's complement
  console.log(`product A:Q = ${bits(A)} ${bits(q)} = ${p} (check ${M * Q})\n`);
}
booth(3, -4, 4);
booth(-3, 5, 4);

আসল রানের আউটপুট:

M = 0011 (3), Q = 1100 (-4), n = 4
step Q0Q-1 action   A     Q     Q-1
init  --    ----   0000  1100  0
  1   00    shift  0000  0110  0
  2   00    shift  0000  0011  0
  3   10    A-M,sh 1110  1001  1
  4   11    shift  1111  0100  1
product A:Q = 1111 0100 = -12 (check -12)

M = 1101 (-3), Q = 0101 (5), n = 4
step Q0Q-1 action   A     Q     Q-1
init  --    ----   0000  0101  0
  1   10    A-M,sh 0001  1010  1
  2   01    A+M,sh 1111  0101  0
  3   10    A-M,sh 0001  0010  1
  4   01    A+M,sh 1111  0001  0
product A:Q = 1111 0001 = -15 (check -15)

প্রথম টেবিলটি ওপরের stepper-এর সাথে ঘরে ঘরে মেলে: ১-এর একটি সারিতে (1100) Booth শুধু একটি বিয়োগ করেছে। দ্বিতীয়টি সবচেয়ে খারাপ ক্ষেত্র — Q = 0101-এ চারটি ধাপেই A − M বা A + M. খাতায় “A-M,sh” না লিখে দুই লাইনে লিখুন: আগে কাজের পরের A (যেমন ধাপ ৩-এ 1101), তারপর shift-এর পরের সারি — পরীক্ষক দুটিই দেখতে চান।

খ-০৫IEEE 754 single precision-এর বিন্যাস লিখে −১৩.৬২৫ encode করুন। বিশেষ মানগুলো (±০, ±∞, NaN, subnormal) কীভাবে চেনা যায়, উদাহরণসহ লিখুন। Exponent biased কেন? — ১০ নম্বর (মাঝারি)

সংজ্ঞা: Single precision ৩২ বিট: ১ বিট sign (s), ৮ বিট biased exponent (E, bias ১২৭), ২৩ বিট fraction (f). Normal সংখ্যার মান = (−১)s × ১.f × ২E−১২৭; শুরুর ১-টি লেখা হয় না (hidden bit) — ২৩ ঘরে ২৪ বিটের নির্ভুলতা।

Encode: ১৩.৬২৫ = 1101.101২ (০.৬২৫ = ০.৫ + ০.১২৫) = 1.101101 × ২৩. s = ১, E = ৩ + ১২৭ = ১৩০ = 1000 0010, f = 1011 0100 0…0.

 s  E (8)      f (23)
 1  10000010   10110100000000000000000
 = 1100 0001 0101 1010 0000 ... 0000  = 0xC15A0000
Efমানউদাহরণ (hex)
০০±০00000000 (+০), 80000000 (−০)
০≠ ০subnormal: ০.f × ২−১২৬00000001 ≈ ১.৪ × ১০−৪৫
১–২৫৪যেকোনোnormalC15A0000 = −১৩.৬২৫
২৫৫০±∞7F800000, FF800000
২৫৫≠ ০NaN7FC00000 (quiet)

উদাহরণে বিশেষ মান: ১/০ = +∞, ১/(−০) = −∞ (তুলনায় −০ == +০ সত্য, আচরণে আলাদা); ০/০ আর √−১ = NaN, আর NaN == NaN মিথ্যা। Subnormal শূন্যের কাছে ফাঁক ভরে (gradual underflow) — x ≠ y হলে x − y ≠ ০ নিশ্চিত।

Bias কেন: biased exponent-এ ধনাত্মক float-এর বিট-রূপ unsigned integer হিসেবে তুলনা করলেও ক্রম ঠিক থাকে, আর শূন্যের সব বিট ০।

উপসংহার: ০.১-এর মতো ভগ্নাংশ binary-তে অসীম পর্যাবৃত্ত, তাই float-এ গোল হয় (0x3DCCCCCD); টাকার হিসাব কখনো float-এ নয়।

নম্বর কোথায়: বিন্যাস ও সূত্র (২), encode-এর ধাপ ও hex (৩), বিশেষ মানের টেবিল (৩), উদাহরণ ও bias-এর কারণ (২)। পর্ব ২৩ · পর্ব ২৪

৪ · অংশ গ — Instruction set আর প্রসেসর নকশা (মডিউল ৫–৬)

রিভিশন: পর্ব ২৫ (ISA, RISC বনাম CISC), পর্ব ২৬ (RV32I), পর্ব ২৭ (encoding), পর্ব ২৮ (addressing mode), পর্ব ৩০ (stack), পর্ব ৩২ (datapath), পর্ব ৩৩ (control), পর্ব ৩৪ (multi-cycle, microprogram), পর্ব ৩৫ (pipeline), পর্ব ৩৬ (hazard), পর্ব ৩৭ (branch prediction) আর পর্ব ৩৮ (exception).

গ-০১Addressing mode কী? Immediate, register, direct, indirect, register indirect, base + offset আর PC-relative — প্রতিটির effective address আর একটি উদাহরণ দিন। PC = ২০২ (fetch-এর পরের মান), address field A = ৫০০ হলে PC-relative-এ EA কত? — ৮ নম্বর (সহজ)

সংজ্ঞা: Addressing mode হলো instruction-এর field থেকে operand কোথায় আছে তা বের করার নিয়ম; হিসাব করা মেমরি-ঠিকানাটি effective address (EA), আর operand = M[EA].

ModeOperand / EAমেমরি-যাত্রা (operand-এর জন্য)উদাহরণ
Immediateoperand = A (instruction-এই)০addi x5, x5, 10
Registeroperand = R০add x5, x6, x7
DirectEA = A১পুরোনো LOAD 500
IndirectEA = M[A]২pointer-এর ঠিকানা instruction-এ
Register indirectEA = R১lw x6, 0(x10)
Base + offset (displacement)EA = R + A১lw x6, 8(x10)
PC-relativeEA = PC + Abranch-এ ০ (target হিসাব)beq x5, x6, label

হিসাব: PC-relative-এ EA = ২০২ + ৫০০ = ৭০২ — শর্ত, PC-এর মানটি fetch-এর পরের। (RISC-V-তে শাখার target গোনা হয় শাখা instruction-এর নিজের ঠিকানা থেকে: target = PC + offset — বই ধরে প্রথাটি লিখে দিন।)

উপসংহার: RISC-V-তে load-store-এর mode একটিই — rs1 + ১২ বিটের signed offset; বাকিগুলো কয়েকটি instruction জুড়ে বানানো হয়। x86-এ base + index × scale + displacement এক instruction-এ।

নম্বর কোথায়: সংজ্ঞা (১), সাতটি mode (৫), PC-relative হিসাব ও প্রথা (১), RISC-V বনাম x86 (১)। পর্ব ২৮

গ-০২RISC-V-এর ছয়টি instruction format-এর নাম লিখুন। addi x5, x5, 10-কে binary আর hex-এ encode করুন। rs1, rs2, rd সব format-এ একই জায়গায় কেন? — ৬ নম্বর (মাঝারি)

সংজ্ঞা: Instruction format হলো ৩২ বিটকে field-এ ভাগের নিয়ম। RV32I-এ ছয়টি: R (register–register), I (immediate, load), S (store), B (branch), U (upper immediate — lui, auipc), J (jal).

I-type:  imm[11:0]     rs1    funct3  rd     opcode
         000000001010  00101  000     00101  0010011
       = 0000 0000 1010 0010 1000 0010 1001 0011 = 0x00A28293

ব্যাখ্যা: opcode 0010011 (OP-IMM), funct3 000 (addi), rd = rs1 = ৫ (00101), imm = ১০ = 000000001010. বাঁ থেকে বিট জুড়ে চার চার করে hex.

একই জায়গার কারণ: decode শেষ হওয়ার আগেই register file পড়া শুরু করা যায়, আর rd বাছতে mux লাগে না; imm-এর sign বিট সবসময় বিট ৩১-এ, তাই sign extension-ও আগে শুরু। দাম — S আর B-তে immediate ভাঙা ভাঙা, হাতে encode করা একটু কঠিন।

নম্বর কোথায়: ছয় format (১), field-ভাগ ও বিট (৩), hex (১), কারণ (১)। পর্ব ২৭ · পর্ব ২৬

গ-০৩Single-cycle RISC-V datapath আঁকুন আর lw-এর পথ ব্যাখ্যা করুন। R-type, lw, sw আর beq-এর control signal-এর টেবিল দিন (ALUSrc, MemtoReg, RegWrite, MemRead, MemWrite, Branch, ALUOp1, ALUOp0). sw-এ MemtoReg কেন X? — ১০ নম্বর (মাঝারি, ছবিসহ)

সংজ্ঞা: Single-cycle datapath-এ প্রতিটি instruction এক clock cycle-এ শুরু থেকে শেষ হয়; তাই প্রতিটি unit একবারই ব্যবহার হয় — আলাদা instruction আর data memory লাগে।

 PC --> I-mem --instr--> Reg file --rs1--> ALU --addr--> D-mem --+
  ^       |             (rs1, rs2, rd)  ^  rs2      |               |
  |       +--> Imm-gen ---------------->[ALUSrc mux] |  ALU result -+->[MemtoReg mux]--> rd
  +--[PCSrc mux]<-- PC+4 / PC+imm (Branch AND Zero)

lw-এর পথ: PC থেকে instruction আনা → rs1 পড়া, imm-gen-এ ১২ বিট sign-extend → ALU-তে rs1 + imm (ALUSrc = ১) → data memory পড়া (MemRead = ১) → MemtoReg = ১ দিয়ে মেমরির মান rd-তে (RegWrite = ১)। পাঁচটি unit-ই লাগে বলে lw-ই critical path, আর সেটিই clock period ঠিক করে।

InstrALUSrcMemtoRegRegWriteMemReadMemWriteBranchALUOp1ALUOp0
R-type00100010
lw11110000
sw1X001000
beq0X000101

X-এর কারণ: sw আর beq-এ RegWrite = ০ — register file কিছু লেখে না, তাই MemtoReg mux কী বাছল তাতে কিছু যায় আসে না। PCSrc = Branch AND Zero; Zero আসে ALU-র rs1 − rs2 থেকে (ALUOp = 01 → বিয়োগ)।

উপসংহার: CPI = ১ হলেও single-cycle ধীর — সবচেয়ে লম্বা instruction সবার clock ঠিক করে; সমাধান multi-cycle বা pipeline.

নম্বর কোথায়: লেবেলসহ datapath (৩), lw-এর পথ (২), চার সারির টেবিল (৩), X-এর যুক্তি ও PCSrc (২)। পর্ব ৩২ · পর্ব ৩৩

গ-০৪Pipelining কী? পাঁচ ধাপের RISC-V pipeline-এর ধাপগুলো লিখে পাঁচটি instruction-এর pipeline diagram আঁকুন। ধাপের delay ২০০/১০০/২০০/২০০/১০০ ps আর register overhead ২০ ps (single-cycle নকশাতেও একবার) হলে clock period, single-cycle-এর তুলনায় ১০০০ instruction-এ speedup আর সর্বোচ্চ speedup কত? — ১০ নম্বর (মাঝারি, ছবিসহ)

সংজ্ঞা: Pipelining হলো instruction-এর কাজকে ধাপে ভাগ করে ভিন্ন instruction-এর ভিন্ন ধাপ একসাথে চালানো — গার্মেন্টস কারখানার assembly line-এর মতো। এটি throughput বাড়ায়, একটি instruction-এর latency কমায় না। ধাপ: IF (fetch), ID (decode ও register পড়া), EX (ALU), MEM (ডেটা মেমরি), WB (register-এ লেখা)।

cycle:   1    2    3    4    5    6    7    8    9
I1      IF   ID   EX   MEM  WB
I2           IF   ID   EX   MEM  WB
I3                IF   ID   EX   MEM  WB
I4                     IF   ID   EX   MEM  WB
I5                          IF   ID   EX   MEM  WB    -> k + n - 1 = 5 + 5 - 1 = 9 cycles

হিসাব: Tstage = সবচেয়ে ধীর ধাপ + overhead = ২০০ + ২০ = ২২০ ps. Single-cycle Tc = ৮০০ + ২০ = ৮২০ ps. ১০০০ instruction-এ: single-cycle ৮২০ × ১০০০ = ৮,২০,০০০ ps; pipeline (৫ + ৯৯৯) × ২২০ = ২,২০,৮৮০ ps; speedup ≈ ৩.৭১. সীমা (n → ∞) = ৮২০ ÷ ২২০ ≈ ৩.৭৩ — ৫ নয়, কারণ ধাপ অসম আর register-এর খরচ আছে।

ব্যাখ্যা: প্রতিটি ধাপের পরে একটি pipeline register (IF/ID, ID/EX, EX/MEM, MEM/WB) ফল আর বাকি control signal পরের ধাপে বয়ে নেয়, যাতে পাঁচটি instruction একে অপরের মান নষ্ট না করে।

উপসংহার: ধাপ আরও ভাঙলে clock দ্রুত হয়, কিন্তু overhead আর hazard-এর দাম বাড়ে — তাই একটি সর্বোত্তম গভীরতা আছে।

নম্বর কোথায়: সংজ্ঞা ও ধাপ (২), diagram (২), Tstage (২), ১০০০ instruction-এর speedup (২), সীমা ও ৫ না হওয়ার কারণ (২)। পর্ব ৩৫

গ-০৫তিন রকম pipeline hazard উদাহরণসহ লিখুন। Forwarding কীভাবে data hazard দূর করে, আর load-use-এ কেন তবুও stall লাগে? একটি প্রোগ্রামে ২৫% load, যার ৪০%-এর ঠিক পরের instruction ফলটি ব্যবহার করে; ১৫% branch, ৬০% taken, predict-not-taken, শাখা ID-তে নিষ্পত্তি (penalty ১ cycle). Forwarding আছে। CPI কত? — ১০ নম্বর (কঠিন)

সংজ্ঞা: Structural — দুটি instruction একই hardware চায় (একটিই memory port থাকলে IF আর MEM); data — operand এখনো লেখা হয়নি (RAW); control — শাখার ফল জানার আগেই পরের instruction আনতে হয়।

cycle:              1    2    3    4    5    6    7
add x1, x2, x3     IF   ID   EX   MEM  WB
sub x4, x1, x5          IF   ID   EX   MEM  WB         EX/MEM -> EX (cycle 4)
and x6, x1, x7               IF   ID   EX   MEM  WB    MEM/WB -> EX (cycle 5)

lw  x1, 0(x2)      IF   ID   EX   MEM  WB
add x3, x1, x4          IF   ID   **   EX   MEM  WB    1 bubble, then MEM/WB -> EX

Forwarding: ALU-র ফল EX-এর শেষেই তৈরি, WB পর্যন্ত অপেক্ষার দরকার নেই — forwarding unit ALU-র ইনপুট mux-এ EX/MEM বা MEM/WB থেকে মান আনে। শর্ত (rs1-এর জন্য): EX/MEM.RegWrite = ১ আর EX/MEM.rd ≠ ০ আর EX/MEM.rd = ID/EX.rs1 → ForwardA = 10; না হলে MEM/WB-এর একই শর্তে ForwardA = 01. দুটিই মিললে EX/MEM জেতে — সেটি প্রোগ্রামে পরের, তাই সর্বশেষ মান।

Load-use: lw-এর মান আসে MEM-এর শেষে, অথচ পরের instruction-এর EX সেই একই cycle-এ — সময়ের পেছনে তীর অসম্ভব। Hazard detection unit ID-তে ধরে: ID/EX.MemRead আর ID/EX.rd = IF/ID.rs1 বা rs2 হলে PC আর IF/ID আটকে একটি bubble ঢোকায়।

CPI: আদর্শ ১ + load-use ০.২৫ × ০.৪ × ১ = ০.১০ + branch ০.১৫ × ০.৬ × ১ = ০.০৯ → CPI = ১.১৯. (শাখা EX-এ নিষ্পত্তি হলে penalty ২ → ১ + ০.১০ + ০.১৮ = ১.২৮.)

উপসংহার: ৫ ধাপের in-order pipeline-এ WAR আর WAW hazard হয় না — সবাই ID-তে পড়ে, WB-তে ক্রমে লেখে; সেগুলো আসে out-of-order core-এ।

নম্বর কোথায়: তিন hazard ও উদাহরণ (২), diagram (২), forwarding-এর শর্ত ও অগ্রাধিকার (২), load-use-এর কারণ (২), CPI (২)। পর্ব ৩৬ · পর্ব ৩৭

গ-০৬Branch prediction কেন দরকার? ২-বিট saturating counter-এর state diagram আঁকুন। একটি শাখার ফল T T T N T T T N; counter শুরুতে 00 হলে কয়বার ভুল হয়? শুরুতে 11 হলে? BTB কী? — ৮ নম্বর (মাঝারি)

সংজ্ঞা: শাখার দিক আর target জানার আগেই IF-কে পরের instruction আনতে হয়; ভুল পথে আনা প্রতিটি instruction একটি নষ্ট cycle. CPI = ১ + (শাখার অনুপাত) × (ভুলের হার) × (penalty) — যেমন ২০% শাখা, ৫% ভুল, ২০ cycle penalty-তে CPI = ১.২. Branch prediction অনুমান করে এগিয়ে যায়, ভুল হলে flush.

   T        T        T        T(stay)
 00 -----> 01 -----> 10 -----> 11
 strong N  weak N    weak T    strong T
   <-----    <-----    <-----
   N(stay at 00)   N        N           predict T when high bit = 1
ফলTTTNTTTN
counter (শুরু 00)0001101110111111
অনুমানN ✗N ✗T ✓T ✗T ✓T ✓T ✓T ✗

উত্তর: শুরু 00 → ৪টি ভুল (প্রথম দুটি “গরম হওয়া”); শুরু 11 → ২টি — শুধু দুটি N-এ। কারণ: N-এ 11 থেকে 10-তে নামে, উঁচু বিট তখনো ১, অনুমান উল্টায় না — একটি ব্যতিক্রমে অনুমান বদলায় না। ১-বিট predictor (শুরু T) একই ধারায় ৩টি ভুল করে — দুই N-এ আর প্রথম N-এর পরের T-তে।

BTB: Branch target buffer PC দিয়ে খোঁজা একটি ছোট cache — IF-এই বলে দেয় এটি শাখা কি না আর target কত (tag সহ)। BHT শুধু দিক বলে।

নম্বর কোথায়: প্রয়োজন ও CPI সূত্র (২), state diagram (২), trace দুই অবস্থায় (৩), BTB (১)। পর্ব ৩৭

৫ · অংশ ঘ — উন্নত প্রসেসর আর মেমরি হায়ারার্কি (মডিউল ৭–৮)

রিভিশন: পর্ব ৩৯ (superscalar, VLIW), পর্ব ৪০ (Tomasulo, ROB), পর্ব ৪১ (Spectre, Meltdown), পর্ব ৪২ (SIMD), পর্ব ৪৩ (SMT), পর্ব ৪৪ (locality), পর্ব ৪৫ (direct-mapped), পর্ব ৪৬ (set-associative, LRU), পর্ব ৪৭ (write policy, AMAT), পর্ব ৪৮ (cache-বান্ধব কোড), পর্ব ৪৯ (SRAM, DRAM) আর পর্ব ৫০ (page table, TLB).

ঘ-০১Superscalar আর VLIW-এর পার্থক্য লিখুন। Register renaming কোন dependence দূর করে? Tomasulo-র reservation station আর reorder buffer (ROB)-এর কাজ একটি উদাহরণে ব্যাখ্যা করুন। — ১০ নম্বর (কঠিন)

সংজ্ঞা: Superscalar core চলার সময় hardware দিয়ে ঠিক করে প্রতি cycle-এ কোন কয়েকটি instruction একসাথে issue হবে; VLIW-এ compiler আগেই কয়েকটি স্বাধীন কাজ এক bundle-এ বেঁধে দেয়, hardware সরল থাকে। ৪-way-এ আদর্শ CPI ০.২৫, কিন্তু dependence, cache miss আর ভুল branch-এ slot নষ্ট হয়।

Renaming: শুধু name dependence — WAR আর WAW — দূর হয়, কারণ সেগুলো একই register-নাম পুনর্ব্যবহারের ফল, ডেটার প্রবাহ নয়। RAW (true dependence) থাকে।

1: fdiv f0, f2, f4      (long latency)
2: fadd f6, f0, f8      RAW on f0   -> waits for 1 (Qj = tag of 1)
3: fsub f8, f10, f14    WAR on f8 with 2 -> renamed, runs early
4: fmul f6, f10, f8     WAW on f6 with 2, RAW on f8 from 3

Tomasulo-র ব্যাখ্যা: issue-এর সময় প্রতিটি instruction একটি reservation station পায়; operand তৈরি থাকলে মান (Vj), না থাকলে যে station মান দেবে তার tag (Qj) লেখা হয় — একটির জন্য দুটির একটিই ভরা। Register status টেবিল বলে কোন register-এর পরের মান কোন tag দেবে। ফল তৈরি হলে common data bus-এ tag-সহ ঘোষণা হয়, অপেক্ষমাণ সবাই একসাথে নেয়। ওপরের উদাহরণে ৩ নম্বর instruction ২-এর আগেই f8-এ লিখতে পারে, কারণ ২ issue-এর সময়েই f8-এর মান নিজের station-এ কপি করে নিয়েছে (f0-এর জন্য শুধু tag) — WAR মিলিয়ে গেল।

ROB: Reorder buffer একটি বৃত্তাকার সারি — issue-এর ক্রমে লেজে ঢোকে, ফল ROB-এ জমে, মাথা থেকে প্রোগ্রাম-ক্রমে commit হয়। ভুল branch বা exception হলে মাথার পেছনের সব ফেলে দেওয়া হয় — তাই out-of-order চললেও exception precise আর speculation নিরাপদ।

উপসংহার: আধুনিক বড় core-এ physical register file, rename map আর free list; শত শত micro-op একসাথে উড়ন্ত। দাম power আর area — তাই ছোট দক্ষ core প্রায়ই in-order.

নম্বর কোথায়: superscalar বনাম VLIW (২), renaming কী দূর করে (২), উদাহরণে dependence চেনা (২), RS-এর Vj/Qj ও CDB (২), ROB ও precise exception (২)। পর্ব ৩৯ · পর্ব ৪০

ঘ-০২৩২ বিট byte-address, ৬৪ KiB cache, ৩২ byte block. Direct-mapped, 4-way set-associative আর fully associative-এ tag, index আর offset কত বিট? Direct-mapped-এ ঠিকানা 0x12345678-এর tag, index, offset কত? Valid bit-সহ মোট কত বিট লাগবে (dirty bit নেই)? Direct-mapped cache-এর সংগঠন আঁকুন। — ১০ নম্বর (মাঝারি, ছবিসহ)

সংজ্ঞা: Direct-mapped-এ প্রতিটি block-এর একটিই ঘর (index দিয়ে ঠিক); set-associative-এ একটি set-এর কয়েকটি way-এর যেকোনোটিতে; fully associative-এ যেকোনো ঘরে।

হিসাব: offset = log২ ৩২ = ৫. Line-এর সংখ্যা = ৬৪ KiB ÷ ৩২ = ২,০৪৮.

সংগঠনsettagindexoffset
Direct-mapped২,০৪৮১৬১১৫
4-way৫১২১৮৯৫
Fully associative১২৭০৫

ঠিকানা ভাগ: 0x12345678 → tag = ওপরের ১৬ বিট = 0x1234; নিচের ১৬ বিট 0x5678 = 0101 0110 0111 1000 → offset = শেষ ৫ বিট 11000 = 0x18 (২৪), index = মাঝের ১১ বিট 010 1011 0011 = 0x2B3 (৬৯১)।

মোট বিট: প্রতি line-এ data ৩২ × ৮ = ২৫৬ + tag ১৬ + valid ১ = ২৭৩; ২,০৪৮ × ২৭৩ = ৫,৫৯,১০৪ বিট (৫৪৬ Kibit) — শুধু data-র ৫,২৪,২৮৮-এর চেয়ে প্রায় ৬.৬% বেশি।

 address: [ tag 16 | index 11 | offset 5 ]
                |        |          |
                |        v          |
   index 0  [V][ tag ][ 32-byte data ]
   ...         |   |        |
   index 691[1][1234][ ... data ... ] --> mux (offset) --> word
   ...         |   |
               |   +-->( = )<-- tag from address
               +------>AND --> hit

উপসংহার: direct-mapped-এ একটি comparator, সবচেয়ে কম hit time, কিন্তু একই index-এর block-এ conflict miss; way বাড়ালে conflict কমে, কিন্তু comparator-ও বাড়ে।

নম্বর কোথায়: তিন সংগঠনের ভাগ (৩), ঠিকানার ভাগ (২), মোট বিট (২), সংগঠনের ছবি (২), উপসংহার (১)। পর্ব ৪৫ · পর্ব ৪৬

ঘ-০৩Write-through আর write-back-এর পার্থক্য লিখুন; write miss-এ write-allocate কী? AMAT-এর সূত্র লিখুন। L1: hit time ১ cycle, miss rate ৫%; L2: hit time ১০ cycle, local miss rate ২০%; মেমরি ১০০ cycle — AMAT আর L2-এর global miss rate কত? CPIbase ২, I-cache miss ২%, D-cache miss ৪%, ৩৬% load/store, miss penalty ১০০ cycle হলে CPI কত? — ১০ নম্বর (মাঝারি)

সংজ্ঞা: Write-through প্রতিটি store cache আর নিচের স্তর দুটোতেই লেখে (write buffer দিয়ে অপেক্ষা লুকায়); write-back শুধু cache-এ লেখে, dirty bit রাখে, আর block সরানোর সময় একবার নিচে লেখে। Write miss-এ write-allocate block আগে এনে তারপর লেখে; no-write-allocate সরাসরি নিচে লেখে। সাধারণ জুটি: write-back + write-allocate, write-through + no-write-allocate.

সূত্র: AMAT = hit time + miss rate × miss penalty; দুই স্তরে MPL1 = HTL2 + MRL2(local) × MPL2.

হিসাব: MPL1 = ১০ + ০.২ × ১০০ = ৩০ cycle; AMAT = ১ + ০.০৫ × ৩০ = ২.৫ cycle. L2-এর global miss rate = ০.০৫ × ০.২ = ১% (CPU-র সব access-এর ১% মেমরিতে যায়)।

CPI: I-stall = ১ × ০.০২ × ১০০ = ২; D-stall = ০.৩৬ × ০.০৪ × ১০০ = ১.৪৪; CPI = ২ + ২ + ১.৪৪ = ৫.৪৪ — perfect cache-এর চেয়ে ৫.৪৪ ÷ ২ = ২.৭২ গুণ ধীর।

উপসংহার: clock দ্বিগুণ করলে মেমরির ns-এ মাপা latency একই থাকে, তাই miss penalty-র cycle দ্বিগুণ — CPU দ্বিগুণ দ্রুত হয় না। L1-এর লক্ষ্য দ্রুত hit, L2/L3-এর লক্ষ্য কম miss.

নম্বর কোথায়: write policy ও allocate (৩), সূত্র (১), AMAT ও global MR (৩), CPI (৩)। পর্ব ৪৭ · পর্ব ৪৪

ঘ-০৪Virtual memory-তে ঠিকানা অনুবাদ উদাহরণসহ ব্যাখ্যা করুন। ৩২ বিট VA, ৪ KiB page, ৪ byte PTE — এক স্তরের page table কত বড়? Sv32-এ VA 0x00403ABC কীভাবে ভাগ হয়? TLB hit rate ৯৮%, TLB ১ cycle, তিন স্তরের walk (Sv39), প্রতিটি PTE আর ডেটা ১০০ cycle হলে EAT কত? — ১০ নম্বর (কঠিন)

সংজ্ঞা: Virtual memory-তে প্রতিটি process নিজের virtual address দেখে; MMU প্রতিটি access-এ তা physical address-এ অনুবাদ করে — page-এর এককে, page table দিয়ে। TLB সাম্প্রতিক অনুবাদের ছোট cache.

এক স্তরের আকার: VPN = ৩২ − ১২ = ২০ বিট → ২২০ PTE × ৪ byte = ৪ MiB প্রতি process — বেশিরভাগ ফাঁকা হলেও; তাই multi-level page table, যেখানে অব্যবহৃত অংশের নিচের টেবিল থাকেই না।

Sv32 ভাগ: 10 | 10 | 12. 0x00403ABC → VPN[1] = বিট ৩১–২২ = ১, VPN[0] = বিট ২১–১২ = ৩, offset = 0xABC. প্রতিটি টেবিলে ১০২৪ PTE × ৪ byte = ঠিক একটি ৪ KiB page.

 VA 0x00403ABC
   -> TLB lookup (VPN 0x00403)  hit? -> PA = PPN : 0xABC
   miss:
   satp.PPN x 4096 + VPN[1] x 4  -> root PTE (V=1, R=W=X=0: pointer)
   PTE.PPN  x 4096 + VPN[0] x 4  -> leaf PTE (R/W/X/U checked, A/D set)
   PA = leaf.PPN x 4096 + 0xABC ; refill TLB ; invalid PTE -> page fault

EAT: EAT = tTLB + (১ − h) × L × tPTE + tmem = ১ + ০.০২ × ৩ × ১০০ + ১০০ = ১০৭ cycle; সব hit হলে ১০১, সব access-এ TLB miss হলে ১ + ৩০০ + ১০০ = ৪০১ — প্রায় চার গুণ।

উপসংহার: ASID থাকলে context switch-এ TLB মুছতে হয় না; huge page TLB reach বাড়ায়; page fault হলে OS page এনে instruction আবার চালায়।

নম্বর কোথায়: সংজ্ঞা ও উপাদান (২), page table-এর আকার (২), Sv32 ভাগ (২), walk-এর ধাপ (২), EAT (২)। পর্ব ৫০

৬ · অংশ ঙ — I/O, সমান্তরালতা আর আধুনিক সিস্টেম (মডিউল ৯)

রিভিশন: পর্ব ৫১ (MMIO, PCIe), পর্ব ৫২ (interrupt, DMA), পর্ব ৫৩ (MESI, consistency), পর্ব ৫৪ (Flynn, NUMA), পর্ব ৫৫ (GPU), পর্ব ৫৬ (power) আর পর্ব ৫৭ (simulator).

ঙ-০১Programmed I/O (polling), interrupt-driven I/O আর DMA-র পার্থক্য লিখুন। ২ GHz CPU প্রতি ২০ µs-এ poll করে, প্রতিটি poll ৪০০ cycle; interrupt-এর বাড়তি খরচ ৩০০০ cycle. Polling-এ CPU-র কত অংশ যায়, আর কোন ঘটনা-হারের ওপরে polling সস্তা? — ৮ নম্বর (মাঝারি)

সংজ্ঞা: Polling-এ CPU বারবার device-এর status register পড়ে; interrupt-এ device কাজ শেষে CPU-কে সংকেত দেয়; DMA-তে DMA controller বা bus-master device নিজেই মেমরিতে block আনা-নেওয়া করে, CPU শুধু শুরু করে আর শেষে একটি interrupt পায়।

হিসাব: সেকেন্ডে ১ ÷ ২০ µs = ৫০,০০০ poll × ৪০০ = ২ কোটি cycle = ২ GHz-এর ১% — ঘটনা থাকুক বা না থাকুক। Crossover: r* = Cpoll ÷ (P × Cirq) = ৪০০ ÷ (২০ µs × ৩০০০) ≈ সেকেন্ডে ৬,৬৬৭টি ঘটনা. এর কম হলে interrupt সস্তা (কি-বোর্ড), বেশি হলে polling (দ্রুত network card); মাঝামাঝি interrupt coalescing.

DMA-র ধাপ: driver buffer আর descriptor বানায় → device-এর doorbell register-এ MMIO write → device bus-এ নিজে memory read/write চালায় → শেষে descriptor-এ অবস্থা লিখে একটি interrupt. CPU-র খরচ প্রতি transfer-এ, প্রতি byte-এ নয়; তবে মেমরির bandwidth ভাগ হয় (পুরোনো নাম cycle stealing).

উপসংহার: বড় block-এ DMA; আধুনিক NIC আর NVMe তিনটিই মেশায়।

নম্বর কোথায়: তিনটির সংজ্ঞা (৩), polling-এর ভাগ (১), r* (২), DMA-র ধাপ (২)। পর্ব ৫২ · পর্ব ৫১

ঙ-০২Cache coherence সমস্যা কী? MESI protocol-এর চারটি অবস্থা ব্যাখ্যা করুন। তিন core, snooping bus, write-back cache, সব line শুরুতে I: P1 R A, P2 R A, P2 W A, P1 W A, P3 R A — প্রতিটি ধাপের অবস্থা আর bus transaction লিখুন। E অবস্থা কেন? — ১০ নম্বর (কঠিন)

সংজ্ঞা: একই ঠিকানার কপি কয়েকটি private cache-এ থাকলে একটি core লিখলে অন্যরা পুরোনো (stale) মান পড়তে পারে। Cache coherence নিশ্চিত করে: প্রতিটি ঠিকানার লেখা সবাই একই ক্রমে দেখে — একসাথে একজন লেখক অথবা অনেক পাঠক (SWMR).

চার অবস্থা: M (Modified — শুধু এখানে, ময়লা, মেমরি পুরোনো), E (Exclusive — শুধু এখানে, পরিষ্কার), S (Shared — কয়েকজনের কাছে, পরিষ্কার), I (Invalid). Bus-এ BusRd (পড়তে চাই), BusRdX (লিখতে চাই — সবাই বাতিল), BusUpgr (S থেকে লিখতে — শুধু বাতিল, ডেটা লাগে না), আর M-এর মালিকের Flush.

ধাপঘটনাP1P2P3Busডেটা এল
১P1 R AEIIBusRdমেমরি (কেউ shared বলেনি)
২P2 R ASSIBusRdমেমরি (P1-এর কপি পরিষ্কার)
৩P2 W AIMIBusUpgrনিজের cache
৪P1 W AMIIBusRdXP2-এর Flush
৫P3 R ASISBusRdP1-এর Flush (মেমরিও হালনাগাদ)

E কেন: অন্য কারও কপি না থাকলে পড়া line E-তে আসে; পরে লিখলে bus ছাড়াই নিঃশব্দে M. ব্যক্তিগত ডেটা পড়ে-লেখার কাজে (a[i] = a[i] + 1) প্রতি line-এ একটি BusUpgr বাঁচে — MSI-তে ২টি transaction, MESI-তে ১টি।

উপসংহার: snooping অনেক core-এ স্কেল করে না — প্রতিটি miss broadcast; বড় সিস্টেমে directory শুধু কপি-ধারীদের বার্তা পাঠায়। Coherence একটি ঠিকানার প্রশ্ন; ভিন্ন ঠিকানার ক্রম হলো consistency (x86-এর TSO, RISC-V-এর RVWMO).

নম্বর কোথায়: সমস্যা ও SWMR (২), চার অবস্থা ও bus বার্তা (৩), trace (৩), E-এর লাভ (১), উপসংহার (১)। পর্ব ৫৩

ঙ-০৩Flynn-এর শ্রেণিবিভাগ উদাহরণসহ লিখুন। UMA আর NUMA কী? ৯৫% সমান্তরাল একটি প্রোগ্রামে ৬৪টি প্রসেসরে Amdahl আর Gustafson (৬৪-প্রসেসরের run-এ serial অংশ ৫%) অনুযায়ী speedup কত? — ৮ নম্বর (মাঝারি)

সংজ্ঞা: Flynn instruction আর ডেটার ধারা গোনে: SISD (সাধারণ scalar CPU), SIMD (SSE/AVX, vector unit, GPU-র ধারণা), MISD (প্রায় নেই — তাত্ত্বিক বা ত্রুটি-সহনশীল বিশেষ সিস্টেম), MIMD (multicore, cluster).

UMA বনাম NUMA: UMA-তে সব মেমরি সব প্রসেসর থেকে সমান দূরে (ছোট SMP); NUMA-তে প্রতিটি node-এর কাছের মেমরি দ্রুত, অন্য node-এর ধীর — address space তবু একটি; তাই ডেটা কোথায় বরাদ্দ হলো (first-touch) পারফরম্যান্স ঠিক করে।

হিসাব: Amdahl: ১ ÷ (০.০৫ + ০.৯৫ ÷ ৬৪) ≈ ১৫.৪২ (সীমা ১ ÷ ০.০৫ = ২০)। Gustafson: ০.০৫ + ০.৯৫ × ৬৪ = ৬০.৮৫. পার্থক্যের কারণ — Amdahl কাজ স্থির রাখে (strong scaling), Gustafson কাজ N-এর সাথে বাড়ায় (weak scaling).

উপসংহার: একই সংখ্যা দুই প্রশ্নের উত্তর — “একই কাজ কত দ্রুত?” বনাম “একই সময়ে কত বড় কাজ?”

নম্বর কোথায়: Flynn (২), UMA–NUMA (২), দুই সূত্র ও মান (৩), ব্যাখ্যা (১)। পর্ব ৫৪ · পর্ব ০৩

ঙ-০৪GPU-র SIMT মডেল কী? Branch divergence উদাহরণসহ ব্যাখ্যা করুন: ৩২ thread-এর একটি warp-এ ২৪টি if-পথে আর ৮টি else-পথে যায়, প্রতিটি পথ ১০টি instruction — SIMD efficiency কত? Memory coalescing কেন জরুরি? — ৬ নম্বর (মাঝারি)

সংজ্ঞা: SIMT-এ প্রোগ্রামার প্রতিটি thread-এর কোড আলাদা করে লেখেন, hardware ৩২টি thread-কে (NVIDIA-র warp) এক instruction-এ একসাথে চালায়; কোন lane সক্রিয় তার mask hardware সামলায়।

Divergence: warp-এর thread-রা ভিন্ন পথে গেলে পথগুলো পালা করে চলে, বাকি lane বসে থাকে। Issue = ১০ + ১০ = ২০টি instruction; সক্রিয় lane-slot = ২৪ × ১০ + ৮ × ১০ = ৩২০; মোট slot = ২০ × ৩২ = ৬৪০ → efficiency = ৫০%.

Coalescing: পাশাপাশি thread পাশাপাশি ঠিকানা পড়লে warp-এর load এক-দুটি memory transaction-এ হয়; stride বড় হলে ৩২টি পর্যন্ত — bandwidth নষ্ট।

নম্বর কোথায়: SIMT (২), divergence ও হিসাব (৩), coalescing (১)। পর্ব ৫৫

৭ · তুলনা আর প্রমাণ — যা হুবহু লিখতে পারা চাই

“পার্থক্য লিখুন” প্রশ্নে পরীক্ষক একই মাপকাঠির সারি খোঁজেন — বাঁ কলামে মাপকাঠি, তারপর দুই (বা তিন) পক্ষ, আর শেষ সারিতে “কোথায় কোনটি”। প্রতিটি টেবিলের নিচে ফিরে দেখার পর্ব লেখা। টেবিলের পরে এক বাক্যের উপসংহার দিতে ভুলবেন না।

(১) RISC বনাম CISC

মাপকাঠিRISCCISC
Instruction-এর দৈর্ঘ্যস্থির (যেমন ৩২ বিট)পরিবর্তনশীল (x86-এ ১–১৫ byte)
মেমরি ছোঁয়াশুধু load আর storeপ্রায় যেকোনো instruction-এ memory operand
Registerঅনেক (৩২টি সাধারণ)কম (8086-এ ৮টি, x86-64-এ ১৬টি)
Addressing modeকম, সরলঅনেক, জটিল
Controlসাধারণত hardwiredঐতিহাসিকভাবে microcode
কাজের ভারcompiler-এর ওপর বেশিhardware-এর ওপর বেশি
উদাহরণRISC-V, ARM, MIPSx86, VAX

উপসংহার: আজ দুই দিক মিলেছে — x86 core ভেতরে জটিল instruction-কে RISC-ধাঁচের micro-op-এ ভাঙে, আর ARM/RISC-V-এ compressed instruction আর জটিল extension এসেছে। পর্ব ২৫ · পর্ব ০২

(২) Hardwired বনাম microprogrammed control

মাপকাঠিHardwiredMicroprogrammed
গঠনgate বা PLA-র FSM — signal সরাসরি logic থেকেcontrol store (ROM)-এ microinstruction-এর ক্রম, micro-PC দিয়ে পড়া
গতিদ্রুতপ্রতি cycle-এ ROM পড়ার delay — সাধারণত একটু ধীর
বদল ও ভুল সংশোধনকঠিন — নতুন circuitসহজ — ROM-এর বিষয়বস্তু বদল; লেখা যায় এমন store হলে বাজারে আসার পরেও (microcode update)
Instruction বাড়লেlogic জটিল হয়নিয়মিত কাঠামো; নতুন instruction = কয়েকটি নতুন লাইন
কোথায় মানায়RISC, pipeline, সরল instructionCISC — শত শত instruction, নানা দৈর্ঘ্য
উদাহরণবেশিরভাগ RISC-V ও ARM coreIBM System/360-এর বেশিরভাগ মডেল, VAX; আজকের x86-এর জটিল instruction

উপসংহার: horizontal microcode চওড়া কিন্তু decode-হীন আর দ্রুত; vertical microcode সরু কিন্তু decoder লাগে। পর্ব ৩৩ · পর্ব ৩৪

(৩) SRAM বনাম DRAM

মাপকাঠিSRAMDRAM
Cell৬টি transistor (6T) — দুটি cross-coupled inverter১টি transistor + ১টি capacitor (1T1C)
মান ধরে রাখাবিদ্যুৎ থাকা পর্যন্ত — refresh নেইচার্জ চুঁইয়ে পড়ে — নিয়মিত refresh (DDR4-এ সাধারণত ৬৪ ms)
পড়াঅধ্বংসাত্মকধ্বংসাত্মক — sense amplifier আবার লেখে
গতিদ্রুত (কয়েক cycle)ধীর (কয়েক দশ ns)
ঘনত্ব ও দামকম ঘন, প্রতি বিটে দামিঅনেক ঘন, প্রতি বিটে সস্তা
ব্যবহারcache, register filemain memory (DDR, LPDDR, GDDR, HBM)

উপসংহার: মেমরি হায়ারার্কির পুরো যুক্তিই এই টেবিলে — দ্রুত জিনিস ছোট আর দামি, বড় জিনিস ধীর আর সস্তা। পর্ব ৪৯ · পর্ব ৪৪

(৪) Direct-mapped বনাম set-associative cache

মাপকাঠিDirect-mappedN-way set-associative
একটি block কোথায় বসতে পারেঠিক একটি line-এ (index দিয়ে)একটি set-এর N টি way-এর যেকোনোটিতে
Tag comparator১টিN টি, একসাথে
Hit timeসবচেয়ে কম — data আগেভাগে পড়া যায়বেশি — তুলনার পর way-বাছাইয়ের mux
Conflict missবেশিকম (N বাড়লে আরও কম)
Replacement policyলাগে নালাগে — LRU, pseudo-LRU, random
ঠিকানার ভাগ (একই আকারে)index বেশি, tag কমway দ্বিগুণে index ১ বিট কম, tag ১ বিট বেশি

উপসংহার: fully associative হলো চরম রূপ (একটিই set) — TLB-এর মতো ছোট কাঠামোয় চলে; বড় L1-এ সাধারণত 4–12-way. পর্ব ৪৫ · পর্ব ৪৬

(৫) Write-through বনাম write-back

মাপকাঠিWrite-throughWrite-back
Store-এ কী হয়cache আর নিচের স্তর দুটোতেই লেখাশুধু cache-এ; dirty bit = ১
নিচের স্তরে লেখাপ্রতিটি store-এ (write buffer অপেক্ষা লুকায়)শুধু dirty block সরানোর সময়, একবার
Bandwidthবেশি — একই word বারবার লিখলেও প্রতিবারকম — ৬৪টি store-এর লুপে write-through ২৫৬ byte, write-back ১৬ byte (পর্ব ৪৭-এর উদাহরণ)
নিচের স্তরের মানসবসময় হালনাগাদপুরোনো থাকতে পারে — coherence-এ সাবধান
সাধারণ জুটিno-write-allocatewrite-allocate

উপসংহার: আধুনিক L1/L2 সাধারণত write-back; write-through কিছু ছোট বা বিশেষ cache-এ, যেখানে সরলতা বা নির্ভরযোগ্যতা জরুরি। পর্ব ৪৭

(৬) Polling বনাম interrupt বনাম DMA

মাপকাঠিPolling (programmed I/O)Interrupt-drivenDMA
কে খবর নেয়CPU বারবার status পড়েdevice সংকেত দেয়device/DMA controller নিজে transfer করে, শেষে interrupt
CPU-র খরচস্থির — ঘটনা না থাকলেওপ্রতি ঘটনায় (handler, context)প্রতি transfer-এ, প্রতি byte-এ নয়
Latencyগড়ে poll-বিরতির অর্ধেকinterrupt latencyবড় block-এর জন্য সেরা throughput
কখন ভালোখুব ঘন ঘটনা, অতি কম latencyবিরল, অনিয়মিত ঘটনাdisk, network, GPU-র বড় ডেটা
ঝুঁকিCPU অপচয়ঘন ঘটনায় interrupt storm, livelockcache coherence আর ভুল ঠিকানায় DMA — IOMMU লাগে

উপসংহার: crossover হার r* = Cpoll ÷ (P × Cirq); আধুনিক driver তিনটিই মেশায় (NAPI, interrupt coalescing). পর্ব ৫২ · পর্ব ৫১

(৭) SMT বনাম multicore

মাপকাঠিSMT (একটি core, কয়েকটি hardware thread)Multicore (কয়েকটি পূর্ণ core)
কী আলাদাশুধু PC, architectural register বা rename map, কিছু control registerপুরো pipeline, execution unit, সাধারণত private L1/L2
কী ভাগ করাexecution unit, issue slot, cache, TLB, predictorশেষ স্তরের cache, মেমরি controller, interconnect
লাভখালি issue slot ভরে — vertical আর horizontal দুই waste-ই কমায়প্রায় core-সংখ্যার অনুপাতে throughput (সমান্তরাল কাজে)
একক thread-এsibling-এর সাথে ভাগাভাগিতে ধীর হতে পারেনিজের core-এ পূর্ণ গতি
খরচcore-এর আয়তনে সামান্য বাড়তিপ্রতি core-এ পূর্ণ আয়তন আর power
OS কী দেখেপ্রতিটি hardware thread একটি logical CPUপ্রতিটি core একটি (বা SMT থাকলে কয়েকটি) logical CPU

উপসংহার: দুটি একসাথে চলে — আজকের অনেক desktop আর server chip-এ প্রতিটি core-এ ২টি hardware thread; cloud-এর একটি vCPU প্রায়ই একটি hardware thread. পর্ব ৪৩ · পর্ব ৫৩

(৮) UMA বনাম NUMA

মাপকাঠিUMANUMA
মেমরির দূরত্বসব প্রসেসর থেকে সমাননিজের node-এর মেমরি কাছে (দ্রুত), অন্যের দূরে (ধীর)
Address spaceএকটিএকটি — তবু ভৌতভাবে ভাগ করা
স্কেলঅল্প কয়েকটি প্রসেসর — একটি bus বা crossbar-এ ভিড়অনেক socket/node-এ স্কেল করে
Coherenceসাধারণত snoopingসাধারণত directory (ccNUMA)
প্রোগ্রামারের দায়কমডেটা কোথায় বরাদ্দ (first-touch), thread কোথায় চলে — দুটিই পারফরম্যান্স ঠিক করে

উপসংহার: আজকের বহু-socket server প্রায় সবই NUMA; এক socket-এর ভেতরেও বড় chip-এ NUMA-র মতো আচরণ দেখা যায়। পর্ব ৫৪

তিনটি প্রমাণ — অনুমান থেকে সীমা পর্যন্ত

প্র-০১k ধাপের pipeline-এ n টি instruction-এর speedup-এর সূত্র প্রমাণ করুন, আর দেখান speedup কেন k-এর বেশি হতে পারে না। — ৫ নম্বর (মাঝারি)

অনুমান: k টি সমান ধাপ, প্রতিটি τ সময়; register overhead আর hazard নেই; pipeline-হীন যন্ত্রে একটি instruction-এ kτ.

ধাপ ১: pipeline-হীন সময় = n·kτ. ধাপ ২: pipeline-এ প্রথম instruction k cycle-এ বের হয় (ভরাট হওয়া), তারপর প্রতি cycle-এ একটি করে — বাকি n − ১টির জন্য n − ১ cycle; মোট (k + n − ১)τ. ধাপ ৩: S = n·kτ ÷ (k + n − ১)τ = nk ÷ (k + n − ১).

সীমা: লবকে n দিয়ে ভাগ করলে S = k ÷ (১ + (k − ১)/n). n → ∞ হলে (k − ১)/n → ০, S → k; আর যেকোনো সসীম n-এ হর ১-এর বেশি (k > ১), তাই S < k. বাস্তবে ধাপ অসম আর overhead থাকায় সীমা = Tsingle ÷ Tstage (পর্ব ৩৫-এর সংখ্যায় ৮২০ ÷ ২২০ ≈ ৩.৭৩), আর hazard থাকলে S = ideal ÷ (১ + প্রতি instruction-এ stall).

পর্ব ৩৫

প্র-০২AMAT-এর সূত্র প্রমাণ করুন, আর দুই স্তরের cache-এ সেটি কীভাবে বাড়ে দেখান। Local আর global miss rate-এর সম্পর্ক লিখুন। — ৫ নম্বর (মাঝারি)

অনুমান: প্রতিটি access আগে L1 দেখে (hit time HT, hit বা miss যাই হোক খরচ হয়); miss হলে বাড়তি MP সময় লাগে।

প্রমাণ: গড় সময় = (hit-এর ভাগ) × HT + (miss-এর ভাগ) × (HT + MP) = (১ − MR)·HT + MR·(HT + MP) = HT + MR × MP. ∎

দুই স্তর: L1-এর miss penalty নিজেই L2-এর গড় সময়: MPL1 = HTL2 + MRL2 × MPL2, তাই AMAT = HTL1 + MRL1 × (HTL2 + MRL2 × MPL2) — এখানে MRL2 local (L2-এ পৌঁছানো access-এর ভাগ)। Global miss rateL2 = MRL1 × MRL2(local) (সংখ্যার উদাহরণ ঘ-০৩-এ)।

সাবধান: local-এর জায়গায় global বসালে ভুল — L2-এর local miss rate প্রায়ই বড় দেখায় (২০–৫০%), কারণ সহজ access-গুলো L1-ই মিটিয়ে দেয়।

পর্ব ৪৭

প্র-০৩Amdahl-এর সূত্র প্রমাণ করুন আর সীমা বের করুন। Gustafson-এর সূত্র কোন অনুমান বদলায়? — ৫ নম্বর (মাঝারি)

অনুমান: পুরোনো execution time = ১; তার f ভগ্নাংশ s গুণ দ্রুত করা যায়, বাকি (১ − f) অপরিবর্তিত।

প্রমাণ: নতুন সময় = (১ − f) + f/s. Speedup = ১ ÷ ((১ − f) + f/s). s → ∞ হলে f/s → ০, তাই সীমা ১ ÷ (১ − f); যেকোনো সসীম s-এ f/s > ০, তাই speedup সীমা ছোঁয় না। f = ০.৮, s = ৪-এ ১ ÷ (০.২ + ০.২) = ২.৫, সীমা ৫. Multicore রূপ (s = N): ১ ÷ ((১ − f) + f/N).

Gustafson: Amdahl কাজ স্থির রাখে; Gustafson ধরে N টি প্রসেসরে সমান্তরাল অংশের কাজও N গুণ হয়, আর serial অংশ s (নতুন সময়ের ভগ্নাংশ) স্থির — তাই scaled speedup = s + (১ − s)N.

পর্ব ০৩ · পর্ব ৫৪

তিনটি প্রমাণের সংখ্যা এক জায়গায় মেলাতে নিচের ছোট calculator — প্রশ্নের মান বদলে নিজের প্রশ্নও যাচাই করতে পারেন:

// Three derivations an examiner asks you to reproduce, checked with the numbers on this page.
const r = (x, d = 3) => Number(x.toFixed(d));
// 1) Pipeline: k equal stages, n instructions, no hazards -> S = n*k / (k + n - 1)
const S = (n, k) => n * k / (k + n - 1);
for (const n of [1, 5, 100, 1e6]) console.log(`pipeline k=5 n=${n}: S = ${r(S(n, 5))}`);
// unequal stages 200/100/200/200/100 ps + 20 ps register overhead
const st = [200, 100, 200, 200, 100], reg = 20;
const Tp = Math.max(...st) + reg, Ts = st.reduce((a, b) => a + b, 0) + reg;
console.log(`Tstage = ${Tp} ps, single-cycle Tc = ${Ts} ps, limit = ${r(Ts / Tp)}`);
// 2) AMAT = HT + MR x MP ; two levels: MP_L1 = HT_L2 + localMR_L2 x MP_mem
const amat1 = (ht, mr, mp) => ht + mr * mp;
console.log(`AMAT one level  (2, 4%, 100) = ${r(amat1(2, 0.04, 100))} cycles`);
const l1 = amat1(1, 0.05, amat1(10, 0.20, 100));
console.log(`AMAT two levels (1, 5%; 10, 20%; 100) = ${r(l1)} cycles, global L2 MR = ${r(0.05 * 0.20)}`);
// 3) Amdahl: 1 / ((1-f) + f/s), limit 1/(1-f); Gustafson: s + (1-s)N
const am = (f, s) => 1 / ((1 - f) + f / s);
console.log(`Amdahl f=0.8 s=4: ${r(am(0.8, 4))}, limit ${r(1 / 0.2)}`);
for (const N of [16, 64]) console.log(`Amdahl f=0.95 N=${N}: ${r(am(0.95, N))}  Gustafson: ${r(0.05 + 0.95 * N)}`);
console.log(`Amdahl f=0.95 N->inf: ${r(1 / 0.05)}`);

আসল রানের আউটপুট:

pipeline k=5 n=1: S = 1
pipeline k=5 n=5: S = 2.778
pipeline k=5 n=100: S = 4.808
pipeline k=5 n=1000000: S = 5
Tstage = 220 ps, single-cycle Tc = 820 ps, limit = 3.727
AMAT one level  (2, 4%, 100) = 6 cycles
AMAT two levels (1, 5%; 10, 20%; 100) = 2.5 cycles, global L2 MR = 0.01
Amdahl f=0.8 s=4: 2.5, limit 5
Amdahl f=0.95 N=16: 9.143  Gustafson: 15.25
Amdahl f=0.95 N=64: 15.422  Gustafson: 60.85
Amdahl f=0.95 N->inf: 20

প্রথম চার লাইন প্র-০১-এর সীমার প্রমাণ সংখ্যায় দেখায়: n = ১-এ কোনো লাভ নেই (একটি instruction-এর latency একই), n = ৫-এ মাত্র ২.৭৮, আর n = ১০৬-এ ৫-এর এত কাছে যে তিন দশমিকে ৫ দেখায় — কিন্তু আসলে একটু কম। পঞ্চম লাইন অসম ধাপের বাস্তব সীমা ৩.৭২৭. AMAT-এর দুই লাইন পর্ব ৪৪-এর ৬ cycle আর ঘ-০৩-এর ২.৫ cycle মেলায়। শেষ তিন লাইনে Amdahl আর Gustafson-এর ফারাক — ৬৪ প্রসেসরে ১৫.৪২ বনাম ৬০.৮৫ — একই “৯৫% সমান্তরাল” দুই ভিন্ন প্রশ্নের উত্তর।

৮ · ভাইভা — মুখে উত্তরের কৌশল, নমুনা ভাইভা আর মডিউলভিত্তিক কুইকফায়ার

ভাইভায় পরীক্ষক আপনার উত্তর শুনেই পরের প্রশ্ন বানান (follow-up প্রশ্ন); তাই প্রথম উত্তর এমনভাবে দিন, যাতে পরের প্রশ্ন আপনার চেনা পথে আসে।

তিন বাক্যের কাঠামো

কী (এক বাক্যের সংজ্ঞা) → কেন বা কীভাবে (কারণ বা ছোট উদাহরণ) → সীমা বা বাস্তব প্রয়োগ

“TLB কী?” — “সাম্প্রতিক virtual-থেকে-physical page অনুবাদের ছোট cache (কী)। প্রতিটি load-store-এ page table walk এড়াতে MMU আগে TLB দেখে; hit হলে সাধারণত এক cycle-এর মধ্যেই অনুবাদ (কীভাবে)। Context switch-এ ASID না থাকলে মুছতে হয়, তাই ASID বা PCID রাখা হয় (সীমা)।” তৃতীয় বাক্যই পরের প্রশ্নের দরজা খোলে।

তিনটি অভ্যাস যা নম্বর এনে দেয়

  • জোরে ভাবুন: সংখ্যার প্রশ্নে পথটি মুখে বলুন — “৩২ byte block মানে ৫ বিট offset, ২,০৪৮ line মানে ১১ বিট index, বাকি ১৬ tag”. পথ ঠিক থাকলে ছোট ভুলেও নম্বর থাকে।
  • ছবি আঁকুন: বোর্ড বা কাগজ পেলে তিন সারির pipeline diagram বা চার ঘরের ২-বিট counter — দশ বাক্যের কাজ এক ছবিতে।
  • স্তর বলুন: “এটি ISA-র বিষয়, microarchitecture-এর নয় — কারণ বদলালে প্রোগ্রামের ফল বদলায়” — স্তরের নাম বললে উত্তর নির্ভুল আর গোছানো শোনায়।

যে প্রশ্নের উত্তর জানেন না — সৎভাবে সামলানো

  1. স্বীকার করুন: “পুরো নিশ্চিত নই” বলা দুর্বলতা নয়; ভুল কথা জোর দিয়ে বললে বাকি উত্তরেও সন্দেহ জাগে।
  2. যা জানেন সেখান থেকে যুক্তি দিন: “TAGE-এর ভেতরের গঠন মনে নেই, তবে এটি কয়েকটি ভিন্ন দৈর্ঘ্যের global history দেখে — লম্বা pattern ধরতে।”
  3. বানাবেন না: chip-এর cache-এর আকার, core-সংখ্যা বা বছর মনে না থাকলে তা বলুন, আর যাচাইয়ের পথ (datasheet, ISA manual, lscpu) জানান।

একটি নমুনা ভাইভা — follow-up কীভাবে গভীরে নামে

নিচে একটি কাল্পনিক ভাইভার ছয়টি ধাপ, cache দিয়ে শুরু। প্রতিটি উত্তরের শেষ বাক্য লক্ষ করুন — পরের প্রশ্ন সেখান থেকেই আসছে।

প্রতিটি প্রশ্ন-উত্তরের পর
পরীক্ষক
প্রার্থী (মূল কথা)
কেন ভালো উত্তর
জোড়া পর্ব
  1. শুরুর প্রশ্ন। দুই রকম locality আর শেষে AMAT-এর সূত্র।
  2. ফাঁদের প্রশ্ন। “হ্যাঁ” বললে ভুল; সঠিক উত্তর “না” দিয়ে শুরু, তারপর দুটি কারণ।
  3. সমাধান আর দাম। associativity-র সাথে comparator আর hit time-এর দাম।
  4. মডিউল বদল। private cache থেকে coherence — প্রস্তুত বিষয়ে টেনে আনা।
  5. গভীরে এক ধাপ। E-এর লাভ এক লাইনে: একটি BusUpgr বাঁচে।
  6. শেষ ধাপ। cache line, coherence আর কোড এক উত্তরে, সমাধানের নির্দিষ্ট নামসহ।

নিজে নিজে মক ভাইভা — seed দিয়ে প্রশ্ন বাছাই

বন্ধুর সাথে অনুশীলনে এই ছোট প্রোগ্রামটি নিচের প্রশ্নব্যাংক থেকে ছয়টি ভিন্ন মডিউলের একটি করে প্রশ্নের নম্বর বাছে। একই seed দিলে দুজনের কাছে একই তালিকা আসে; seed বদলালে নতুন সেট:

// Mock viva: one random question from 6 different modules of this page's viva bank.
// Same SEED -> same set (practise with a friend); change SEED for a new set.
const SEED = 2026;
const bank = [ // [module, first, last] viva numbers (V-..)
  ["M1 foundations", 1, 4], ["M2 combinational", 5, 10], ["M3 sequential", 11, 14],
  ["M4 arithmetic", 15, 19], ["M5 ISA", 20, 23], ["M6 processor", 24, 30],
  ["M7 advanced CPU", 31, 35], ["M8 memory", 36, 42], ["M9 I/O + parallel", 43, 48]];
function mulberry32(a) {           // small, well-known seeded generator
  return () => {
    a = (a + 0x6D2B79F5) | 0;
    let t = Math.imul(a ^ (a >>> 15), 1 | a);
    t = (t + Math.imul(t ^ (t >>> 7), 61 | t)) ^ t;
    return ((t ^ (t >>> 14)) >>> 0) / 4294967296;
  };
}
const rnd = mulberry32(SEED);
const two = n => String(n).padStart(2, "0");
const picked = bank.map(m => [rnd(), m]).sort((a, b) => a[0] - b[0]).slice(0, 6)
                   .map(x => x[1]).sort((a, b) => a[1] - b[1]);   // keep course order
console.log("Seed " + SEED + " - mock viva, about 12 minutes:");
picked.forEach(([name, lo, hi], i) => {
  const q = lo + Math.floor(rnd() * (hi - lo + 1));
  console.log((i + 1) + ". V-" + two(q) + "  (" + name + ")  answer in 3 sentences, ~90 s");
});
console.log("Then the examiner picks one answer and asks 'why?' twice.");

আসল রানের আউটপুট:

Seed 2026 - mock viva, about 12 minutes:
1. V-01  (M1 foundations)  answer in 3 sentences, ~90 s
2. V-05  (M2 combinational)  answer in 3 sentences, ~90 s
3. V-18  (M4 arithmetic)  answer in 3 sentences, ~90 s
4. V-21  (M5 ISA)  answer in 3 sentences, ~90 s
5. V-24  (M6 processor)  answer in 3 sentences, ~90 s
6. V-44  (M9 I/O + parallel)  answer in 3 sentences, ~90 s
Then the examiner picks one answer and asks 'why?' twice.

V-01 মানে নিচের ভ-০১ (architecture বনাম organization), V-05 ভ-০৫ (universal gate), V-18 ভ-১৮ (guard, round, sticky), V-21 ভ-২১ (x0 register), V-24 ভ-২৪ (আলাদা instruction ও data memory) আর V-44 ভ-৪৪ (level বনাম edge-triggered interrupt). seed ২০২৬-এ মডিউল ৩, ৭ আর ৮ বাদ পড়েছে। প্রতিটি উত্তর জোরে বলুন, ৯০ সেকেন্ডের মধ্যে, তারপর কার্ড খুলে মেলান।

ভাইভা কুইকফায়ার — দ্রুত প্রশ্ন, ছোট উত্তর

জোরে উত্তর বলুন, তারপর প্রশ্নে চেপে মেলান — প্রতিটিতে ৩০–৬০ সেকেন্ডের বেশি নয়। “পরের প্রশ্ন” লাইনে পরীক্ষক সম্ভবত যা জিজ্ঞেস করবেন, আর তার এক লাইনের উত্তর।

মডিউল ১ — ভিত্তি (পর্ব ০১–০৬)

ভ-০১Computer architecture আর computer organization-এর পার্থক্য কী? (সহজ)

Architecture হলো প্রোগ্রামারের চোখে দৃশ্যমান অংশ — ISA: instruction, register, addressing, মেমরি মডেল। Organization বা microarchitecture হলো সেগুলো hardware-এ কীভাবে বানানো — pipeline, cache, control signal. একই ISA-র বহু ভিন্ন বাস্তবায়ন হয় (একই x86-64-এর নানা কোম্পানির chip).
পরের প্রশ্ন: cache-এর আকার কোনটির বিষয়? — organization-এর; বদলালে প্রোগ্রাম শুধু দ্রুত বা ধীর হয়, ফল বদলায় না। পর্ব ০১

ভ-০২von Neumann bottleneck কী? (সহজ)

CPU আর মেমরির মাঝের একটি পথ দিয়ে instruction আর ডেটা দুটোই আসে, আর মেমরি CPU-র চেয়ে অনেক ধীর — তাই CPU অপেক্ষায় বসে থাকে। Cache, আলাদা I/D cache, prefetching আর চওড়া bus দিয়ে কমানো হয়।
পরের প্রশ্ন: memory wall কী? — CPU আর DRAM-এর গতির ফারাক বছরে বছরে বাড়তে থাকার সমস্যা। পর্ব ০১ · পর্ব ০২

ভ-০৩Amdahl-এর সূত্র এক লাইনে বলুন। (সহজ)

যে অংশ দ্রুত হয়নি, সেটিই সীমা: speedup = ১ ÷ ((১ − f) + f/s), সর্বোচ্চ ১ ÷ (১ − f). ৯৫% সমান্তরাল হলে হাজার core-এও ২০ গুণের বেশি নয়।
পরের প্রশ্ন: তাহলে supercomputer কেন লাখো core নেয়? — সমস্যাও বড় হয় (Gustafson), serial অংশের ভাগ কমে। পর্ব ০৩

ভ-০৪0x12345678 little-endian মেশিনে ঠিকানা A থেকে কীভাবে বসে? (সহজ)

সবচেয়ে কম গুরুত্বের byte আগে: A: 78, A+1: 56, A+2: 34, A+3: 12. Big-endian-এ উল্টো — 12 আগে। x86 আর সাধারণত চলা ARM ও RISC-V little-endian; network byte order big-endian.
পরের প্রশ্ন: C-তে কীভাবে জানবেন? — একটি uint32_t = 1-এর প্রথম byte memcpy বা unsigned char দিয়ে পড়ুন; ১ হলে little-endian. পর্ব ০৬

মডিউল ২ — Combinational লজিক (পর্ব ০৭–১৪)

ভ-০৫NAND-কে universal gate বলা হয় কেন? (সহজ)

শুধু NAND দিয়েই NOT (A NAND A), AND (NAND-এর পরে NOT) আর OR (দুই ইনপুট উল্টে NAND) বানানো যায়, আর {AND, OR, NOT} দিয়ে যেকোনো function হয়। NOR-ও একইভাবে universal.
পরের প্রশ্ন: শুধু NAND-এ XOR-এ কমপক্ষে কয়টি? — ৪টি। পর্ব ০৮

ভ-০৬K-map-এ কলাম 00, 01, 11, 10 ক্রমে কেন? (সহজ)

Gray ক্রম — পাশাপাশি ঘর ঠিক এক চলকে আলাদা, তাই পাশাপাশি দুটি 1 মিলিয়ে XY + XY′ = X লাগানো যায়। প্রথম আর শেষ কলামও পাশাপাশি (map-টি আসলে torus).
পরের প্রশ্ন: দলের আকার কেন ২-এর ঘাত? — k টি চলক অনুপস্থিত হলে term-টি ঠিক ২kটি minterm ঢাকে। পর্ব ০৯

ভ-০৭Don't care কেন সাশ্রয় দেয়, আর ঝুঁকি কী? (মাঝারি)

যে ইনপুট কখনো আসে না (যেমন BCD-তে ১০–১৫), তাকে দরকারমতো ১ ধরে দল বড় করা যায় — literal কমে। ঝুঁকি: “অসম্ভব” ইনপুট সত্যিই এলে (reset-এর গোলমাল, noise) circuit একটি অনিচ্ছাকৃত আউটপুট দেয়।
পরের প্রশ্ন: QM-এর PI chart-এ don't care কলাম থাকে? — না; শুধু জোড়া বানানোর টেবিলে। পর্ব ০৯ · পর্ব ১০

ভ-০৮F = AB′ + BC-তে static hazard কোথায়, সমাধান কী? (মাঝারি)

A = C = ১ রেখে B বদলালে এক পদ নামে, অন্যটি একটু পরে ওঠে — মাঝে ক্ষণিকের ০ (static-1 hazard, glitch). সমাধান consensus পদ AC যোগ: F = AB′ + BC + AC — যুক্তি একই, কিন্তু B-এর বদলে AC ১ ধরে রাখে।
পরের প্রশ্ন: synchronous নকশায় কি এটা সমস্যা? — সাধারণত না; flip-flop শুধু clock ধারে মান নেয়, ততক্ষণে logic স্থির। পর্ব ১০

ভ-০৯Half adder আর full adder-এর পার্থক্য কী? (সহজ)

Half adder দুই বিট যোগ করে: S = A ⊕ B, C = AB. Full adder তিন বিট (ডান থেকে আসা carry সহ): S = A ⊕ B ⊕ Cin, Cout = AB + Cin(A ⊕ B) — majority. দুটি half adder আর একটি OR-এ একটি full adder.
পরের প্রশ্ন: n বিট ripple-এর delay? — cn 2n + 1 gate delay-তে, O(n). পর্ব ১১

ভ-১০Decoder আর demultiplexer-এর সম্পর্ক কী? Priority encoder-এ V output কেন? (মাঝারি)

Enable-সহ decoder-এর enable-এ data দিলেই সেটি demux — প্রতিটি আউটপুট = minterm × data. Priority encoder-এ “কোনো ইনপুট চালু নেই” আর “শুধু I0 চালু” দুটিতেই কোড 0…0; V (valid) ছাড়া আলাদা করা যায় না।
পরের প্রশ্ন: 16:1 mux-এ কয়টি 2:1? — ১৫টি। পর্ব ১২

মডিউল ৩ — Sequential লজিক (পর্ব ১৫–১৯)

ভ-১১Latch আর flip-flop-এর মূল পার্থক্য এক বাক্যে বলুন। (সহজ)

Latch level-sensitive — enable চালু থাকার পুরো সময় স্বচ্ছ; flip-flop edge-triggered — শুধু clock ধারের মুহূর্তের মান নেয়। তাই flip-flop-এর পথে একটি clock cycle-এ ডেটা একটি ধাপই এগোয়।
পরের প্রশ্ন: D flip-flop দিয়ে T flip-flop? — D = T ⊕ Q, একটি XOR. পর্ব ১৫

ভ-১২n বিটের ring আর Johnson counter-এ কয়টি state? (সহজ)

Ring-এ n টি (একটি ১ ঘোরে), Johnson-এ 2n টি (শেষ বিট উল্টে শুরুতে)। ২n-এর বাকিগুলো অব্যবহৃত — সেখানে আটকে না যেতে reset বা self-correcting feedback লাগে।
পরের প্রশ্ন: n বিট LFSR-এর সর্বোচ্চ period? — ২n − ১, শুধু primitive polynomial-এ। পর্ব ১৬

ভ-১৩Verilog-এ blocking (=) আর non-blocking (<=)-এর পার্থক্য কী? (মাঝারি)

= সঙ্গে সঙ্গে বসায় — combinational always @(*)-এ; <= সব ডান দিক আগে পড়ে, block-এর শেষে একসাথে বসায় — clock-চালিত block-এ, যাতে সব flip-flop পুরোনো মান দেখে। a <= b; b <= a; সঠিক অদলবদল, = দিয়ে নয়।
পরের প্রশ্ন: inferred latch কেন আসে? — combinational block-এর কোনো পথে output মান না পেলে; default বা else দিন। পর্ব ১৪ · পর্ব ১৫

ভ-১৪Hold violation clock ধীর করে সারানো যায় না কেন? (কঠিন)

Hold-এর শর্ত tccq + tcd ≥ thold — একই ধারে নতুন ডেটা কত দ্রুত পৌঁছায় তার কথা; এতে Tc নেই। তাই ছোট পথে buffer বসিয়ে tcd বাড়াতে হয়। Setup violation-ই শুধু clock ধীর করে সারে।
পরের প্রশ্ন: clock skew কোন শর্তকে কীভাবে বদলায়? — skew দুটিতেই খরচ হিসেবে যোগ হতে পারে; setup-এ Tc বাড়াতে হয়, hold-এ আরও বেশি tcd লাগে। পর্ব ১৮

মডিউল ৪ — গাণিতিক কাজ (পর্ব ২০–২৪)

ভ-১৫Carry আর overflow-এর পার্থক্য কী? (সহজ)

Carry — unsigned ফল সীমার বাইরে (MSB থেকে carry বেরোল); overflow — signed ফল সীমার বাইরে (V = cn ⊕ cn−1). একই যোগে একটি থাকতে পারে, অন্যটি না — ৮ বিটে ১০০ + ৫০-এ V = ১, C = ০।
পরের প্রশ্ন: RISC-V-তে flag নেই — carry কীভাবে? — যোগের পর sltu: ফল কোনো operand-এর চেয়ে ছোট হলে carry. পর্ব ২০

ভ-১৬n বিট × n বিট গুণে কত বিট লাগে, কেন? (সহজ)

2n বিট। Unsigned-এ সর্বোচ্চ (২n − ১)২ = ২2n − ২n+1 + ১ < ২2n; signed-এ (−২n−১)২ = +২2n−২-এর জন্যও 2n বিট লাগে। RISC-V-তে mul নিচের অর্ধেক, mulh/mulhu ওপরের অর্ধেক দেয়।
পরের প্রশ্ন: Booth-এর worst case? — পালাক্রমের বিট 0101…। পর্ব ২১

ভ-১৭০.১ + ০.২ == ০.৩ কেন মিথ্যা? (সহজ)

০.১, ০.২ আর ০.৩ — তিনটিই binary-তে অসীম পর্যাবৃত্ত, তাই double-এ গোল হয়ে রাখা; যোগফলও গোল হয়, আর ভুলগুলো একই দিকে মেলে না। এটি কোনো ভাষার bug নয় — IEEE 754 double ব্যবহারকারী সব ভাষায় একই। তুলনা করুন সহনসীমা দিয়ে।
পরের প্রশ্ন: টাকার হিসাব? — integer পয়সা বা decimal type, float নয়। পর্ব ২৩

ভ-১৮Floating point যোগে guard, round আর sticky বিট কেন লাগে? (কঠিন)

Exponent মেলাতে ছোট সংখ্যাকে ডানে shift করলে বিট হারায়; G আর R দুটি বাড়তি বিট ধরে রাখে (বিয়োগের পর বাঁয়ে normalise করতে লাগে), আর S বাকি সব হারানো বিটের OR — বলে দেয় ঠিক মাঝামাঝি (tie) নাকি তার একটু ওপরে। তিনটি মিলে correct rounding নিশ্চিত।
পরের প্রশ্ন: IEEE-র ডিফল্ট rounding? — round to nearest, ties to even — দীর্ঘ হিসাবে একদিকে পক্ষপাত থাকে না। পর্ব ২৪

ভ-১৯Restoring আর non-restoring division-এর মূল পার্থক্য কী? (মাঝারি)

Restoring-এ প্রতি ধাপে A:Q বাঁয়ে shift, তারপর A − M; ঋণাত্মক হলে q0 = ০ আর M যোগ করে আগের মান ফেরানো — সবচেয়ে খারাপ ক্ষেত্রে 2n টি যোগ-বিয়োগ। Non-restoring ফেরায় না: A ঋণাত্মক থাকলে পরের ধাপে shift করে M যোগ, কারণ ২(A + M) − M = ২A + M — প্রতি ধাপে একটি কাজ, শেষে দরকারে একটি সংশোধন। ৪ বিটে ৭ ÷ ২: প্রথম দুই ধাপে restore, ভাগফল 0011, ভাগশেষ 0001.
পরের প্রশ্ন: C-তে −৭ / ২ আর −৭ % ২? — −৩ আর −১ (শূন্যের দিকে কাটা); Python-এ −৪ আর ১। পর্ব ২২ · পর্ব ২০

মডিউল ৫ — Instruction set (পর্ব ২৫–৩১)

ভ-২০Load–store architecture কী? (সহজ)

শুধু load আর store মেমরি ছোঁয়; হিসাব সব register-এ — RISC-V, ARM, MIPS. x86 register–memory: add [rbx], eax-এর মতো instruction মেমরিতে সরাসরি হিসাব করে।
পরের প্রশ্ন: stack machine-এ কয়-address instruction? — ০-address; operand stack-এর মাথায়। পর্ব ২৫

ভ-২১RISC-V-এর x0 register-এর বিশেষত্ব কী? (সহজ)

সবসময় ০; লেখা বাতিল হয়। এতে অনেক pseudo-instruction বিনা খরচে হয়: mv = addi rd, rs, 0, nop = addi x0, x0, 0, neg, j, beqz. Hardware-এ rd = ০ হলে write enable বন্ধ।
পরের প্রশ্ন: forwarding-এ এর প্রভাব? — rd ≠ ০ শর্ত লাগে, নইলে x0-এ “লেখা” মান forward হয়ে ভুল করত। পর্ব ২৬

ভ-২২0x12345FFF register-এ কীভাবে আনবেন? (মাঝারি)

lui t0, 0x12346 তারপর addi t0, t0, -1. addi-র ১২ বিট immediate signed, আর নিচের ১২ বিট 0xFFF ≥ 0x800 — sign extension-এ সেটি −১, তাই lui-তে ১ বাড়িয়ে দিতে হয়। Assembler-এর li এটি নিজে করে।
পরের প্রশ্ন: subi নেই কেন? — addi-তে ঋণাত্মক immediate-ই বিয়োগ। পর্ব ২৬

ভ-২৩Caller-saved আর callee-saved register-এর পার্থক্য কী? (মাঝারি)

Caller-saved (t, a) — callee নষ্ট করতে পারে; দরকার হলে caller call-এর আগে সেভ করে। Callee-saved (s, sp) — callee ব্যবহার করলে prologue-এ সেভ আর epilogue-এ ফেরত দেয়। দুই রকম রাখায় leaf function সস্তা থাকে, আর দীর্ঘায়ু মান একবারেই সংরক্ষিত।
পরের প্রশ্ন: jal ra, f 0x400-এ থাকলে ra? — 0x404. পর্ব ৩০

মডিউল ৬ — প্রসেসর নকশা (পর্ব ৩২–৩৮)

ভ-২৪Single-cycle datapath-এ instruction আর data memory আলাদা কেন? (সহজ)

এক cycle-এ প্রতিটি unit একবারই ব্যবহার করা যায়, অথচ lw-কে একই cycle-এ দুবার মেমরি ছুঁতে হয় — instruction আনতে আর ডেটা পড়তে। Multi-cycle-এ একটি মেমরিই চলে, কারণ দুটি কাজ ভিন্ন cycle-এ।
পরের প্রশ্ন: multi-cycle-এ lw কয় cycle? — ৫ (sw আর R-type ৪, beq ৩)। পর্ব ৩২ · পর্ব ৩৪

ভ-২৫Pipelining কি একটি instruction-কে দ্রুত করে? (সহজ)

না — একটি instruction-এর latency একই বা register overhead-এর জন্য একটু বেশি; বাড়ে throughput, প্রতি cycle-এ প্রায় একটি instruction শেষ হয়। লন্ড্রিতে একটি কাপড়ের সময় কমে না, কিন্তু ঘণ্টায় অনেক বেশি কাপড় বের হয়।
পরের প্রশ্ন: k ধাপে n instruction-এ কত cycle? — k + n − ১। পর্ব ৩৫

ভ-২৬Pipeline register-এ কী থাকে, কেন লাগে? (মাঝারি)

প্রতিটি ধাপের ফল (ALU result, পড়া মান), rd-এর নম্বর আর পরের ধাপগুলোর control signal — যাতে পাঁচটি instruction একসাথে চললেও একজনের মান আরেকজন নষ্ট না করে। যেমন WB-তে লেখার rd আসে MEM/WB register থেকে, IF/ID-এর নতুন instruction থেকে নয়।
পরের প্রশ্ন: control signal কোথায় তৈরি হয়? — ID-তে, তারপর ধাপে ধাপে বয়ে যায়। পর্ব ৩৫

ভ-২৭৫ ধাপের in-order pipeline-এ WAR আর WAW কেন hazard নয়? (মাঝারি)

সব instruction register পড়ে একই ধাপে (ID) আর লেখে একই ধাপে (WB), প্রোগ্রামের ক্রমে — তাই পরের instruction-এর লেখা কখনো আগের instruction-এর পড়ার আগে বা আগের লেখার আগে ঘটে না। Out-of-order core-এ এগুলো আসে, renaming দূর করে।
পরের প্রশ্ন: কোনটি true dependence? — RAW. পর্ব ৩৬

ভ-২৮Forwarding-এ double data hazard-এ কোন উৎস জেতে? (কঠিন)

EX/MEM — কারণ সেই instruction প্রোগ্রামে পরে, তাই তার মানটিই সর্বশেষ। add x1,x1,x2; add x1,x1,x3; add x1,x1,x4-এ তৃতীয়টির জন্য দুটি উৎসই x1 দাবি করে; MEM/WB নিলে দ্বিতীয় যোগের অবদান নীরবে হারাত। তাই MEM hazard-এর শর্তে “EX hazard নেই” অংশ থাকে।
পরের প্রশ্ন: rd ≠ ০ শর্ত কেন? — ভ-২১ দেখুন। পর্ব ৩৬

ভ-২৯লুপে ১-বিট predictor দুবার আর ২-বিট একবার ভুল করে কেন? (মাঝারি)

১-বিট লুপ থেকে বেরোনোর N-এ উল্টে যায়, তাই পরের প্রবেশের প্রথম T-তেও ভুল — দুবার। ২-বিট strongly taken (11) থেকে weakly taken (10)-এ নামে, উঁচু বিট তখনো ১ — অনুমান উল্টায় না, তাই শুধু বেরোনোর সময় একবার।
পরের প্রশ্ন: BTB কী বলে? — IF-এই: এটি শাখা কি না, আর target. পর্ব ৩৭

ভ-৩০Interrupt আসার পর CPU প্রথমে কী করে (RISC-V machine mode)? (মাঝারি)

একটি instruction-সীমায় থামে, পরের instruction-এর ঠিকানা mepc-তে, কারণ mcause-এ, interrupt বন্ধ করে (mstatus.MIE = ০, আগের মান MPIE-তে), PC = mtvec — handler শুরু। ফিরতে mret.
পরের প্রশ্ন: vectored mode-এ timer (cause ৭), mtvec = 0x80000001? — 0x80000000 + ৪ × ৭ = 0x8000001C. পর্ব ৩৮

মডিউল ৭ — উন্নত প্রসেসর (পর্ব ৩৯–৪৩)

ভ-৩১Register renaming কোন dependence দূর করে, কোনটি পারে না? (মাঝারি)

WAR আর WAW — name dependence, একই register-নাম পুনর্ব্যবহারের ফল; প্রতিটি লেখাকে নতুন physical register দিলে মিলিয়ে যায়। RAW (true) পারে না — সত্যিকারের ডেটার প্রবাহ।
পরের প্রশ্ন: physical register কখন free? — একই architectural register-এর পরের লেখক commit করলে আগের mapping-এরটি। পর্ব ৪০ · পর্ব ৩৯

ভ-৩২Tomasulo-ই যদি ক্রমের বাইরে চালাতে পারে, ROB কেন লাগে? (কঠিন)

In-order commit-এর জন্য — ফল আগে ROB-এ জমে, মাথা থেকে প্রোগ্রাম-ক্রমে register বা মেমরিতে যায়। তাতে exception precise থাকে, আর ভুল branch-এর পর অনুমাননির্ভর কাজ নির্ভুলভাবে ফেলে দেওয়া যায়।
পরের প্রশ্ন: store কখন মেমরিতে লেখে? — commit-এ; তার আগে store queue-তে, পরের load সেখান থেকে forward পেতে পারে। পর্ব ৪০

ভ-৩৩Spectre এক লাইনে কী, আর প্রতিরক্ষা কী? (মাঝারি)

Predictor-কে ভুল পথে চালিয়ে বৈধ কোডকেই অনুমানের মধ্যে গোপন ডেটা ছোঁয়ানো, তারপর cache-এর সময়-পার্থক্য দিয়ে তা বোঝা — architectural state ফেরে, cache-এর ছাপ ফেরে না। প্রতিরক্ষা: speculation barrier, index masking, retpoline, site isolation, constant-time কোড।
পরের প্রশ্ন: Meltdown-এর প্রধান software প্রতিরক্ষা? — KPTI. পর্ব ৪১

ভ-৩৪২৫৬ বিট SIMD register-এ কয়টি ১৬ বিট lane? (সহজ)

২৫৬ ÷ ১৬ = ১৬টি — একটি instruction-এ ১৬টি যোগ। Saturating যোগে সীমা ছাড়ালে সর্বোচ্চ-সর্বনিম্নে আটকায় (ছবি, অডিও), wrap-এ mod ২n.
পরের প্রশ্ন: compiler float-এর sum += a[i] নিজে vectorize করে না কেন? — যোগের ক্রম বদলাতে হয়, আর float যোগ associative নয়। পর্ব ৪২

ভ-৩৫Fine-grained, coarse-grained আর SMT-এর পার্থক্য কী? (মাঝারি)

Fine — প্রতি cycle-এ thread বদল; coarse — লম্বা stall-এ (যেমন cache miss) বদল, pipeline আবার ভরার দাম; SMT — একই cycle-এ কয়েকটি thread থেকে issue. Fine আর coarse শুধু vertical waste (পুরো খালি cycle) কমায়, SMT horizontal-ও।
পরের প্রশ্ন: SMT কেন একক thread-কে ধীর করতে পারে? — sibling-এর সাথে slot, unit আর cache ভাগ। পর্ব ৪৩

মডিউল ৮ — মেমরি হায়ারার্কি (পর্ব ৪৪–৫০)

ভ-৩৬Temporal আর spatial locality-র উদাহরণ দিন। (সহজ)

Temporal — একই ঠিকানা শিগগির আবার: লুপের counter, sum. Spatial — পাশের ঠিকানা শিগগির: array-র পরপর উপাদান, পরপর instruction. ডেস্কের ওপর আজকের খাতা রাখা temporal; আলমারি থেকে পুরো তাক আনা spatial.
পরের প্রশ্ন: কোন locality-র জন্য block বড় করা হয়? — spatial. পর্ব ৪৪

ভ-৩৭তিন C কী, আর capacity বনাম conflict কীভাবে আলাদা করবেন? (মাঝারি)

Compulsory (প্রথমবার ছোঁয়া), capacity (working set cache-এর চেয়ে বড়), conflict (একই set-এ ভিড়)। একই আকারের fully associative cache-ও miss করলে capacity, না করলে conflict.
পরের প্রশ্ন: কোনটি associativity বাড়িয়ে কমে? — conflict. পর্ব ৪৫

ভ-৩৮Cache-এর আকার একই রেখে way দ্বিগুণ করলে address-এর ভাগে কী হয়? (সহজ)

Set অর্ধেক, index ১ বিট কম, tag ১ বিট বেশি; offset অপরিবর্তিত। ৬৪ KiB/৩২ B-এ direct-mapped ১৬/১১/৫, 2-way ১৭/১০/৫, 4-way ১৮/৯/৫।
পরের প্রশ্ন: VIPT L1-এর আকার কেন সীমিত? — index + offset page offset-এর ভেতরে রাখতে: আকার ≤ way × page size. পর্ব ৪৬

ভ-৩৯8-way cache-এ নিখুঁত LRU কেন কম দেখা যায়? (কঠিন)

৮টি way-এর ৮! = ৪০,৩২০টি ক্রম মনে রাখতে প্রতি set-এ কমপক্ষে ⌈log২ ৮!⌉ = ১৬ বিট, আর প্রতিটি hit-এ জটিল হালনাগাদ। Tree pseudo-LRU ৭ বিটে প্রায় একই কাজ করে।
পরের প্রশ্ন: LRU কখন random-এর চেয়ে খারাপ? — চক্রাকার access-এ, working set way-এর চেয়ে একটু বড় হলে — প্রতিবার miss. পর্ব ৪৬

ভ-৪০Local আর global miss rate-এর পার্থক্য কী? (মাঝারি)

Local — ঐ cache-এ যত access পৌঁছেছে তার কত অংশ miss; global — CPU-র মোট access-এর কত অংশ ঐ স্তরেও miss. GlobalL2 = MRL1 × localL2; ৫% × ২০% = ১%. AMAT-এর সূত্রে local বসে।
পরের প্রশ্ন: L2-এর local miss rate বড় দেখায় কেন? — সহজ access L1-ই মেটায়, L2 পায় শুধু কঠিনগুলো। পর্ব ৪৭

ভ-৪১C-তে 2D array সারি ধরে হাঁটা কেন দ্রুত? (সহজ)

C row-major — একই সারির উপাদান মেমরিতে পাশাপাশি; সারি ধরে হাঁটলে stride ১, একটি cache line-এর সব উপাদানের জন্য একটি miss. কলাম ধরে বড় N-এ প্রতিটি access-এ নতুন line — প্রায় প্রতিবার miss.
পরের প্রশ্ন: matrix গুণে কোন loop-ক্রম ভালো? — ikj বা kij — ভেতরের লুপ j দুটি array-কেই সারি ধরে হাঁটায়। পর্ব ৪৮

ভ-৪২TLB reach কী, আর ASID কেন লাগে? (মাঝারি)

TLB reach = entry-সংখ্যা × page size — TLB একসাথে কতটা মেমরির অনুবাদ ধরে; বাড়াতে বেশি entry বা huge page. ASID ভিন্ন process-এর একই VPN আলাদা রাখে, তাই context switch-এ TLB মুছতে হয় না।
পরের প্রশ্ন: ৬৪ entry × ৪ KiB? — ২৫৬ KiB. পর্ব ৫০

মডিউল ৯ — I/O, সমান্তরালতা আর আধুনিক সিস্টেম (পর্ব ৫১–৫৭)

ভ-৪৩MMIO-র status register পড়তে C-তে volatile কেন লাগে? (মাঝারি)

Compiler জানে না মানটি বাইরে থেকে বদলায়; volatile ছাড়া সে পড়াটি লুপের বাইরে তুলে বা বাদ দিয়ে দিতে পারে — লুপ চিরকাল ঘোরে। volatile প্রতিটি access সত্যিই মেমরিতে করায়, কিন্তু atomicity বা core-এর মধ্যে ক্রম দেয় না — তার জন্য fence.
পরের প্রশ্ন: multithreaded কোডে volatile কি যথেষ্ট? — না; atomic আর memory ordering লাগে। পর্ব ৫১ · পর্ব ৩১

ভ-৪৪Level-triggered আর edge-triggered interrupt-এর পার্থক্য কী? (মাঝারি)

Level — কারণ না মোছা পর্যন্ত লাইন সক্রিয়; একাধিক device একটি লাইন ভাগ করতে পারে, কিন্তু handler কারণ না মুছলে interrupt storm. Edge — একটি বদল একটি ঘটনা; লাইন ভাগ কঠিন, আর অবস্থা হারালে ঘটনা হারাতে পারে।
পরের প্রশ্ন: MSI কী? — device একটি নির্দিষ্ট ঠিকানায় memory write করে interrupt জানায়, আলাদা তার লাগে না। পর্ব ৫২

ভ-৪৫MESI-তে E অবস্থা কী লাভ দেয়? (মাঝারি)

পড়ার সময় অন্য কারও কপি না থাকলে line E-তে আসে — পরিষ্কার, কিন্তু একান্ত। পরে লিখলে bus ছাড়াই M; MSI-তে S থেকে BusUpgr লাগত। ব্যক্তিগত ডেটা পড়ে-লেখার কাজে প্রতি line-এ একটি transaction বাঁচে।
পরের প্রশ্ন: M অবস্থার line অন্য core পড়তে চাইলে? — মালিক Flush করে S-এ নামে। পর্ব ৫৩

ভ-৪৬Coherence আর consistency-র পার্থক্য কী? (কঠিন)

Coherence — একটি ঠিকানার লেখাগুলো সবাই একই ক্রমে দেখে কি না। Consistency — ভিন্ন ঠিকানার access-গুলোর দৃশ্যমান ক্রম। x86 (TSO)-এ store buffer-এর জন্য store-এর পরের ভিন্ন ঠিকানার load আগে চলে যেতে পারে; ARM আর RISC-V (RVWMO) আরও ঢিলা — ক্রম চাইলে fence বা acquire/release.
পরের প্রশ্ন: SB litmus-এ x86-এ r1 = r2 = ০ সম্ভব? — হ্যাঁ; mfence তা থামায়। পর্ব ৫৩

ভ-৪৭False sharing কী, কীভাবে সারাবেন? (মাঝারি)

দুই thread দুটি আলাদা ভ্যারিয়েবলে লেখে, কিন্তু সেগুলো একই cache line-এ — প্রতিটি লেখায় line অন্য core থেকে invalidate হয়ে ping-pong করে। সমাধান: ভ্যারিয়েবলগুলো আলাদা line-এ রাখা (padding, alignas(64)) বা thread-local-এ জমিয়ে শেষে একবার লেখা।
পরের প্রশ্ন: line-এর আকার কত ধরা নিরাপদ? — অনেক সাধারণ CPU-তে ৬৪ byte; নির্দিষ্ট যন্ত্রে মেপে বা sysfs-এ দেখে নিন। পর্ব ৪৮

ভ-৪৮Microcontroller আর microprocessor-এর পার্থক্য কী? (সহজ)

Microcontroller-এ CPU, flash, SRAM আর peripheral (GPIO, ADC, timer, UART) এক chip-এ — ছোট, কম power, নির্দিষ্ট কাজে; microprocessor-এর মেমরি আর বেশিরভাগ I/O chip-এর বাইরে — সাধারণ কাজের কম্পিউটারে।
পরের প্রশ্ন: voltage আর frequency দুটিই ২০% কমালে dynamic power? — P ≈ αCV২f, তাই ০.৮৩ = ০.৫১২ গুণ — প্রায় অর্ধেক; এটিই DVFS-এর যুক্তি। পর্ব ৫৬

৯ · পরীক্ষক যেসব ভুলে নম্বর কাটেন

নিচের ভুলগুলো খাতায় বারবার দেখা যায় — বেশিরভাগই জ্ঞানের অভাব নয়, অসাবধানতা। উত্তর জমা দেওয়ার আগের দশ মিনিটে এই তালিকা ধরে মিলিয়ে নিন।

ভুলসঠিকপর্ব
K-map-এ কলাম 00, 01, 10, 11 ক্রমেGray ক্রম 00, 01, 11, 10; কোণ আর কিনারার দল না ভোলা০৯
K-map-এ ৩ বা ৬টি ঘরের “দল”দল সবসময় ২-এর ঘাত — ১, ২, ৪, ৮, ১৬০৯
Two's complement-এ শুধু বিট উল্টানোউল্টে ১ যোগ — নইলে সেটি one's complement০৫
Overflow-কে carry দিয়ে বিচারsigned-এ V = Cin ⊕ Cout (MSB); carry unsigned-এর জন্য০৫, ২০
NAND-এর বুদবুদ ছাড়া প্রতীক, বা প্রতীকের নাম না লেখাপ্রতিটি gate-এর সঠিক প্রতীক, ইনপুট-আউটপুটের নাম০৮
Timing diagram-এ আউটপুট ধারের সাথে একই মুহূর্তে বদলানোtpcq-এর পরে বদল; setup/hold জানালা চিহ্নিত১৮
“Hold violation সারাতে clock ধীর করুন”hold-এ Tc নেই — ছোট পথে buffer১৮
Booth-এ logical shift (A-এর চিহ্ন হারানো)A:Q:Q−1-এর arithmetic right shift২১
IEEE 754-এ bias যোগ না করা, বা hidden 1-কে fraction-এ লেখাE = e + ১২৭; fraction-এ শুধু বিন্দুর পরের বিট২৩
Control টেবিলে sw/beq-এর MemtoReg-এ ০ বা ১ বসানো, X-এর কারণ না লেখাRegWrite = ০ বলে X — কারণসহ৩৩
Pipeline speedup “৫ ধাপ মানে ৫ গুণ”nk/(k + n − ১), অসম ধাপ আর overhead-এ আরও কম৩৫
Forwarding-এর তীর সময়ের পেছনে (load-use-এ stall ছাড়া)lw-এর পরেই ব্যবহারে ১ bubble, তারপর MEM/WB → EX৩৬
শাখা কোন ধাপে নিষ্পত্তি হয় না বলেই penalty লেখাপ্রথা লিখুন — MEM-এ ৩, EX-এ ২, ID-তে ১ cycle৩৭
Cache-এ KB আর KiB, byte-address আর word-address গুলিয়ে ফেলাপ্রশ্নের প্রথা প্রথম লাইনে লিখুন; offset = log২(block-এর byte)৪৫
Multi-level AMAT-এ global miss rate বসানোসূত্রে local; global = MRL1 × localL2৪৭
Page table-এর আকারে PTE-এর byte ভুলে যাওয়াentry-সংখ্যা × PTE-এর আকার (২২০ × ৪ = ৪ MiB)৫০
Coherence আর consistency এক বলে লেখাএকটি ঠিকানা বনাম ভিন্ন ঠিকানার ক্রম৫৩
Amdahl-এ f-কে “নতুন সময়ের” ভগ্নাংশ ধরাAmdahl-এ f পুরোনো সময়ের; Gustafson-এ s নতুন সময়ের০৩, ৫৪

১০ · AI-কে কড়া পরীক্ষক বানান — আর তার উত্তর যাচাই করুন

AI-কে উত্তরদাতা নয়, পরীক্ষক বানান: নিজে লিখে নম্বর দিতে বলুন, follow-up-এর উত্তর মুখে দিন। তবে এই বিষয়ে AI-এর আত্মবিশ্বাসী ভুল সাধারণ — নিচের টেবিলের ভুলগুলো ছাড়াও two's complement-এর −১২৮-এর মতো প্রান্তিক ক্ষেত্র, pipeline-এর cycle গোনায় এক-বেশি-এক-কম আর synthesize হয় না এমন Verilog.

একটি prompt, যা AI-কে পরীক্ষক বানায় আর নিজের হিসাব দেখাতে বাধ্য করে:

তুমি একজন কড়া কম্পিউটার আর্কিটেকচার ও ডিজিটাল লজিক পরীক্ষক। আমি নিচে একটি প্রশ্ন আর আমার উত্তর দিচ্ছি। ১. প্রথমে প্রশ্নের জন্য একটি নম্বর-ভাগ বানাও (সংজ্ঞা, ব্যাখ্যা, ছবি বা টেবিল, উদাহরণ, উপসংহার — কোন অংশে কত)। ২. আমার উত্তর সেই ভাগ ধরে নম্বর দাও; প্রতিটি কাটা নম্বরের কারণ এক লাইনে। ৩. Numerical হলে নিজের সমাধান ধাপে ধাপে দেখাও — K-map-এ প্রতিটি দলের ঘর, Booth-এ প্রতিটি সারির A, Q, Q-1, cache-এ tag-index-offset-এর বিট গোনা, pipeline-এ cycle ধরে ছক — আর কোন প্রথা ধরেছ (RISC-V না MIPS, শাখা কোন ধাপে নিষ্পত্তি, byte না word address) তা স্পষ্ট লেখো। ৪. কোনো chip-এর spec, বছর বা সংখ্যা বললে নিশ্চিত না হলে "নিশ্চিত নই" লেখো; বানিয়ে বলবে না। ৫. Verilog দিলে বলো সেটি synthesizable কি না, আর একটি testbench-এর রূপরেখা দাও। ৬. শেষে আমাকে তিনটি follow-up ভাইভা প্রশ্ন করো, একটি একটি করে, আমার উত্তরের অপেক্ষা করে। প্রশ্ন: ... আমার উত্তর: ...

আর্কিটেকচার নিয়ে AI-এর উত্তরে যেসব ভুল প্রায়ই থাকে

ভুলফলকীভাবে ধরবেন
K-map-এ কোণের দল বাদ বা অপ্রয়োজনীয় PI রাখাবেশি literal, বা ভুল function (ক-০৫)truth table-এর প্রতিটি সারিতে উত্তর বসিয়ে মেলান, বা ছোট script-এ ১৬টি সারি চালান
Booth-এ logical shift, বা −M ভুলভুল চিহ্নের গুণফল (খ-০৪)এই পাতার Booth tracer বা হাতে সাধারণ গুণের সাথে মেলান
IEEE-তে bias ১২৭-এর বদলে ১২৮, বা hidden bit fraction-এভুল hex (খ-০৫)C-তে memcpy বা JavaScript-এর Float32Array দিয়ে বিট ছাপান
MIPS-এর প্রথা RISC-V-তে (delay slot, $ register-নাম)ভুল cycle গোনা বা ভুল কোডRISC-V ISA manual আর কোর্সের প্রথা প্রশ্নে লিখে দিন
Cache-এ KiB আর KB, বা word-address ধরে offsettag-index-offset ভুল (ঘ-০২)tag + index + offset = address-এর বিট — যোগ করে দেখুন
Chip-এর cache-আকার বা core-সংখ্যা বানানোভুল তথ্য মুখস্থনির্মাতার datasheet; নিজের যন্ত্রে lscpu বা sysfs

AI-এর উত্তর মেনে নেওয়ার আগে — চেকলিস্ট

নিজেকে যাচাই করুন

প্রথমে একটি ক্রম সাজানোর প্রশ্ন, তারপর লিখিত আর ভাইভার মূল তথ্য নিয়ে আটটি MCQ. ভুল হলে কারণসহ ব্যাখ্যা পাবেন।

ক্রমএকটি ১০ নম্বরের আর্কিটেকচার-উত্তরের অংশগুলো নম্বর-ভাগের ক্রমে সাজান (▲▼ চেপে সরান)

  1. নির্ভুল সংজ্ঞা, শর্তসহ
  2. কীভাবে কাজ করে — ধাপে ধাপে ব্যাখ্যা
  3. লেবেলসহ ছবি বা তুলনার টেবিল
  4. নির্দিষ্ট সংখ্যার একটি উদাহরণ বা হিসাব
  5. উপসংহার — সুবিধা, সীমা বা বাস্তব প্রয়োগ

(সহজ) −৪৫-এর ৮ বিট two's complement রূপ কোনটি?

  • 1101 0011
  • 1101 0010
  • 1010 1101
  • 0010 1101

(মাঝারি) F(A, B, C, D) = Σm(0, 1, 2, 5, 8, 9, 10)-এর minimal SOP কোনটি?

  • B′C′ + A′D
  • B′C′ + B′D′ + A′C′D
  • A′B′ + B′D′ + C′D
  • B′ + A′C′D

(মাঝারি) একটি পথে tpcq = ৩০ ps, critical path-এর tpd = ৩৫০ ps, tsetup = ২০ ps, clock skew শূন্য। সর্বোচ্চ clock frequency কত?

  • প্রায় ২.৮৬ GHz
  • প্রায় ২.৬৩ GHz
  • ২.৫ GHz
  • ২৫০ MHz

(মাঝারি) সমান ধাপের ৫ ধাপের pipeline-এ (hazard আর register overhead নেই) ১০০টি instruction চালালে pipeline-হীন যন্ত্রের তুলনায় speedup প্রায় কত?

  • ঠিক ৫
  • ৪.৫
  • প্রায় ০.৯৬
  • প্রায় ৪.৮১

(সহজ) ৩২ বিট byte-address, ৬৪ KiB direct-mapped cache, ৩২ byte block. Tag, index আর offset কত বিট?

  • ১৬ / ১১ / ৫
  • ১৮ / ৯ / ৫
  • ১৭ / ১০ / ৫
  • ২৭ / ০ / ৫

(মাঝারি) L1: hit time ১ cycle, miss rate ৫%; L2: hit time ১০ cycle, local miss rate ২০%; মেমরি ১০০ cycle. AMAT কত?

  • ৬ cycle
  • ২.৫ cycle
  • ১.৫ cycle
  • ২ cycle

(মাঝারি) MESI protocol-এ একটি core-এর cache-এ একটি line E অবস্থায় আছে। Core-টি সেই line-এ লিখলে কী হয়?

  • BusRdX পাঠিয়ে M-এ যায়
  • BusUpgr পাঠিয়ে M-এ যায়
  • কোনো bus transaction ছাড়াই M-এ যায়
  • S-এ যায় আর মেমরিতে লেখে

(সহজ) একটি প্রোগ্রামের ৮০% সময় এমন অংশে যায়, যা ৪ গুণ দ্রুত করা হলো। Amdahl অনুযায়ী মোট speedup কত?

  • ৪
  • ৫
  • ৩.২
  • ২.৫

শব্দকোষ

লেখার মধ্যে ডটেড দাগ দেওয়া শব্দে মাউস রাখুন বা চাপুন — অর্থ দেখাবে। এই পর্বে ব্যবহৃত সব শব্দ এখানে একসাথে:

মনে রাখুন

  1. কাঠামোয় নম্বর: সংজ্ঞা → ব্যাখ্যা → ছবি বা টেবিল → উদাহরণ → উপসংহার; ২ নম্বরে দুই–তিন বাক্য, ৫ নম্বরে একটি ছবি বা টেবিল, ১০ নম্বরে দুটি আর একটি হিসাব।
  2. ছবিতে লেবেল: truth table binary ক্রমে, timing diagram-এ clock ওপরে আর delay দেখিয়ে, datapath-এ mux-এর signal আর বিটের চওড়া, pipeline diagram-এ cycle নম্বর, cache-এ tag | index | offset আর comparator.
  3. সংখ্যায় প্রথা আর একক: RISC-V না MIPS, শাখা কোন ধাপে, byte না word address, KiB না KB, local না global miss rate — প্রশ্নে বা উত্তরের প্রথম লাইনে লিখে দিন।
  4. তুলনা আর প্রমাণ: একই মাপকাঠির সারি আর শেষে “কোথায় কোনটি”; speedup, AMAT আর Amdahl অনুমান থেকে সীমা পর্যন্ত নিজে লিখতে পারা চাই।
  5. ভাইভায়: তিন বাক্য — কী, কেন বা কীভাবে, সীমা; জোরে ভাবা, ছবি আঁকা, স্তরের নাম বলা, আর না জানলে সৎ থেকে যাচাইয়ের পথ বলা।

পরের পর্বে: লিখিত আর ভাইভা হলো। পর্ব ৬১-এ আর্কিটেকচার ইন্টারভিউর প্রশ্ন — CPU, cache আর পারফরম্যান্স।

আরও পড়ুন · ABCL TECH-এ আপনার পরবর্তী পদক্ষেপ

এই পর্বটি শেয়ার করুন:
এই পর্বে ভুল পেয়েছেন? জানান