2011-07-29 17 views
6

W książce Programming Massively Parallel Processors liczba gflops jest używana do porównania wydajności różnych jąder mnożenia macierzy. Jak obliczyć to dla moich własnych ziaren na mojej własnej maszynie?Jak zmierzyć gflops jądra mnożenia macierzy?

Gdzieś na forach NVIDIA znalazłem ten "algorytm", ale nie wiem, jak ważny jest on lub skąd pochodzą czasy drugie.

NumOps = 2 * pow(MatrixSize,3) 
gflops = 1.0e-9 * NumOps/ExecutionTime 

p.s. zmień znaczniki ...

Odpowiedz

8

Możesz zmierzyć GFLOP, uruchamiając algorytm z dużym wejściem i mierząc czas wykonania. Następnie wprowadź czas wykonania i rozmiar macierzy do tej formuły. W przypadku rozmiarów matrycy wystarczająco dużych, aby utrzymać cały ruch maszyny, FLOP jest słabo zależne od rozmiaru matrycy.

Algorytm mnożenia macierzy GPU wykonuje taką samą liczbę operacji zmiennoprzecinkowych jak algorytm naiwny.

for (i = 0; i < MatrixSize; i++) 
    for (j = 0; j < MatrixSize; j++) 
    for (k = 0; k < MatrixSize; k++) 
     C[j][i] += A[j][k] * B[k][i]; 

Istnieją 2 operacje zmiennoprzecinkowe w ciele pętli i MatrixSize * MatrixSize * MatrixSize iteracje ciała pętli, co daje wzór na NumOps. GFLOP to tylko liczba operacji na sekundę podzielona przez 10^9 ("giga").

+1

+1. Po prostu dodam, że na sprzęcie z wbudowaną instrukcją FMAD (fused multiply and add), która zawiera wszystkie najnowsze procesory nvidia, ludzie będą sprzeczać się, czy użyć współczynnika 2 przed terminem MatrixSize^3. Tak długo, jak robisz to konsekwentnie, nie powinno to mieć większego znaczenia. –

Powiązane problemy