Rien n'est gratuit. Les GPGPU sont SIMD. Les instructions SIMD sur les GPGPU ont tendance à être plus larges que les instructions SIMD sur les CPU. Les GPGPU ont tendance à être multithread à grain fin (et ont beaucoup plus de contextes matériels que les CPU). Les GPGPU sont optimisés pour le streaming . Ils ont tendance à consacrer un plus grand pourcentage de surface aux unités à virgule flottante, un pourcentage plus faible de surface à mettre en cache et un pourcentage plus faible de surface aux performances entières.
Faisons une comparaison. Le Core i7-5960x d'Intel dispose de 8 cœurs, chacun avec SIMD 4 larges (double précision), fonctionnant à 3 GHz (3,5 GHz turbo), un cache L3 de 20 Mo, consomme 356 mm ^ 2 et 140 W et coûte 1000 $ . Donc 8 * 4 * 3 * 4 = 384 GFlops double précision. (Le 4x supplémentaire est dû au fait que vous pouvez effectuer deux ajouts-multiplications fusionnés par voie vectorielle par cycle.) Il peut effectuer 768 GFlops simple précision. Cela représente environ 1,08 DP GFlops / mm ^ 2 et 2,75 DP GFlops / Watt. Il y a également environ 57,5 Ko / mm ^ 2 de cache sur puce.
La GeForce GTX Titan Black de NVidia possède 15 SMX, chacun avec une carte SIMD double précision de 32 larges, fonctionnant à 890 MHz (980 MHz turbo), 3,5 M de cache L1 + L2, consomme 561 mm ^ 2, 250 W et coûte 1000 $ . Donc 15 * 32 * .89 * 4 = 1709 GFlops double précision. (Même 4x à partir de deux ajouts-multiplications fusionnés par voie vectorielle par cycle.) Il peut effectuer 5126 GFlops simple précision. Cela représente environ 3,05 DP GFlops / mm ^ 2 et 6,8 DP GFlops / Watt. Donc 3x la densité de virgule flottante DP par unité de surface et 3x l'efficacité énergétique DP en virgule flottante. Et le compromis? 6,4 Ko / mm ^ 2 de cache sur puce. Environ 9 fois moins dense que le CPU.
La principale différence est donc que le GPU a choisi un équilibre de zone qui favorise fortement la virgule flottante (et en particulier la virgule flottante simple précision) par rapport au cache. Même en ignorant le fait que vous devez copier des choses entre le CPU et le GPU pour faire des E / S, la façon dont le GPU va faire par rapport au CPU dépend du programme que vous exécutez.
Si vous avez un programme de virgule flottante parallèle de données avec très peu de divergence de contrôle (toutes les voies vectorielles font la même chose en même temps) et que votre programme est en streaming (ne peut pas bénéficier de la mise en cache), alors le GPU va être sur le point 3 fois plus efficace par unité de surface ou par Watt. Mais si vous avez une quantité importante de contrôle divergent, un travail non parallèle aux données à faire, ou si vous pourriez bénéficier de grandes structures de données à lecture multiple, le processeur fera probablement mieux.