2016-07-12 5 views
0

Je souhaite calculer mflops (millions d'opérations par seconde par processeur) d'une application HPC (référence NAS) sans exécuter l'application. J'ai mesuré la bande passante mémoire de chaque cœur de mon système (un supercalculateur) en utilisant Stream Benchmark. Je me demande comment je peux obtenir les mflops par processeur de l'application en ayant des informations sur la bande passante mémoire des cœurs. Mon nœud dispose d'une mémoire de 64 Gbits/s (incluant 16 sockets-2 sockets) et d'une bande passante agrégée de 58 Gio/s en utilisant tous les cœurs physiques. La bande passante de mémoire de mes cœurs varie de 2728.1204 Mo/s à 10948.8962 Mo/s pour la fonction Triad que cela doit être dû à l'architecture NUMA.Calcul de mflop/s d'une application HPC à l'aide de la bande passante mémoire

Toute aide serait appréciée.

+0

Et combien d'opérations sont effectuées pour chaque accès à la mémoire? OpsPerAccess * MemoryBandwidth/sec = ops/s – enhzflep

+0

@enhzflep Comment obtenir l'OpsPerAccess? sall j'utilise un outil et utilise l'application pour le trouver? – Matrix

+0

Aucune idée. Si vous avez seulement le nombre d'accès par seconde, c'est le seul chiffre que j'imagine que vous pouvez utiliser en combinaison avec le seul autre chiffre que vous avez - la bande passante mémoire. Selon la taille des boucles internes, je regarde simplement l'assemblage généré et le calcule grossièrement à la main. Naturellement, ce calcul ne prendra pas en compte des choses comme les erreurs de cache, etc. Malheureusement, je suppose que vous n'avez pas assez d'informations pour générer quoi que ce soit de mieux qu'une estimation vague et approximative des performances de votre application. – enhzflep

Répondre

1

Vous ne pouvez pas obtenir d'estimation de MFLOPS/GFLOPS de référence uniquement à partir des résultats de bande passante mémoire de STREAM. Vous avez besoin de connaître deux autres paramètres: pic MFLOPS/GFLOPS de votre noyau CPU (mieux que les opérations max FLOP par cycle d'horloge avec toutes les variantes d'instructions vectorielles et limites de fréquence CPU: min, mean, max) et aussi GFLOPS/GBytes (flops to octets ratio, Arithmetic Intensity) de chaque programme que vous devez estimer (chaque Benchmark NAS). Le benchmark Stream a une très faible intensité arithmétique (0 DP = FP64 flops par deux opérandes doubles = 2 * 8 octets en copie, 1 flop par 16 octets en Scale, 1 flops/24 octets en Add et 2 flops/24 octets dans Triad). Ainsi, le benchmark Stream est limité par la bande passante mémoire dans les exécutions correctes (et par la bande passante du cache dans les exécutions incorrectes). De nombreux points de référence peuvent avoir plus

Avec ces données (bande passante mémoire, max Gflops/GHz sur différents niveaux de vectorisation, normal/maximale/basse fréquence de cpu, intensité arithmétique du test), vous pouvez commencer à utiliser le modèle de performance ligne de toit https://crd.lbl.gov/departments/computer-science/PAR/research/roofline/

Roofline model example; memory limited part

avec ligne de toit vous avez axe x avec flops/octet; y axe de GFlop/s (les deux sont à l'échelle logarithmique). La ligne du "toit" se compose de deux parties pour chaque CPU (ou machine).

La première partie est inclinée et correspond à une faible intensité arithmétique. Les applications de cette partie devront attendre que les données soient chargées depuis la mémoire, elles n'ont pas de données à exploiter avec la vitesse de GFlop/s du CPU; les tests sont limités par la mémoire. Cette ligne est définie par le benchmark STREAM.

La deuxième partie de la ligne est droite, elle correspond à une intensité plus élevée. Les tâches ici ne sont pas limitées par la bande passante mémoire, elles sont limitées par les FLOPS disponibles. Et pour CPU moderne, toutes les flops ne sont disponibles que avec une large instruction vectorielle (parallélisme d'instruction), et toutes les tâches ne peuvent utiliser des vecteurs les plus larges:

Roofline model; Gflops ILP limited part