Quelle est la structure sous-jacente des performances du code scientifique?

11

Considérez deux ordinateurs avec des configurations matérielles et logicielles différentes. Lorsque vous exécutez exactement le même code Navier-Stokes série sur chaque plate-forme, il faut x et y temps pour exécuter une itération pour l'ordinateur 1 et 2, respectivement. Dans ce cas, , est la différence de temps d'itération entre l'ordinateur 1 et l'ordinateur 2.Δ=X-y

Quel pourrait être l'impact sur l'amplitude de ? Un candidat évident est le CPU, ma principale question est de savoir s'il existe d'autres facteurs qui pourraient avoir un impact sur dans le même ordre que la différence matérielle entre les CPU?ΔΔ

Oscillation isopycnale
la source
4
Bien sûr, votre n'est qu'un échantillon unique. Vous devez également étudier comment Δ dépend de la taille et de la structure du problème. Deuxièmement, je suggérerais de profiler le code, d'essayer de diviser x et y dans la somme des différentes contributions et d'analyser les performances de différentes parties du code par rapport aux configurations hw et sw. ΔΔXy
Stefano M
4
CACHE LINE MANQUE . C'est la première chose à considérer. La mémoire est le facteur de goulot d'étranglement pour de nombreux algorithmes.
Deer Hunter

Réponses:

13

Cette liste est loin d'être complète, mais j'espère que sa taille donnera une indication quant à l'échelle des facteurs possibles. Je suppose que vous compilez le code à partir des sources sur la plate-forme de votre choix.

Logiciel

  • Performances de bibliothèque standard
  • Lin. Alg. Performances de la bibliothèque (si le logiciel est lié à des bibliothèques externes)
  • Choix du compilateur
  • Optimisation du compilateur
  • Indicateurs du compilateur
  • Processus d'arrière-plan (peuvent varier considérablement si les systèmes d'exploitation sont différents)

Matériel

CPU

  • Vitesse de l'horloge
  • Architecture (la même instruction peut prendre différents nombres de cycles sur différentes architectures)
  • Tailles de cache
  • Latence du cache
  • Capacité SIMD (instruction unique, données multiples)

Mémoire

  • Nombre de canaux
  • La vitesse

Disque dur

  • Vitesse de lecture / écriture (surtout uniquement pour l'écriture des résultats, cela dépend donc de la fréquence à laquelle vous écrivez la sortie dans un fichier pour un solveur NS, mais pourrait être important pour d'autres programmes qui font des choses comme le traitement d'image)

Tout cela ignore les petits trucs et fonctionnalités que différents fabricants incluent pour donner à leurs puces un avantage sur le marché. Le gros problème est que de nombreuses bibliothèques d'algèbre linéaire clairsemées sont liées à la mémoire. Faire une multiplication de matrice clairsemée implique beaucoup de données se déplaçant sans beaucoup de flops réels.

Godric Seer
la source
J'ajouterais, au CPU, à la fois le nombre de cœurs et ses capacités SIMD.
Pedro
@Pedro J'ai laissé les cœurs éteints depuis la question du solveur série, mais j'ajouterai SIMD. Merci.
Godric Seer
1
@GodricSeer J'ai compilé sur une machine, puis je l'ai exécuté. Ensuite, en utilisant le même exécutable compilé, je l'ai exécuté sur la deuxième machine. D'après votre explication, il semble qu'il serait préférable de recompiler à partir de la source sur le deuxième ordinateur. Est-ce le cas?
Oscillation isopycnale du
1
@IsopycnalOscillation Lors de la compilation sur / pour une machine spécifique, vous pouvez utiliser l'option gcc / gfortran -march=native, ou l'option icc / ifort -xHOSTqui appliquera des optimisations spécifiques à l'architecture sous-jacente.
Pedro
1
Un point clé ici est que la performance informatique n'est pas une grandeur unidimensionnelle. L'équilibre relatif de tous les facteurs énumérés ci-dessus par Godric peut varier considérablement, même pour les ordinateurs équipés de puces de processeur du même fabricant (par exemple Intel). Par conséquent, différents points de référence peuvent afficher des ratios de performances très différents pour deux processeurs. En pratique, la plupart des machines modernes manquent sérieusement de bande passante mémoire pour prendre en charge les charges de travail de calcul scientifique et c'est souvent le goulot d'étranglement.
Brian Borchers
2

X/yX-y

Deuxièmement, votre question exclut spécifiquement les différences de logiciels. D'après mon expérience, les récompenses de performances pour un réglage soigneux peuvent être de grands facteurs, donc pendant que vous envisagez des problèmes matériels, n'oubliez pas les problèmes logiciels. Après tout, le matériel ne peut exécuter que les instructions que vous lui donnez, et si vous lui en donnez moins, il se terminera plus tôt.

Ne pas trop développer cela, mais pour tout problème donné, il existe une infinité de programmes dénombrables qui le résoudront. Parmi ceux-ci, certains prennent moins de temps que tous les autres, et c'est une limite inférieure. Ne présumez pas qu'un programme est à ou même près de cette limite inférieure s'il n'a pas été soigneusement réglé.

Ce lien explique en détail la méthode peu orthodoxe que j'utilise.

Mike Dunlavey
la source