Na rynku procesorów dla komputerów klasy PC swoje miejsce już dawno znalazÅ‚y procesory tzw. dwurdzeniowe, a procesory czterordzeniowe stajÄ… siÄ™ coraz taÅ„sze. Procesor wielordzeniowy to de facto ukÅ‚ad kilku oddzielnych procesorów o współdzielonej magistrali. Rodzi siÄ™ pytanie, czy procesor n-rdzeniowy wykona szereg operacji n razy szybciej niż jeden procesor. Jak Å‚atwo siÄ™ domyÅ›leć, odpowiedź brzmi “nie, jest wykona”.
Oprogramowanie nie jest idealne i nie jest przystosowane do obsÅ‚ugi wielu procesorów. WiÄ™kszość wykorzystywanych przez nas algorytmów ma charakter sekwencyjny, tzn. aby wykonać nastÄ™pny krok, trzeba zakoÅ„czyć poprzedni. Nawet gdy programista poprawi algorytm tak, aby korzystaÅ‚ z wszystkich procesorów, nigdy nie osiÄ…gnie stuprocentowej skutecznoÅ›ci. W praktyce, ta część programu, której nie daje siÄ™ zrównoleglić wynosi co najmniej 10%. Czy wiÄ™c procesor 100-rdzeniowy jest tylko 10% wolniejszy od 100 osobnych procesorów? Kolejny raz odpowiadam “nie”.
Gene Amdahl sformułował prawo dotyczące wyznaczania maksymalnego przyśpieszenia programu równoległego w środowisku wieloprocesorowym.

n to liczba procesorów, a s to procent części sekwencyjnej programu.
Wzór interpretujemy w taki sposób, że zawsze istnieje nierównoległa część programu, w której trzeba oczekiwać na wynik poprzedniej operacji. Niemożliwe staje się więc wtedy przekazanie kolejnego rozkazu innemu procesorowi.
Poniżej przedstawiam teoretyczne przyśpieszenie programu w stosunku do systemu jednoprocesorowego na systemach o różnej ilości procesorów. Wartość dla nieskończenie wielu procesorów została obliczona z granicy funkcji. Testuję kilka programów o różnym procencie zrównoleglenia. Wartość liczbowa wyraża przyśpieszenie w stosunku do systemu 1-procesorowego.
| % sekwencyjności | 15% | 10% | 5% | 0,1% |
| 1 procesor | 1 | 1 | 1 | 1 |
| 2 procesory | 1,7 | 1,8 | 1,9 | 2 |
| 4 procesory | 2,8 | 3,1 | 3,5 | 4 |
| 8 procesorów | 3,9 | 4,7 | 5,9 | 7,9 |
| 20 procesorów | 5,2 | 6,9 | 10,3 | 19,6 |
| 100 procesorów | 6,3 | 9,2 | 16,8 | 91 |
| nieskończenie wiele | 6,7 | 10 | 20 | 1000 |
Jak widać, potencjalnie niewielki procent kodu, który nie daje się wykonać równolegle ma bardzo poważne skutki w wydajności programu na większej ilości procesorów. Nawet 99,9% równoległości programu spowoduje teoretycznie wzrost szybkości maksymalnie tysiąckrotnie.
Popatrzmy teraz na benchmark, aby odnieść te teoretyczne obliczenia do rzeczywistości. Bierzemy pod uwagę procesory Phenom X3 8750 oraz Phenom X4 9750. Są one idealne do tego porównania, ponieważ różnią się tylko i wyłącznie ilością rdzeni, podczas gdy częstotliwość taktowania, czy ilość pamięci podręcznej jest taka sama.
![]()
Jak widać, w żadnym z testów procesor trzyrdzeniowy nie jest półtora razy szybszy od dwurdzeniowego, choć potencjalnie tego byśmy oczekiwali. Jest to potwierdzenie, że rzeczywiście programy testujące nie są do końca równoległe. Przy okazji oceniłem program WinRAR, aby określić, w jakim stopniu algorytm kompresujący jest napisany równolegle. Wynik to ok. 90%.
W teście nie brałem pod uwagę strat wydajności wynikających z konstrukcji sprzętu, np. zapychania się magistrali między procesorami, problemów z zachowaniem spójności danych w poszczególnych L1 cache z pamięcią RAM, czy podziałem wątków na procesory (system operacyjny).
PowiÄ…zane:
- Benchmarki pochodzÄ… z PCLab.
- Arkusz kalkulacyjny z obliczeniami przyśpieszenia


1 response so far ↓
tyranka // czerwca 26, 2008 at 10:54
Powiem tak, mam procesor dwurdzeniowy, ale po pewnym czasie pracy z windowsem nie odczówam tego wogóle, bo i tak się wszystko wiesza ;) Tylko może ze jak sie wszystko prawei zawiesi to kursorem da się jeszcze machac - taka roznica :P
Leave a Comment