A számítástechnikában az aritmetikai-logikai egység (rövidítése ALU az angol arithmetic logic unit alapján) aritmetikai és logikai műveleteket elvégző digitális áramkör. Alapvető eleme a számítógép központi vezérlőegységének. A processzorok, a CPU-k és a GPU-k a számítógép belsejében található, belülről nagyon erős és bonyolult ALU-k; egy egyszerű alkatrész is számos ALU-t tartalmazhat.
Neumann János alkotta meg az ALU fogalmát 1945-ben, amikor cikkében beszámolt új számítógépéről, az EDVAC-ról.
Egy tipikus Neumann-féle CPU belső szerkezetének részében az ALU végzi az összeadást, a kivonást és más egyszerű műveleteket az inputjain, így adva át az eredményt az output regiszternek, azaz a kimeneten ez fog megjelenni.
Története, kialakulása
1946-ban Neumann János, a kollégáival a Princeton Institute of Advanced Studies (IAS) számítógépének tervezésén dolgozott. Ez a számítógép lett az összes későbbi számítógép "prototípusa". Javaslatára áttekintették, hogy szerinte mire van szüksége a gépéhez, beleértve az ALU-t is. Az ő véleménye szerint ez elengedhetetlen kelléke a számítógépnek, ugyanis ez végzi el az egyszerű matematikai utasításokat, mint az összeadást, kivonást és a logikai relációkat, függvényeket is ez hajtja végre.[1]
Numerikus rendszerek
Az ALU-nak ugyanazt a numerikus modellt kell használnia a számításokra, mint ahogy a számítógép többi alkatrészének. A modern processzorok egy számot általában binárisan, kettes komplemensként ábrázolják. A korai számítógépek a számrendszerek széles skáláját használták, beleértve az egyes komplemenst, az előjeles-nagyságot és néha a tízes számrendszereket, tíz tárolóval számjegyenként.
Az ALU tulajdonképpen egy ezek közül a numerikus rendszerek közül, ám eltérő tervezete befolyásolta elterjedését és kedvezett a kettes komplemensnek, ezzel könnyebbé téve az ábrázolást az ALU-val történő összeadás és kivonás számolásánál.
Gyakorlati áttekintés
A legtöbb processzor utasításait egy, vagy több ALU végzi. Ezek az egységek betöltik az adatokat a bemenő regiszterbe, végrehajtják a műveletet, és az eredményt eltárolják a kimenő regiszteren. A vezérlőegység mondja meg, hogy melyik utasításon hajtsa végre az adatot. Egy másik eljárás helyezi át az adatot ezek között a regiszterek és a memória között.[2]
Egyszerű utasítások
A legtöbb ALU a következő utasításokat képes végrehajtani:
Bitmozgató utasítások (balra vagy jobbra mozgatnak, vagy elforgatnak szavakat speciális bitszámmal, előjellel, vagy előjel nélkül. Ezek a mozgatások képesek értelmezni a 2-vel való szorzást és osztást is, mivel ha "balra", eggyel magasabb helyiértékre "eltoljuk" a számunkat, az megfelel a 2-vel való szorzással)
Összetett utasítások
A mérnökök úgy tervezik az ALU-t, hogy képes legyen bármilyen utasítást végrehajtani, akármilyen bonyolult is az; a probléma az, hogy minél bonyolultabb utasítást képes egy ALU végrehajtani, annál drágább előállítani, és megtervezni.
Ezért célja a gyáraknak megtalálni azt az egyensúlyi pontot, ahol az egység előállítási költsége még nem megfizethetetlen, de a teljesítménye elég erőteljes ahhoz, hogy a processzort gyorsabbá tegyen. Például ahhoz, hogy egy ilyen elem kiszámolja egy szám négyzetgyökét, a következő megoldások mind lehetségesek:
Egy rendkívül összetett ALU, ami egyetlen lépésben ki tudja számolni bármilyen szám négyzetgyökét. Ezt hívják egy órajeles számításnak
Egy komplex ALU, ami néhány lépésben ki tudja számolni bármilyen szám négyzetgyökét. De a közbeeső eredményeket minden rész továbbadja a soron következő elemeknek, amik sorba rendezik azokat, akár a gyárak futószalagjai. Ez teszi az ALU-t alkalmassá arra, hogy elfogadjon új számokat számolásra, még mielőtt végzett volna az előző kiszámolásával. Eredményeit a kezdeti késés után az egy órajeles-sel megegyező sebességgel produkálja. Ezt nevezzük futószalag számításnak, angolul pipeline computing.
Létezik az iteratív számítási modell, ekkor egy összetett vezérlőegység irányítja a számítás menetét beépített mikrokódokkal. Néhány lépésben ki tudja számolni egy szám négyzetgyökét.
Segédprocesszoros megoldás is létezik, ekkor egy egyszerű kisegítő, és általában szakosított (speciális utasításokra beállított) ALU jelenik meg a processzorban, ami meggyorsítja a számítást.
Lehetséges, hogy a számítógépet kezelő programozókat utasítjuk arra, hogy írják meg a saját négyzetgyököt számító algoritmusukat. Ezt szoftver könyvtárakkal hajtjuk végre.
Emulálhatunk egy segédprocesszort. Ez úgy történik, hogy a vezérlőegység minden egyes négyzetgyök-utasítás végrehajtása előtt megnézi, hogy van-e elérhető kisegítő ALU a rendszerben, és ha van, a feladatot átruházza arra. Ha nincs, akkor pedig felkéri az operációs rendszert, hogy egy alkalmas algoritmust adjon a feladat kiszámítására.
A fent említettek között van a leggyorsabb és a legdrágább, a leglassúbb és a legolcsóbb is. Ennek következtében, esetenként a legegyszerűbb számítógép is képes kiszámolni a legbonyolultabb formulát is, habár általában sokáig dolgozik, mivel lépésenként számolja a formulát. Az erős processzorok, mint az Intel Core és az AMD64, az egyszerű utasításokhoz az első opció szerint számolnak, a nagyon összetett utasításokhoz azonban a második, a rendkívül összetett utasításokhoz pedig a harmadik módot használják. Ez által lehetővé válik a nagyon összetett ALU-k építésének lehetősége ezekben a processzorokban.
Bemenetek és kimenetek
Az ALU bemenetei szükségesek az adatok működéséhez (amit operandusnak nevezünk) és a kódolásához. A vezérlőegység jelzi, hogy melyik utasítás következik. A kimenet a számolás eredménye.
Néhány kialakításában az ALU generálja a bemeneteket vagy kimeneteket, elindítja feltételes kódolásában, vagy a státusz regiszterbe teszi. Ezeket a kódokat hibajelző esetekre használjuk, mint az elutasítás, túlcsordulás, nullával való osztás stb.[2]
ALU-k vs. FPU-k
A lebegőpontos egység végrehajtja az aritmetikai utasításokat két érték között, ezért a számoknak lebegőpontos ábrázolást állítanak elő, ami sokkal bonyolultabb, mint a kettes komplemens ábrázolása egy tipikus ALU-ban. Azért csinálják ezeket a számításokat, mert az FPU-nak számos összetett, beépített áramköre van, beleértve néhány belső ALU-t is.
Ez a szócikk részben vagy egészben az Arithmetic logic unit című angol Wikipédia-szócikk ezen változatának fordításán alapul. Az eredeti cikk szerkesztőit annak laptörténete sorolja fel. Ez a jelzés csupán a megfogalmazás eredetét és a szerzői jogokat jelzi, nem szolgál a cikkben szereplő információk forrásmegjelöléseként.