Czarna magia procesora

Częstotliwość taktowania jednostki centralnej jest najczęściej stosowanym wyznacznikiem wydajności peceta. To nią posługują się sprzedawcy i na nią głównie zwracają uwagę kupujący komputery. Jednak szybkość pracy zegara nie zawsze odzwierciedla rzeczywistą moc obliczeniową CPU (Central Processing Unit). Często znacznie więcej zależy od architektury wewnętrznej, czyli budowy procesora. Aby potwierdzić te słowa, wystarczy spojrzeć na wydajność najnowszych układów Athlon XP (patrz: CHIP 11/2001, str. 12) firmy AMD. Szybkość ich pracy jest na tyle duża, że producent postanowił wprowadzić system oznaczeń odnoszący się do wydajności.

Droga ku wydajności

Abstrahując od szczegółowych rozwiązań, stosowanych przez różne firmy, i architektury 32- czy 64-bitowej, najważniejszym założeniem wykorzystywanym w konstrukcji każdego nowoczesnego procesora jest możliwość potokowego wykonywania rozkazów. Program komputerowy składa się z ciągu następujących po sobie poleceń oraz zbioru danych, na których przeprowadza się poszczególne operacje. Procesor – jako główna jednostka wykonawcza komputera – odpowiada za pobranie z pamięci operacyjnej kodu, przetworzenie danych i wysłanie końcowego wyniku z powrotem do pamięci RAM lub innego urządzenia wyjściowego, np. do karty graficznej czy na dysk twardy.

Śledząc z zewnątrz cykl przepływu danych i instrukcji przez procesor, możemy zauważyć, że wykonanie prostego dodawania dwóch liczb A+B wymaga aż dziewięciu kroków (lub inaczej: taktów zegara) – pobrania instrukcji spod adresu wskazywanego przez tak zwany licznik rozkazów, zdekodowania instrukcji, jej wykonania, czyli w naszym przypadku jest to przesłanie danej A do rejestru R0. Później pobierany jest drugi rozkaz, po czym i on musi zostać zdekodowany, a następnie wykonany (dana B przenoszona jest do drugiego rejestru R1). Pobranie trzeciego rozkazu, zdekodowanie i jego wykonanie (dodanie do A liczby B lub, jak kto woli, zwiększenie zawartości rejestru R0 o liczbę znajdującą się w rejestrze R1) kończy cykl przetwarzania naszego przykładu.

Jak widać, na samo wykonanie pojedynczego rozkazu zużywany jest zawsze jeden takt zegara sterującego, ale na “przerobienie” całej instrukcji programu “zużywa się” już trzy cykle potrzebne na pobranie, dekodowanie i wykonanie. W trakcie tej pracy dwie jednostki procesora nie są obciążone – np. przy dekodowaniu moduł pobierający oraz wykonawczy. Ale przecież tę moc można spożytkować, przyśpieszając pracę komputera! Wystarczy wykonywać zadania “na zakładkę”. Takie udoskonalenie mechanizmu działania procesora nazywa się przetwarzaniem potokowym (pipelining), a o układzie mówi się, że jest wykonany w architekturze potokowej.

Rzeka ze strumieni

Procesor zaprojektowany w najprostszej trójfazowej architekturze – czyli mający trzy niezależne fazy wykonywania instrukcji w jednym potoku (pobieranie, dekodowanie, wykonanie) – nasz przykładowy program wykona w ciągu zaledwie siedmiu cykli. Ponadto w tym samym czasie mogą być również wykonane dwie z trzech faz instrukcji poprzedzającej nasze dodawanie i dwie fazy z dalszej części programu. W sumie w ciągu siedmiu cykli zegara wykonanych zostanie 4 i 1/3 instrukcji. Przyśpieszenie szybkości przetwarzania danych jest ewidentne – jedna instrukcja wykonywana jest średnio w 1,6 cyklu zegarowego!

Jednak nie ma róży bez kolców – przyglądając się uważnie naszemu przykładowemu dodawaniu (patrz: ramka obok), można zauważyć też wady architektury potokowej. Część operacji (faz potoku) musi zostać wstrzymana ze względu na to, że wymagałaby wykorzystania tych samych jednostek wykonawczych procesora. Inżynierowie konstruujący współczesne procesory obchodzą ten problem w dość prosty sposób – wydłużając potok wykonawczy. Zwiększenie liczby faz zmniejsza bowiem ryzyko wystąpienia sytuacji, w której operacje muszą zostać wstrzymane ze względu na “zajętość” którejś z jednostek wykonawczych.

Długość potoku w CPU spotykanych na rynku waha się od siedmiu w układach VIA C3 do dwudziestu faz w Pentium 4. Dodatkowo podział potoku na wiele faz zmniejsza stopień złożoności układów logicznych obsługujących kolejne etapy wykonywania instrukcji. To z kolei umożliwia zastosowanie wyższych częstotliwości zegara taktującego, a więc dalsze przyśpieszenie szybkości pracy procesora. Dlaczego więc nie stosuje się potoków np. stufazowych?

Więcej:bezcatnews