Jednostka arytmetyczno-logiczna

Z Wikipedii, wolnej encyklopedii
Typowy symbol ALU: A i B - operandy; R - wyjście; F - wejście z jednostki kontrolnej; D - status wyjścia

Jednostka arytmetyczno-logiczna (z ang. arithmetic and logical unit lub arithmetic logic unit, ALU) – układ cyfrowy, wykonujący operacje arytmetyczne (takie jak dodawanie, odejmowanie itp.), operacje logiczne na dwóch liczbach oraz operacje jednoargumentowe, takie jak przesunięcie bitów, negacja. ALU jest podstawowym blokiem centralnej jednostki obliczeniowej komputera.

Typowe ALU ma dwa wejścia odpowiadające parze argumentów i jedno wyjście na wynik. Operacje jakie prowadzi to:

Przyczyną dla której operacje te grupuje się w ALU jest to, że bramek logicznych potrzebnych do zaimplementowania wszystkich operacji z zestawu: dodawanie (z przeniesieniem i bez), odejmowanie (z przeniesieniem i bez), negacja liczby, zwiększanie i zmniejszanie o 1, AND, OR, NOT, XOR jest niewiele więcej od zaimplementowania samego dodawania. Szybkie mnożenie wymaga znacznie więcej, a dzielenie jeszcze więcej bramek w porównaniu do tych operacji.

Klasyczne procesory zawierały jedno ALU. Procesory o architekturze superskalarnej zawierają kilka ALU i mogą ich używać jednocześnie wykonując jednocześnie kolejne instrukcje.

Często ALU te są nieidentyczne ─ np. z trzech ALU wszystkie potrafią wykonywać podstawowe operacje (dodawanie, odejmowanie i logiczne), a jedynie jedno potrafi mnożyć i dzielić. Taki procesor w jednym cyklu może wykonać np. 1 mnożenie i 2 dodawania, nie może natomiast wykonać 2 mnożeń. Jest to uzasadnione, ponieważ typowy program wykonuje o wiele więcej dodawań niż mnożeń, przy czym operacje dodawania są często niejawne dla programisty, bo są np. wykonywane przy wyliczaniu adresu pola obiektu na podstawie adresu obiektu czy zmiennej, której położenie jest określone względem rejestru adresowania.

Funkcje ALU[edytuj | edytuj kod]

Dotychczas najbardziej złożonymi obwodami elektronicznymi są obwody wbudowane wewnątrz układów współczesnych mikroprocesorów. Dlatego też takie procesory zawierają w sobie potężne i bardzo złożone ALU. W rzeczywistości nowoczesny mikroprocesor (bądź komputer główny) może mieć kilka rdzeni, każdy rdzeń z kilkoma jednostkami wykonawczymi, każda jednostka wykonawcza z kilkoma ALU.

Wiele innych układów może mieścić w sobie ALU: GPU (jednostka przetwarzania graficznego) jak ta w kartach graficznych Nvidia czy AMD, FPU (jednostka obliczeń zmiennoprzecinkowych) w znanym koprocesorze 80387 oraz procesor przetwarzania sygnałów cyfrowych w karcie dźwiękowej Sound Blaster, odtwarzacze CD i odbiorniki telewizyjne HD. Wszystkie z nich posiadają kilka potężnych i złożonych jednostek arytmetyczno-logicznych.

Historia: Architektura von Neumanna[edytuj | edytuj kod]

 Osobny artykuł: Architektura von Neumanna.

Matematyk John von Neumann zaproponował model ALU w 1945 roku, kiedy to sporządził spis założeń dla nowego komputera EDVAC (z ang. Electronic Discrete Variable Automatic Computer, czyli elektroniczny komputer maszynowy o zmiennych nieciągłych). Później w 1946 r. pracował ze swoimi kolegami nad stworzeniem komputera dla Princeton Institute of Advanced Studies (IAS). Komputer IAS stał się prototypem dla wielu późniejszych komputerów. W swoim projekcie von Neumann nakreślił, co według niego będzie niezbędne w komputerze uwzględniając ALU.

Von Neumann stwierdził, iż ALU jest niezbędna dla komputera, ponieważ pewnym jest, że komputer będzie musiał wykonywać podstawowe operacje matematyczne obejmujące dodawanie, odejmowanie, mnożenie oraz dzielenie. Dlatego też twierdził, że „rozsądnym jest, aby komputer mieścił w sobie wyspecjalizowane organy dla tych operacji”.

ALU vs. FPU[edytuj | edytuj kod]

Jednostka zmiennoprzecinkowa (z ang. Floating Point Unit) również wykonuje operacje arytmetyczne na dwóch wartościach, jednak są to liczby w reprezentacji zmiennoprzecinkowej, co jest znacznie bardziej skomplikowane niż wykonywanie operacji na liczbach w kodzie uzupełnienia do dwóch ZU2 używanej w typowej ALU. W celu wykonania takich kalkulacji, FPU posiada kilka wbudowanych, złożonych układów, takich jak wewnętrzne ALU. Zazwyczaj projektanci nazywają jednostkę ALU układem, który wykonuje operacje arytmetyczne w różnych formatach liczb całkowitych (np. ZU2 i BCD), podczas gdy układy dokonujące obliczeń na bardziej złożonych formatach np. zmiennoprzecinkowych, liczbach zespolonych itp. zwykle otrzymują bardziej szczegółowe nazwy.

Zobacz też[edytuj | edytuj kod]