Domanda

Questa è davvero prendendo il mio tempo. Non riuscivo a trovare un modo semplice per stima Flops per un codice che segue (l'anello), Quanto flop sono per una singola iterazione del ciclo:

float func(float * atominfo, float energygridItem, int xindex, int yindex)
{
   ...
   for (atomid=0; atomid<numatoms*4; atomid+=4) 
   {
       float dy = coory - atominfo[atomid+2];
       float dysqpdzsq = (dy * dy) + atominfo[atomid+3];
       float dx1 = coorx1 - atominfo[atomid+1];

       float s, y, t;
       s = atominfo[atomid] * (1.0f / sqrtf(dx1*dx1 + dysqpdzsq));
       y = s - energycomp1;
       t = energyvalx1 + y;
       energycomp1 = (t - energyvalx1)  - y;
       energyvalx1 = t;
    }
    ...
}

Sembra semplice, ma mi sono confuso con alcuni altri numeri dati in precedenza, quindi sarebbe bello se qualcuno può dare un numero esatto.

Grazie.

È stato utile?

Soluzione

Vedo (in ordine crescente di complessità):

  • 8 integrazioni (inc. Sottrazioni)
  • 3 moltiplicazioni
  • 1 reciproca-radice quadrata

Come questi si relazionano tra loro dipende fortemente dalla famiglia di CPU.

Altri suggerimenti

Prova a prendere il codice assembly intermedio o exe decompilare.

Poi contare tutte le operazioni a virgola mobile (in codice assembly x86 cominciano con prefisso F come FSIN).

io reputo 12 più uno sqrt (che è probabile che utilizza il metodo di Newton, che è un anello), ma che dipende dal tipo di dati di alcune variabili che non è stato specificato, e il risultato della compilazione (che può aggiungere di più, o ottimizzare alcune operazioni).

Io conto ogni +, /, -., Oppure * dove l'espressione contiene almeno una variabile in virgola mobile, così indici dell'array e invariante di ciclo non contano, e questi sono interi operazioni

Provare a utilizzare una libreria di misurazione delle prestazioni come PAPI, danno astrazioni a contatori hardware che sarebbe la vostra migliore migliore per misurare il flop. PAPI_FLOPS.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top