Aritmētiski loģiskā ierīce

300px|thumb|right|Tipiski shematiskie ALU simboli: A un B ir operandi; R ir izvade; F ir ievade kontroles ierīcei; D ir izvades stāvoklis.
**Aritmētiski loģiskā ierīce** ( saīsināti — **ALU**) ir ierīce, kas izpilda aritmētiskās operācijas (saskaitīšana, atņemšana, reizināšana, dalīšana), loģiskās operācijas (skaitļu salīdzināšanu) un citas datu apstrādes operācijas. ALU ir iebūvēts procesoros CPU un grafisko ierīču procesoros GPU. Procesoriem attīstoties un pilnveidojoties, arī ALU ir palicis sarežģītāks un kompleksāks.

1945. gadā matemātiķis Džons fon Neimans nolasīja referātu par ALU koncepciju, kas tika uzrakstīts projekta "EDVAC dators" ietvaros.

## Pirmsākumi
1946. gadā Džons fon Neimans studēja datora veidošanas pamatus Prinstonas koledžā. Viņš uzskatīja, ka ALU ir nepieciešams vienkāršam datoram, jo tas garantē matemātisku operāciju izpildi (saskaitīšanu, atņemšanu, reizināšanu un dalīšanu). IAS (insitūts ar padziļinātām studijām, kurā studēja Džons fon Neimans) dators kļuva par prototipu daudziem datoriem.

1949. gadā angļu izcelsmes pētnieks Moriss Uilkss uzbūvēja pirmo datoru, kurā bija realizēti Džona fon Neimana principi.
Mūsdienu datori ir daudz jaudīgāki nekā Uilksa dators, bet īstenībā izmanto tos pašus pamatprincipus, kurus piedāvāja fon Neimans 1945. gadā.

## Praktiskais pārskats
600px|thumb|right|Vienkāršs 2 bitu ALU, kas satur XOR, AND, OR elementu saskaitīšanu.
Vairums procesoru operācijas tiek paveiktas ar vienu vai vairākiem ALU. ALU ielādē datus no ievades reģistriem, izpilda, un izvada rezultātu izejas reģistros. Vadības ierīce pasaka ALU, kādu operāciju veikt ar datiem. Cits mehānisms pārvieto datus starp reģistriem un atmiņu.

### Vienkāršās operācijas
Vairums ALU var veikt sekojošas operācijas:
* Veselo skaitļu aritmētiskās operācijas (saskaitīšanu, atņemšanu un dažkārt reizināšanu un dalīšanu — jāpiebilst, kad šis ir daudz dārgāks ALU);
* Loģiskās operācijas ar bitiem (*and* - un, *not* - nē, *or* - vai, *xor* — izslēdzošais vai);
* Bitu pārcelšanas operācijas (pārceļot vai griežot vārdu pēc specificētiem bitu numuriem pa labi vai kreisi, ar vai bez zīmes paplašinājuma). Pārvirzes var tik interpretētas kā reizināšana ar 2 vai dalīšana ar 2.

### Saliktas operācijas
Teorētiski varētu uzbūvēt ALU, kas izpildītu jebkuras operācijas, tomēr tad tas kļūtu komplicētāks. Komplicētāks ALU aizņemtu vairāk vietas procesorā, patērētu vairāk elektroenerģijas un ievērojami paaugstinātos ALU izgatavošanas izmaksas.

Vienmēr tiek meklēts kompromisa variants. Lūk seši varianti, kā tiek realizēta kvadrātsaknes rēķināšana:
# Sevišķi komplekss ALU, kas izrēķinātu kvadrātsakni jebkuram skaitlim vienā solī. Šo sauktu par *rēķināšanu vienā taktī*. 
# Ļoti kompleksu ALU, kas izrēķinātu kvadrātsakni jebkuram skaitlim dažos soļos. Šeit ir metode, kā tas ir panākts: starprezultāts iet cauri sērijai ar ķēdēm, kas ir sakārtotas līnijā gluži kā rūpnīcas konveijera līnija. Tas padara ALU ietilpīgu jaunu ciparu rēķināšanai, pat tad, kad vēl nav beigts rēķināt iepriekšējais skaitlis. Šī metode liek ALU uzrādīt skaitļus ātrāk nekā vienkāršas takts ALU - kaut arī aprēķina rezultāti parādās tikai pēc tam, kad ir iestājusies aizture. Šo sauc par aprēķinu *cauruļvadu*.
# Komplekss ALU, kas rēķinātu kvadrātsakni vairākos soļos. Šī metode ir nosaukta par *interaktīvo aprēķinu metodi*, un parasti tiek kontrolēta no kompleksas vadības ierīces, kas ir iebūvēta mikrokodos.
# Vienkāršs ALU procesors, kas atrodas nevis procesorā, bet atsevišķā mikroshēmā. Novietots tiek uz pamatplates. Šo sauc par *līdzprocesoru*. ALU un līdzprocesors datorā atrodas vienlaicīgi.
# Ja nav līdzprocesora un emulācijas, izmanto *programmatūras* algoritmus kvadrātsaknes rēķināšanai. *Programmatūriski* rēķināt kvadrātsakni.
# Emulēt līdzprocesora eksistenci - ja programmas grib rēķināt kvadrātsakni, procesoram likt pārbaudīt vai ir līdzprocesors, un ja ir tad to izmantot. Ja nav līdzprocesora, tad process lūdz palīdzību operētājsistēmai. Šo sauc par *programmatūras emulāciju*.

Augšup minētās sešas iespējas atšķiras ātrdarbības un izmaksu ziņā. Pat visvienkāršākais dators var rēķināt komplicētu formulu. Visvienkāršākajam datoram, komplicētas formulas rēķināšana, var aizņemt daudz laika.

Spēcīgs procesors, kā piemēram Intel Core un AMD64 īsteno pirmo iespēju priekš dažām vienkāršām operācijām, otro iespēju priekš daudz kompleksākām operācijām un iespēju trešo priekš ekstrēmi kompleksām operācijām. Tas ir iespējams dēļ tā, kad procesoros ir iebūvēti kompleksi ALU.

### Ievades un izvades
ALU ievades ir dati, ar kuriem operē kontroles ierīce. Kontroles ierīce nosaka, kādu operāciju veikt (datus, ar kuriem operē, sauc par operandiem). Aprēķinu rezultāts ir izvade.
Daudzos veidojumos, ALU aizņem vai ģenerē ievades un izvades kondīciju kodu uzstādījumus no stāvokļa reģistra. Šie kodi tiek izmantoti darbības noteikšanai, kā piemēram, ienest iekšā, iznest ārā, pārpildīt, dalīt ar nulli.

### ALU un FPU
FPU (*Floating Point Unit*) ir līdzprocesors jeb koprocesors, kas specializēts ātru operāciju ar peldošo komatu (punktu) izpildei.
FPU ir iebūvētas dažas kompleksas ķēdes, iekļaujot dažus ALU. ALU atrodas pašā procesorā, bet FPU novieto uz pamatplates, atsevišķas mikroshēmas veidā. Bet sākot ar procesoru Intel 80486DX un jaunāku, FPU ir integrēts CPU.