Jednostka ALU, czyli Arithmetic Logic Unit, to absolutna podstawa każdego procesora. To właśnie tutaj odbywają się wszystkie operacje stałoprzecinkowe: dodawanie, odejmowanie, przesunięcia bitowe, porównania czy proste operacje logiczne typu AND, OR. W praktyce, jak piszemy nawet najprostszy kawałek kodu w C czy assemblerze, to praktycznie każda instrukcja arytmetyczna przechodzi przez ALU. Moim zdaniem warto pamiętać, że ALU działa na liczbach całkowitych, a nie zmiennoprzecinkowych. W komputerach PC, ale też w mikrokontrolerach typu AVR czy ARM Cortex-M, ALU obsługuje praktycznie wszystkie codzienne operacje matematyczne. W sumie to podstawa np. przy obsłudze liczników, timerów, adresacji pamięci, operacjach na portach I/O. Standardy projektowania procesorów wyraźnie rozgraniczają ALU od innych jednostek, które odpowiadają za specjalistyczne zadania, np. FPU do operacji zmiennoprzecinkowych. Praktyczna rada: jak pracujecie z niskopoziomowym kodem, warto zaglądać do dokumentacji i zobaczyć, które instrukcje korzystają z ALU. Z mojego doświadczenia, zrozumienie działania ALU bardzo przydaje się przy optymalizowaniu szybkości programów i debugowaniu problemów sprzętowych. W wielu systemach embedded, gdzie liczy się każdy cykl zegara, znajomość możliwości ALU potrafi uratować projekt.
Odpowiedź na to pytanie bywa myląca, bo skróty typu FPU, DSP czy GPU przewijają się non stop w świecie IT i elektroniki. Często można się pomylić, bo każda z tych jednostek odpowiada za specyficzny rodzaj obliczeń, ale nie za operacje stałoprzecinkowe w ogólnym sensie. FPU, czyli Floating Point Unit, to jednostka przeznaczona do operacji na liczbach zmiennoprzecinkowych – czyli tam, gdzie mamy przecinki, bardzo duże zakresy czy precyzję naukową. Stąd FPU nie wykonuje prostych działań typu dodawanie liczb całkowitych; tym zajmuje się właśnie ALU. Z kolei DSP, czyli Digital Signal Processor, to osobny rodzaj procesorów specjalizowanych, bardzo często stosowanych w przetwarzaniu sygnału audio czy obrazu. One też mają swoje własne jednostki operacyjne, często zoptymalizowane pod szybkie mnożenie i MAC (multiply-accumulate), ale to nie jest ogólna jednostka procesora wykonująca podstawowe operacje arytmetyczne na liczbach całkowitych. GPU, procesor graficzny, można spotkać głównie w kartach graficznych czy układach mobilnych – jego architektura jest zoptymalizowana pod równoległe przetwarzanie ogromnych ilości danych graficznych, ale nie pod klasyczne operacje arytmetyczne typowe dla CPU. Często spotykam się z przekonaniem, że jak coś brzmi 'bardziej zaawansowanie', to pewnie wykonuje podstawowe operacje – stąd te pomyłki. Jednak to właśnie ALU jest tym sercem, które wewnątrz CPU wykonuje najprostsze, ale i najczęściej potrzebne obliczenia na liczbach całkowitych. Warto o tym pamiętać, bo mylenie tych jednostek może prowadzić do sporych nieporozumień, szczególnie przy analizie architektury procesora czy przy pisaniu kodu obejmującego różne typy danych.