Ничто не бесплатно. GPGPUs являются SIMD. Инструкции SIMD на GPGPU имеют тенденцию быть шире, чем инструкции SIMD на CPU. GPGPU, как правило, являются многопоточными (и имеют гораздо больше аппаратных контекстов, чем процессоры). GPGPU оптимизированы для потоковой передачи . Как правило, они выделяют больший процент площади для блоков с плавающей запятой, меньший процент площади для кэширования и меньший процент площади для целочисленной производительности.
Давайте сделаем сравнение. Ядро Intel i7-5960x имеет 8 ядер, каждое с 4-разрядной SIMD (двойной точности), работающей на частоте 3 ГГц (3,5 ГГц с турбонаддувом), кэш-памятью L3 20 МБ, потребляет 356 мм ^ 2 и 140 Вт и стоит 1000 долларов . Итак, 8 * 4 * 3 * 4 = 384 GFlops двойной точности. (Дополнительное 4x связано с тем, что вы можете сделать два слияния-умножения-добавления на векторную дорожку за цикл.) Он может сделать 768 GFlops с одинарной точностью. Это примерно 1,08 DP GFlops / мм ^ 2 и 2,75 DP GFlops / Вт. Также имеется около 57,5 КБ / мм ^ 2 встроенного кеша.
GeForce GTX Titan Black от NVidia имеет 15 SMX, каждая с SIMD-картой двойной точности 32 ширины, с тактовой частотой 890 МГц (турбо 980 МГц), 3,5 М кэш-памяти L1 + L2, потребляет 561 мм ^ 2, 250 Вт и стоит 1000 долларов . Итак, 15 * 32 * .89 * 4 = 1709 GFlops двойной точности. (То же самое 4x из двух слитых-умножений-добавок на векторную дорожку за цикл.) Он может сделать 5126 GFlops одинарной точности. Это примерно 3,05 DP GFlops / мм ^ 2 и 6,8 DP GFlops / Вт. Таким образом, 3x плотность с плавающей запятой DP на единицу площади и 3x КПД мощности с плавающей запятой DP. И обмен? 6,4 КБ / мм ^ 2 встроенного кэша. Примерно в 9 раз меньше, чем у процессора.
Таким образом, основное отличие состоит в том, что графический процессор выбрал баланс площадей, который сильно предпочитает с плавающей запятой (и особенно с плавающей запятой одинарной точности) над кэшем. Даже если игнорировать тот факт, что вам нужно копировать данные между процессором и графическим процессором для выполнения операций ввода-вывода, то насколько хорошо будет работать графический процессор по сравнению с процессором, зависит от программы, которую вы запускаете.
Если у вас есть программа с плавающей запятой для параллельных данных с очень небольшим расхождением в управлении (все векторные линии делают одно и то же в одно и то же время), и ваша программа выполняет потоковую передачу (не может извлечь выгоду из кеширования), тогда GPU будет примерно В 3 раза эффективнее на единицу площади или на ватт. Но если у вас есть какой-либо значительный объем расходящегося контроля, непараллельной работы, или вы могли бы извлечь выгоду из больших структур данных, многократно читаемых, ЦП, вероятно, будет работать лучше.