Bosh sahifa Wiki ALU

ALU

ALU — protsessor ichida arifmetik va mantiqiy amallarni bajaradigan qurilma. Uning to‘liq nomi Arithmetic Logic Unit hisoblanadi.

ALU registerlardan operandlarni oladi, addition, subtraction, bitwise operation va comparison kabi amallarni bajaradi, natijani register yoki boshqa ichki blokka uzatadi.

Zamonaviy protsessorda bitta emas, bir nechta ALU va boshqa maxsus execution unitlar bo‘lishi mumkin.

Arifmetik amallar

ALU quyidagi amallarni bajarishi mumkin:

  • qo‘shish;
  • ayirish;
  • increment;
  • decrement;
  • taqqoslash;
  • negation;
  • ayrim arxitekturada ko‘paytirish va bo‘lish.

Ko‘paytirish va bo‘lish ko‘pincha alohida execution unitda bajariladi, chunki ular murakkabroq va ko‘proq cycle talab qiladi.

Mantiqiy amallar

ALU bitlar ustida:

  • AND;
  • OR;
  • XOR;
  • NOT;
  • bit clear;
  • bit set

amallarini bajaradi.

Misol:

1010 AND 1100 = 1000
1010 OR  1100 = 1110
1010 XOR 1100 = 0110

Bitwise operation mask, flag va low-level protocol parsingda ishlatiladi.

Shift va rotate

Bitlarni chapga yoki o‘ngga surish:

  • logical shift;
  • arithmetic shift;
  • rotate.

Chapga shift ayrim holatda 2ga ko‘paytirishga o‘xshaydi.

Arithmetic right shift signed sonning sign bitini saqlaydi.

Rotate chiqib ketgan bitni qarama-qarshi tomonga qaytaradi.

Shift unit ALU tarkibida yoki alohida barrel shifter sifatida bo‘lishi mumkin.

Operand

Operand ALU amali qo‘llanadigan qiymat.

Manbalar:

  • register;
  • immediate constant;
  • memorydan yuklangan qiymat;
  • oldingi instruction natijasi;
  • forwarding network.

Instruction ikki yoki undan ko‘p operandni ko‘rsatishi mumkin.

Natija

ALU natijasi:

  • registerga yoziladi;
  • memory address hisobida ishlatiladi;
  • branch shartini belgilaydi;
  • flags registerini yangilaydi;
  • boshqa execution unitga uzatiladi.

Status flag

Arithmetic amal natijasida flaglar o‘zgarishi mumkin.

Zero flag

Natija 0 bo‘lsa yoqiladi.

Carry flag

Unsigned qo‘shishda yuqori bitdan carry chiqsa yoki ayrim ayirish holatida borrow bilan bog‘liq qiymat.

Sign flag

Natijaning eng yuqori biti.

Overflow flag

Signed arithmetic natija diapazondan chiqsa yoqiladi.

Parity flag

Ayrim arxitekturada pastki baytdagi bitlar paritysini bildiradi.

Carry va overflow farqi

Carry unsigned arithmetic uchun muhim.

Overflow signed arithmetic uchun.

Misol, 8-bit:

255 + 1 = 0

Unsigned hisobda carry yuz beradi.

Signed misol:

127 + 1 = -128

bit natija o‘raladi va overflow yuz beradi.

Comparison

Comparison ko‘pincha subtractionga o‘xshash amal bajaradi, lekin natijani saqlamaydi. Faqat flaglar yangilanadi.

Keyingi branch:

  • equal;
  • not equal;
  • greater;
  • less;
  • carry;
  • zero

shartlariga qarab bajariladi.

Address calculation

Load va store instructionlar uchun effective address hisoblash kerak.

Misol:

base + index * scale + offset

Zamonaviy CPUda bu vazifa uchun alohida Address Generation Unit bo‘lishi mumkin.

Integer ALU

Integer ALU butun sonlar va pointerlar ustida ishlaydi.

Floating-point sonlar uchun FPU yoki vector unit ishlatiladi.

Integer ALU ko‘p control va general-purpose kodning asosiy execution blokidir.

FPU bilan farqi

Floating-Point Unit IEEE 754 floating-point amallarni bajaradi.

ALU esa odatda integer va logical amallarni bajaradi.

Zamonaviy CPUda FPU vector execution pipeline bilan birlashtirilishi mumkin.

Pipeline

Instruction bajarilishi bir necha bosqichga bo‘linadi:

  • fetch;
  • decode;
  • operand read;
  • execute;
  • memory;
  • write-back.

ALU execute bosqichida ishlaydi.

Pipeline bir vaqtning o‘zida turli instructionlarning turli bosqichlarini bajaradi.

Latency va throughput

ALU instructionning latencysi natija tayyor bo‘lishigacha cycle soni.

Throughput — unit bir cycle’da nechta instruction qabul qila olishi.

Oddiy integer addition ko‘pincha past latencyga ega. Division ko‘proq cycle talab qiladi.

Superscalar processor

Zamonaviy CPU bir cycle’da bir nechta instruction chiqarishi mumkin.

Buning uchun:

mavjud.

Instructionlar dependency bo‘lmasa parallel bajariladi.

Data dependency

Misol:

R1 = R2 + R3
R4 = R1 + R5

Ikkinchi instruction birinchi natijani kutadi.

CPU forwarding orqali natijani register filega yozilishini kutmasdan keyingi ALUga berishi mumkin.

Out-of-order execution

CPU tayyor operandga ega instructionlarni dastur tartibidan tashqari bajarishi mumkin.

Natijalar architectural tartibda commit qilinadi.

Bu ALUlarning bo‘sh turishini kamaytiradi.

Branch prediction

Comparison natijasi branch yo‘lini belgilaydi.

Branch natijasi tayyor bo‘lguncha CPU taxminiy yo‘l bo‘yicha instructionlarni bajarishi mumkin.

Taxmin noto‘g‘ri bo‘lsa pipeline tozalanadi.

Bit width

ALU 8, 16, 32, 64 yoki boshqa width bilan ishlashi mumkin.

64-bit CPU ichida kichik width operationlar ham mavjud.

Ba’zi instruction yuqori bitlarni zero yoki sign extension bilan to‘ldiradi.

Saturating arithmetic

Oddiy integer arithmetic overflowda wrap qiladi.

Saturating arithmetic maksimal yoki minimal qiymatda to‘xtaydi.

Misol, 8-bit unsigned:

250 + 20 = 255

Multimedia va signal processingda foydali.

ALU dizayni

ALU ichida:

  • adder;
  • logic gate;
  • shifter;
  • multiplexer;
  • carry propagation;
  • control signal

mavjud.

Adder dizaynlari:

  • ripple-carry;
  • carry-lookahead;
  • carry-select;
  • prefix adder.

Tezlik, chip maydoni va energiya o‘rtasida muvozanat tanlanadi.

Energiya sarfi

Ko‘p ALU va yuqori frequency throughputni oshiradi, ammo quvvat va issiqlikni ko‘paytiradi.

CPU dynamic power taxminan switching activity, capacitance, voltage va frequencyga bog‘liq.

Mobile protsessor energiya samaradorligi uchun ayrim unitlarni o‘chirishi mumkin.

Diagnostika

ALU odatda application darajasida alohida diagnostika qilinmaydi.

Hardware xatolar:

  • noto‘g‘ri hisob;
  • machine check;
  • stress test failure;
  • overclock instability

ko‘rinishida chiqishi mumkin.

Compiler bug, undefined behavior va hardware xatosi bir-biridan test va boshqa tizim bilan solishtirish orqali ajratiladi.

Bog‘liq tushunchalar

CPU, Register, Arithmetic, Logic gate, Flags register, FPU, Pipeline, Superscalar, Out-of-order execution, Instruction