2019-01-16 Pipeline et processeur#

Trois liens différents vers trois articles qui parlent tous du même sujet : Why use an FPGA instead of a CPU or GPU?, Why use an FPGA instead of a CPU or GPU? (Quora), Why Use an FPGA Instead of a CPU or GPU? (News). On y apprend que le FGPA est plus lent que le CPU et GPU, ou plus précisément qu’un cycle d’exécution du FGPA est plus lent. En revanche, dans ce cycle, on peut y mettre plus d’instructions. Le dernier article cite un chiffre : le FGPA est 10 plus lent mais un cycle peut contenir 20 fois plus d’instructions qu’un CPU. Le dernier article compare les forces et faiblesses de plusieurs approches : FPGA vs CPU vs GPU vs Microcontroller: How Do They Fit into the Processing Jigsaw Puzzle?. FGPA permet d’aller plus vite mais il faut s’y connaître un peu pour les obtenir.

Je recommande également la lecture de l’article Why is it faster to process a sorted array than an unsorted array? qui pourrait changer la façon dont vous écrivez du C++ avec le concept de pipeline de processeur. Si je résume, un processeur, pour aller plus vite, considère le nombre d’instructions qu’il peut exécuter à la suite. Il ne garde pas qu’une instruction (assembleur) dans dans ses registres mais plusieurs. C’est ce qu’on appelle un pipeline. Or, un test modifie la séquence d’une façon que le processeur ne peut prédire. En gros, le processeur est un sprinter qui va plus vite en ligne droite et qui doit freiner dès qu’il doit choisir sa route entre deux possibilités. Plus le programme contient de lignes droites, plus il est rapide. Et pour aller plus vite, le processeur fait un pari sur le résultat du test, s’il a le bon, c’est comme s’il avait parcouru une ligne droite (un pipeline), s’il s’est trompé, il va perdre beaucoup de temps.