Z punktu widzenia superkomputerów lepiej nie myśleć procentowo o obciążeniu CPU / GPU, ale raczej określić, ile operacji potrzebuje dany problem, a następnie porównać to z maksymalną wydajnością systemu.
Jeśli uzyskasz 100% wykorzystanie procesora, niekoniecznie oznacza to, że cała wydajność jest uzyskiwana z systemu. Procesory często mogą wykonywać wiele różnych rzeczy jednocześnie, powiedzmy podział i dodatek. Jeśli możesz rozpocząć podział wcześniej, możliwe, że może się on nakładać z dodatkiem. Komputer stacjonarny najprawdopodobniej ma jednostkę poza kolejnością, która zmieni kolejność instrukcji, aby skorzystać z takich nakładek. Lub jeśli masz następujący program:
if (expr1)
expr2;
else
expr3;
Procesor zmieniający kolejność spróbuje obliczyć trzy wyrażenia w tym samym czasie, a następnie wyrzucić wynik jednego z nich. To sprawia, że ogólnie szybciej. Jeśli masz program blokujący i nie możesz zmienić kolejności, oznacza to, że korzystasz z mniejszej liczby linii procesora, ale prawdopodobnie nadal będzie wyświetlać 100%.
Następnie masz funkcje SIMD w procesorach, które są operacjami wektorowymi. To jest jak GPGPU-light w tym sensie, że zwykle masz tylko cztery lub osiem operacji w tym samym czasie, GPU robią jak 32 lub 64. Nadal musisz tego użyć, aby rozwinąć FLOPS.
Rzeczy takie jak fałszywe udostępnianie może prowadzić do dużych kosztów synchronizacji, które zwykle pojawiają się jako obciążenie jądra w Linuksie. Procesor jest w pełni wykorzystywany, ale nie masz zbyt dużej użytecznej przepustowości.
Zrobiłem trochę programowania na maszynie IBM Blue Gene / Q. Ma wiele poziomów hierarchii ( schemat przestarzałych Blue Gene / L ) i dlatego jest trudny do wydajnego programowania. Będziesz musiał użyć pełnej hierarchii do SIMD i SMT (Intel nazywa to HyperThreading), aby uzyskać wydajność.
A potem sieć często Cię ogranicza. Dlatego okazuje się, że szybszy jest czas (zegar ścienny), aby obliczyć rzeczy na wielu procesorach jednocześnie, zamiast komunikować je przez sieć. Spowoduje to większe obciążenie procesorów i przyspieszy działanie programu. Ale rzeczywista przepustowość programu nie jest tak dobra, jak się wydaje na podstawie liczb surowych.
Jeśli dodasz GPU do miksu, będzie jeszcze trudniej zorganizować to wszystko, aby uzyskać wydajność. To będzie jedna z rzeczy, które zacznę robić w mojej pracy magisterskiej QCD Lattice za kilka miesięcy.
NO-OP
s, co spowoduje obciążenie obu urządzeń w 100%.