Nic nie jest darmowe. GPGPU są SIMD. Instrukcje SIMD na GPGPU są zwykle szersze niż instrukcje SIMD na procesorach. GPGPU mają tendencję do drobnoziarnistej wielowątkowości (i mają znacznie więcej kontekstów sprzętowych niż procesory). GPGPU są zoptymalizowane do przesyłania strumieniowego . Zwykle poświęcają większy procent powierzchni jednostkom zmiennoprzecinkowym, niższy procent powierzchni do pamięci podręcznej i niższy procent powierzchni do wydajności całkowitej.
Zróbmy porównanie. Rdzeń Intela i7-5960x ma 8 rdzeni, każdy z 4-calowym (podwójna precyzja) SIMD, działającym z 3 GHz (3,5 GHz turbo), 20 MB pamięci podręcznej L3, zużywa 356 mm ^ 2 i 140 W i kosztuje 1000 USD. Więc 8 * 4 * 3 * 4 = 384 GFlops o podwójnej precyzji. (Dodatkowe 4x wynika z tego, że można wykonać dwa stopione-wielokrotne-dodania na ścieżkę wektorową na cykl). Może wykonać 768 pojedynczych precyzyjnych GFlopów. To około 1,08 DP GFlops / mm ^ 2 i 2,75 DP GFlops / Watt. Istnieje również około 57,5 KB / mm ^ 2 pamięci podręcznej na chipie.
GeForce GTX Titan Black firmy NVidia ma 15 SMX, każdy z 32-calową podwójną precyzją SIMD, działającą z 890 MHz (980 MHz turbo), 3,5 M pamięci podręcznej L1 + L2, zużywa 561 mm ^ 2, 250 W i kosztuje 1000 USD. Więc 15 * 32 * .89 * 4 = 1709 podwójnej precyzji GFlops. (To samo 4x z dwóch stopionych-pomnożonych -dodanych na ścieżkę wektorową na cykl). Może wykonać 5126 pojedynczych precyzyjnych GFlops. To około 3,05 DP GFlops / mm ^ 2 i 6,8 DP GFlops / Watt. Zatem 3x gęstość zmiennoprzecinkowa DP na jednostkę powierzchni i 3x efektywność energetyczna zmiennoprzecinkowa DP. A kompromis? 6,4 KB / mm ^ 2 wbudowanej pamięci podręcznej. Około 9 razy mniej gęsty niż procesor.
Główną różnicą jest to, że procesor graficzny wybrał równowagę powierzchni, która zdecydowanie faworyzuje zmiennoprzecinkowe (a zwłaszcza zmiennoprzecinkowe pojedynczej precyzji) nad pamięcią podręczną. Nawet ignorując fakt, że musisz kopiować rzeczy między CPU a GPU, aby wykonać operacje wejścia / wyjścia, to jak dobrze GPU poradzi sobie z procesorem, zależy od uruchomionego programu.
Jeśli masz równoległy program zmiennoprzecinkowy danych z bardzo małą rozbieżnością sterowania (wszystkie linie wektorowe robią to samo w tym samym czasie) i twój program przesyła strumieniowo (nie może korzystać z buforowania), wtedy GPU będzie o 3x bardziej wydajna na jednostkę powierzchni lub na wat. Ale jeśli masz znaczną rozbieżną kontrolę, pracę nie równoległą do danych lub możesz skorzystać z dużych struktur danych wielokrotnie odczytywanych, procesor prawdopodobnie zrobi to lepiej.