Skip to content

Optimisations et simplifications du prototype de corrélateur

GRASLAND Hadrien requested to merge correlator-tweaks into develop

En avançant dans l'intégration du corrélateur, j'ai remarqué plusieurs choses :

  • L'autotuning de la taille du bloc de paquets qu'on traite est d'une complexité inutile quand la valeur 3 tunée manuellement semble optimale sur tous les CPUs que j'ai sous la main.
  • Telle qu'elle est écrite actuellement, l'accumulation ne tire pas pleinement profit des instructions FMA (fused multiply-add) du CPU. Il est possible de les utiliser davantage avec une modif relativement simple de l'algorithme.
  • Ma logique de prefetch est inutilement complexe, on peut faire aussi bien avec moins d'instructions prefetch.
  • Au cours d'un refactoring de la fonction de prefetch, j'ai accidentellement cassé la compatibilité clang. C'est corrigé (et d'ailleurs, clang génère du code plus optimal que GCC maintenant, il y a longtemps c'était le contraire...).
  • En fait, c'est ok de changer l'ordre des paquets dans le RAcqMemZoneMgr, c'est juste l'intérieur des paquets que je ne peux pas toucher. Du coup, je peux utiliser un layout de données un peu plus optimal : paquet 1 du flux 1, paquet 1 du flux 2, ..., paquet 1 du flux N, paquet 2 du flux 1, ...

Tout ça combiné permet quand même un gain de perf de +73% sur les processeurs AMD actuels (Zen 3). Bon, malheureusement sur nos processeurs Intel Cascade Lake l'impact n'est pas aussi énorme, on est plutôt dans les +10%, même si c'est toujours bon à prendre...

Merge request reports