Przechytrzyć dane

Zastanawiasz się nad kupnem wydajnego komputera, myślisz o konstrukcji dwuprocesorowej. Ale czy to ma sens? Czy dzisiejsze aplikacje mogą spożytkować moc obliczeniową dwóch jednostek centralnych?

W pogoni za mocą obliczeniową coraz częściej rozglądamy się za maszynami dwuprocesorowymi, ale czy dzisiejsze aplikacje mogą spożytkować moc obliczeniową dwóch CPU?

Zgodnie z prawem Moore’a moc obliczeniowa procesorów podwaja się co osiemnaście miesięcy. Na dzisiejszym poziomie rozwoju technologii osiągi jednostek centralnych, stosowanych nawet w najtańszych domowych pecetach, umożliwiają wykonywanie zadań zarezerwowanych do niedawna wyłącznie dla wydajnych serwerów i stacji roboczych. Obecnie nikogo już nie dziwi płynna, realistyczna, trójwymiarowa grafika, wzbogacona oszałamiającymi efektami dźwiękowymi. Są jednak zadania, m.in. takie jak profesjonalna grafika 3D, projektowanie inżynierskie w systemach CAD/CAM czy kompresowanie filmów do formatu DivX;-), z którymi nie radzą sobie zbyt dobrze nawet najszybsze jednostki Pentium 4 czy Athlon.

Czy jednak wszystkie te oraz inne czasochłonne operacje można przyśpieszyć, korzystając z mocy obliczeniowej kilku procesorów? Owszem tak, ale budując taki komputer, trzeba przede wszystkim zadbać o odpowiednie zgranie poszczególnych jednostek wykonawczych. Na szczęście współczesne systemy operacyjne dysponują odpowiednimi mechanizmami nadzorczymi.

Trochę teorii

Dzisiaj najczęściej stosowanymi systemami operacyjnymi dla komputerów wieloprocesorowych są Windows 2000 oraz Linux. Wbudowana w nie obsługa trybu SMP (Symmetric Multi Processing) pozwala na pełne wykorzystanie dodatkowej mocy obliczeniowej. Jednak dostarczane do procesorów dane muszą spełniać jeden istotny warunek, żeby zadania mogły być wykonywane równolegle.

Otóż większość współczesnych komputerów wykonuje wszystkie rozkazy sekwencyjnie. Pecet, obrabiając dowolne dane, przetwarza je zawsze krok po kroku w ściśle określonej kolejności. Aby to lepiej zrozumieć, prześledźmy obliczenia sekwencyjne na prostym, szkolnym równaniu c=a+b. W pierwszym kroku procesor musi pobrać z pamięci wartości zmiennych a i b, a następnie załadować je do odpowiednich rejestrów. Ostatnim etapem obliczeń jest wykonanie operacji dodawania. Co się jednak stanie, gdy w kolejce do rozwiązania oczekuje następne równanie, np. d=5+a? Otóż w systemie z jednym procesorem trzeba najpierw obliczyć pierwsze równanie (tzn. c=a+b), po czym będzie można zacząć rozwiązywać drugie. Jeżeli jednak nasz komputer dysponuje drugim procesorem, to możemy mu bez problemu (jeszcze w tej samej chwili) zlecić obliczenie wartości d. Gdyby się tak złożyło, że drugie równanie wyglądałoby nieco inaczej, np. d=c+a, to do obliczenia zmiennej d niezbędna jest wiedza o wartości c. Zatem dopóki c nie będzie wyznaczone, nawet dziesięcioprocesorowy pecet nie jest w stanie przyśpieszyć obliczeń. Ten elementarny przykład pokazuje, że wykonywać równolegle można jedynie takie obliczenia, w których wynik jednego działania nie jest zależny od przeprowadzenia innego.

Gdzie przyśpieszać?

Dziedziną, w której można najszybciej skorzystać z dobrodziejstw równoległego przetwarzania danych, jest komputerowa grafika trójwymiarowa. Dzieje się tak dlatego, że większość operacji wykonywana jest na macierzach lub wektorach – przecież każdy punkt w przestrzeni opisywany jest trzema współrzędnymi. Nic nie stoi więc na przeszkodzie, aby np. mnożenie poszczególnych elementów macierzy wykonywać równolegle – tak napisany został m.in. program 3D Studio MAX, wykonujący obliczenia na maszynie dwuprocesorowej dwa razy szybciej. Podobnie jest też w przypadku obliczeń inżynierskich – tam również korzysta się z macierzy.

W wielu przypadkach, m.in. w grze Quake III, włączenie aplikacji w trybie wieloprocesorowym nie przyśpiesza działania, a niekiedy aplikacja wręcz zwalnia. Spowodowane jest to przede wszystkim problemami w synchronizowaniu zadań.

Systemy operacyjne dla maszyn wieloprocesorowych są tak projektowane, aby przydzielały uruchomione zadania, maksymalizując wykorzystanie dostępnych jednostek obliczeniowych. Jak wcześniej zauważyliśmy, nie wszystkie obliczenia można wykonywać równolegle, jednak poprawienie wydajności całego systemu nadal jest możliwe dzięki dodatkowej jednostce wykonawczej. Pod jednym wszakże warunkiem – system operacyjny musi równo rozdzielić zadania (aplikacje) między wszystkie dostępne procesory.

Info

Grupy dyskusyjne
Uwagi i komentarze do artykułu:
#
Pytania techniczne:
#

Internet
Informacje o płytach dwuprocesorowych
http://www.2cpu.com/
http://www.bp6.com/
Porady dla systemów Windows NT/2000
http://www.ntcompatible.com/

Na CHIP-CD w dziale Hardware | Płyty główne znajdują się pliki z dokumentami dotyczącymi płyt dwuprocesorowych

0
Zamknij

Choć staramy się je ograniczać, wykorzystujemy mechanizmy takie jak ciasteczka, które pozwalają naszym partnerom na śledzenie Twojego zachowania w sieci. Dowiedz się więcej.