Schizofrenia procesora

Najczęściej stosowanym, zarówno przez użytkowników, jak i producentów, parametrem określającym szybkość pracy komputera jest częstotliwość zegara perocesora. Nie ma w tym nic dziwnego, każdy przecież wie o tym, że lepiej mieć “na liczniku” 2 GHz niż 1,7 GHz. Czasami jednak taka prosta logika się nie sprawdza, o czym dobrze wiedzą posiadacze komputerów z układami Athlon XP, w których szybkość zegara nie odzwierciedla wydajności układu. Stąd pojawił się system oznaczania odnoszący się bezpośrednio do mocy przerobowej Athlona.

Przyśpieszenie działania procesorów ponad to, co wynikałoby li tylko z samej częstotliwości zegara taktującego, spowodowane jest zwielokrotnieniem jednostek wykonawczych (architektura superskalarna) i rozbiciem cyklu przetwarzania pojedynczej instrukcji na wiele faz (tzw. wielopotokowość) – patrz: CHIP 2/2002, 62. Takie działanie umożliwia procesorom równoległe wykonywanie kilku operacji w jednym takcie zegara, dzięki czemu zwiększa się moc obliczeniowa pojedynczego CPU (Central Processing Unit).

A ja nie mam co robić

Jednostki wykonawcze w procesorze superskalarnym nie zostają jednak nigdy w stu procentach wykorzystane, gdyż sama struktura programu uniemożliwia równoległe wykonywanie kilku operacji. Dzieje się tak przede wszystkim dlatego, że poszczególne operacje są ze sobą powiązane – np. dane dla kolejnej instrukcji są wynikiem działania poprzedniego rozkazu. Aby ominąć ten problem, w układach superskalarnych stosuje się mały trik, polegający na zmianie kolejności wykonywania instrukcji (ang. out of order execution), tak aby równolegle przetwarzać niezależne od siebie rozkazy. Dopiero na końcu na podstawie informacji zgromadzonych w buforze zmiany kolejności instrukcji (ang. ROB – ReOrder Buffer) wszystkie dane są porządkowane zgodnie z przebiegiem wykonywanego przez procesor programu.

Wszystkie opisane tu zabiegi umożliwiają zwiększenie liczby wykonywanych w jednym czasie instrukcji. Dla Pentium 4 mającego pięć jednostek wykonawczych współ- czynnik IPC (ang. Instruction Per Cycle) wynosi nieco ponad trzy operacje, a Athlon XP z dziewięcioma modułami wykonawczymi jest w stanie naraz przetworzyć sześć rozkazów. Jak widać, w każdym procesorze tkwi jeszcze zapas niewykorzystanej mocy. Co więcej, średnie obciążenie jednego potoku nie przekracza 30%. A gdyby zwiększyć utylizację potoków, wprowadzając do obróbki jeszcze jeden wątek?

Co ma software do…

Od strony programistycznej idea wielozadaniowego (ang. multitasking) przetwarzania danych nie jest nowa, pochodzi bowiem z początku lat sześćdziesiątych ubiegłego wieku. W świecie komputerów PC pierwszym systemem “wielozadaniowym” był Windows 3.1, w którym pojawiła się tzw. wielozadaniowość bez wywłaszczania – system mogł jednocześnie wykonywać kilka aplikacji (zadań). Wielowątkowość, czyli możliwość się rozgałęzienia się jednego procesu (np. programu) na kilka niezależnie wykonywanych wątków (ang. threads) w domowych komputerach pojawiła się wraz z premierą Windows 95. Współczesne systemy operacyjne z wielozadaniowością i wielowątkowością radzą sobie dość dobrze, przy czym trzeba pamiętać, że procesor jest w stanie na raz wykonywać zaledwie jeden wątek, a każde zadanie lub proces są co jakiś czas przerywane, po to aby CPU mógł się zająć kolejnym wątkiem z następnego zadania lub procesu. Ta misja spoczywa właśnie na systemie operacyjnym, który notabene też składa się z wielu jednocześnie uruchomionych procesów.

Niestety, przełączanie procesora z jednego zadania na drugie wymaga czasu. Straty w wydajności często sięgają setek cykli zegara, a im więcej uruchomiliśmy na naszym komputerze procesów, tym częściej mamy do czynienia z większymi sumarycznymi stratami wydajności. Szybkość działania peceta maleje więc w miarę wzrostu liczby zadań. Kto nie wierzy, niech uruchomi naraz, kilka mało wymagających programów (np. skaner antywirusowy, pocztę, pobieranie plików klientem FTP) i włączy odtwarzanie plików MP3, a przekona się, jak szybko komputer zacznie się “ślimaczyć”.

Do niedawna, aby zwiększyć wydajność komputera i umożliwić jednoczesne wykonywanie większej liczby wątków, stosowano klasyczne maszyny wieloprocesorowe typu SMP (Symetrical Multi Processing) lub różnego rodzaju rozwiązania klastrowe (ang. cluster). W obu przypadkach system operacyjny musi zatroszczyć się o optymalne przydzielenie zadań wszystkim jednostkom centralnym.

Więcej:bezcatnews