2012-02-18 5 views
5

Comment mesurer FLOPS ou IOPS? Si je mesure le temps pour l'addition/la multiplication à virgule flottante ordinaire, est-ce l'équivalent de FLOPS?Comment mesurer FLOPS

+1

Voulez-vous dire "IPS"? IOPS est quelque chose de très différent. –

Répondre

1

Les FLOP ne sont pas bien définis. mul FLOPS sont différents de l'ajout de FLOPS. Vous devez soit arriver à votre propre définition ou prendre la définition d'un indice de référence bien connu.

2

Habituellement, vous utilisez un cas-test bien connu. Des choses comme MIPS et megaFLOPS ne signifient pas grand-chose pour commencer, et si vous ne les limitez pas à des benchmarks spécifiques, même ce petit bout de sens est perdu.

Typiquement, par exemple, la vitesse entière sera indiquée dans "MIPS" et "flopack megaFLOPS". Dans ceux-ci, "drystone" et "Linpack" sont les noms des repères utilisés pour faire les mesures.

Les IOPS sont des opérations d'E/S. Ils sont à peu près les mêmes, bien que dans ce cas, il n'y ait pas autant d'accord sur le (s) benchmark (s) à utiliser (bien que SPC-1 semble assez populaire).

2

Vous pouvez utiliser les compteurs de performance de la CPU pour que la CPU compte elle-même le nombre d'opérations en virgule flottante qu'elle utilise pour votre programme particulier. Ensuite, il est simple de diviser cela par le temps d'exécution. Sur Linux les outils de perf permettre que cela se fait très facilement, j'ai un writeup sur les détails de cette sur mon blog ici:

http://www.bnikolic.co.uk/blog/hpc-howto-measure-flops.html

+0

Merci d'avoir posté votre réponse! Veuillez vous assurer de lire attentivement la [FAQ sur l'autopromotion] (http://stackoverflow.com/faq#promotion). Notez également qu'il est * obligatoire * que vous publiez une clause de non-responsabilité chaque fois que vous créez un lien vers votre propre site/produit. –

0

Ceci est une question hautement spécifique d'architecture, pour un naïf/base/commencer à démarrer Je recommanderais de savoir combien de multiplications d'Opérations 1 prendre sur votre matériel spécifique, puis faire une grande multiplication de matrice, et voir combien de temps cela prend. Ensuite, vous pouvez eaisly estimer le FLOP de votre matériel particulier

la norme de l'industrie de la mesure flops est bien connu Linpack ou HPL high performance linpack, essayez de regarder à la source ou en cours d'exécution ceux de votre auto

Je voudrais également faire référence à cette réponse excellent reference

3

FLOPS est une opération en virgule flottante par seconde. Pour mesurer FLOPS, vous devez d'abord avoir du code qui effectue de telles opérations. Si vous avez un tel code, ce que vous pouvez mesurer est son temps d'exécution. Vous devez également additionner ou estimer (ne pas mesurer!) Toutes les opérations à virgule flottante et les diviser sur le temps de calcul du mur. Vous devriez compter toutes les opérations ordinaires comme les additions, les soustractions, les multiplications, les divisions (oui, même si elles sont plus lentes et mieux évitées, elles sont encore des FLOPS ..). Faites attention à la façon dont vous comptez! Ce que vous voyez dans votre code source n'est probablement pas ce que le compilateur produit après toutes les optimisations. Pour être sûr que vous aurez probablement à regarder l'ensemble ..

FLOPS n'est pas le même que les opérations par seconde. Ainsi, même si certaines architectures ont une seule instruction MAD (multiplication et ajout), celles-ci comptent toujours comme deux FLOP. De même, les instructions SSE. Vous les considérez comme une seule instruction, bien qu'ils effectuent plus d'un FLOP.

Les FLOPS ne sont pas entièrement dénués de sens, mais vous devez faire attention lorsque vous comparez vos FLOPS à sb. elses FLOPS, en particulier les fournisseurs de matériel. Par exemple. NVIDIA fournit les performances FLOPS maximales pour leurs cartes en supposant des opérations MAD. Donc, à moins que votre code n'en comporte, vous n'obtiendrez jamais cette performance. Repensez l'algorithme, ou modifiez le FLOPS matériel de pointe par un facteur correct, que vous devez comprendre pour votre propre algorithme! Par exemple, si votre code n'effectue que la multiplication, vous devez le diviser par 2. Compter correctement pourrait rendre votre code de sous-optimal à assez efficace sans changer une seule ligne de code.

Questions connexes