Le pic théorique FLOP / s est donné par:
Le nombre de coeurs est facile. La fréquence moyenne devrait, en théorie, prendre en compte une certaine quantité de Turbo Boost (Intel) ou Turbo Core (AMD), mais la fréquence de fonctionnement est une bonne limite inférieure. Les opérations par cycle dépendent de l'architecture et peuvent être difficiles à trouver (8 pour SandyBridge et IvyBridge, voir diapositive 26 ). C'est le sujet de cette question de débordement de pile , qui comprend des chiffres pour un tas d'architectures modernes.
Nombre de cœurs ∗ Fréquence moyenne ∗ Opérations par cycle
Vous devrez connaître le modèle et le fournisseur des CPU de votre machine. Une fois que vous avez cela, vous pouvez rechercher sur le site Web du vendeur (ou peut-être sur Wikipedia) la fréquence d'horloge, le nombre de puces / sockets, le nombre de cœurs par puce, le nombre d'opérations en virgule flottante par cycle et la largeur vectorielle de ces opérations . Ensuite, vous multipliez simplement.
Prenez, par exemple, les processeurs Intel Xeon E5-2680 "Sandy Bridge" de Stampede où je travaille. Les spécifications sont les suivantes:
La multiplication de ces données donne 345,6 GF / nœud ou 2,2 PF pour la partie non accélérée du système.
Nous pensons généralement en termes d'opérations en double précision (64 bits), car c'est la précision requise pour la grande majorité de nos utilisateurs, mais vous pouvez refaire le calcul en termes de simple précision si vous le souhaitez. Cela ne change généralement que le dernier facteur, disons 8 SP Flops / instruction au lieu de 4 DP Flops / inst, mais cela peut être très différent de cela. Les GPU plus anciens, par exemple, ne faisaient que le DP à environ 1/8 du taux de SP. Si jamais vous citez un nombre pour votre système, vous devez être explicite sur ce que vous avez utilisé si ce n'est pas en double précision car les gens penseront que c'est le cas, sinon.
De plus, si votre puce prend en charge les instructions FMA (Multiply-Add) fusionnées, et qu'elle peut les faire à plein débit, la plupart des gens comptent cela comme 2 opérations à virgule flottante, bien qu'un compteur de performances matérielles puisse le compter comme une seule instruction.
Enfin, vous pouvez également le faire pour tous les accélérateurs qui pourraient exister dans votre système (comme un GPU ou Xeon Phi) et ajouter ces performances aux performances du processeur pour obtenir un total théorique.
la source
Je comprends que vous avez demandé la valeur théorique, mais comme cela est presque toujours inaccessible par tout code réel, même LINPACK, vous voudrez peut-être simplement exécuter (optimisé) DGEMM pour les très grandes matrices. La raison pour laquelle je préfère cette méthode est qu'elle expose certains des défauts de certains processeurs qui les empêchent d'atteindre leur valeur de flop de crête théorique.
Par exemple, les GPU NVIDIA effectuent actuellement des opérations entières et à virgule flottante sur le même pipeline. Cela signifie que vous ne pouvez atteindre le ou les flops de crête théoriques que si vous ne faites aucun calcul entier . Comme l'indexation de tableaux et toute autre forme d'accès aux données nécessitent une arithmétique entière quelque part, aucun code ne peut atteindre le ou les flops de crête théoriques sur un GPU NVIDIA. Dans la plupart des cas, on voit ~ 80% comme la limite supérieure. Pour les processeurs qui émettent simultanément des opérations en nombre entier et en virgule flottante, ce n'est pas un problème.
Sur certains processeurs multicœurs de type GPU comme Intel Knights Corner et Blue Gene / Q, il est plus difficile d'atteindre le pic / flop que sur les processeurs traditionnels pour des problèmes de pipeline similaires (bien que les deux puissent atteindre ~ 90% du pic dans les grands DGEMM au moins ).
la source