FPU, czyli Floating Point Unit, to specjalizowany układ w jednostce centralnej, który zajmuje się właśnie obliczeniami na liczbach zmiennoprzecinkowych. Moim zdaniem bardzo często się o tym zapomina, bo „procesor to procesor”, a tu jednak mamy konkretne podzespoły odpowiadające za różne rodzaje operacji. Współczesne CPU praktycznie zawsze mają wbudowaną FPU, bo operacje na zmiennych typu float czy double są na porządku dziennym, szczególnie w grafice komputerowej, symulacjach fizycznych czy obliczeniach naukowych. Przykładowo, FPU jest niezbędna podczas renderowania grafiki 3D albo nawet przy zwykłych obliczeniach matematycznych, które wymagają dużej precyzji. Standardy branżowe jak IEEE 754 określają sposób reprezentacji i przetwarzania liczb zmiennoprzecinkowych, a FPU jest zaprojektowana właśnie pod takie standardy, żeby wyniki były przewidywalne i zgodne ze światowymi normami. Dla mnie to jest ciekawe, bo chociaż FPU działa raczej „w tle”, to bez niej większość zaawansowanych aplikacji praktycznie by nie działała albo byłaby po prostu niewyobrażalnie wolna. Czasem w kontekście architektury komputerów mówi się nawet o osobnych układach FPU, które kiedyś były dokładane do procesorów, zanim trafiły bezpośrednio do ich wnętrza. Warto o tym pamiętać, bo to właśnie FPU pozwala komputerom liczyć z dużą dokładnością i szybkością wartości, których zwykła ALU by nie ogarnęła.
Funkcjonuje takie przekonanie, że wszystkie jednostki w procesorze ogarniają po trochu te same rzeczy, ale to nie do końca tak działa. ALU, czyli Arithmetic Logic Unit, rzeczywiście odpowiada za większość podstawowych operacji arytmetycznych oraz logicznych – dodawanie, odejmowanie, AND, OR czy XOR, ale jest zoptymalizowana do operacji na liczbach całkowitych. Kiedy jednak w grę wchodzą liczby zmiennoprzecinkowe, ALU sobie zwyczajnie nie radzi – nie została do tego zaprojektowana. Warto też wspomnieć o IU, czyli Integer Unit, która – jak sugeruje sama nazwa – jest odpowiedzialna za przetwarzanie liczb całkowitych. Spotkałem się z sytuacjami, gdzie niektórzy mylą IU z FPU, bo niby też coś liczy, ale jeśli chodzi o typy float czy double, to IU nic nie wskóra. AU natomiast, tak szczerze, nie jest powszechnie stosowanym terminem w kontekście architektury procesora. Może się czasem pojawić jako ogólne określenie Arithmetic Unit, ale to raczej archaiczne albo bardzo szerokie pojęcie, nie wskazujące konkretnie, które operacje są obsługiwane. Spotkałem się z tym głównie w starych podręcznikach lub bardzo ogólnych opisach sprzętu, ale dzisiaj nikt poważny nie mówi o AU w kontekście obliczeń zmiennoprzecinkowych. Typowym błędem myślowym jest założenie, że skoro coś jest „arytmetyczne”, to obsłuży dowolny typ liczby. W praktyce inżynierowie projektujący architekturę procesorów zawsze wyraźnie rozdzielają jednostki dla liczb całkowitych od tych dla zmiennoprzecinkowych, bo to zupełnie inne algorytmy i logika działania. Standardy takie jak IEEE 754 dotyczą właśnie FPU i precyzji operacji na floatach, a nie ALU czy IU. W praktycznym zastosowaniu, np. w oprogramowaniu do grafiki, multimediach czy symulacjach naukowych, to właśnie obecność FPU decyduje o wydajności i poprawności obliczeń. Dlatego akurat w tej dziedzinie nie ma miejsca na dowolność – każda jednostka procesora ma swoje konkretne zadanie i nie warto ich ze sobą mieszać.