Как измерить шквал ядра умножения матриц? - PullRequest
6 голосов
/ 29 июля 2011

В книге Programming Massively Parallel Processors количество гфлопс используется для сравнения эффективности различных ядер умножения матриц. Как бы я вычислил это для моих собственных ядер на моей машине?

Где-то на форумах NVIDIA я нашел этот «алгоритм», но я не знаю, насколько он действителен или откуда взяты два раза.

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

p.s. пожалуйста, не стесняйтесь менять теги ...

1 Ответ

8 голосов
/ 29 июля 2011

Вы можете измерить GFLOP, запустив алгоритм с большим входом и измерив время выполнения. Затем поместите время выполнения и размер матрицы в эту формулу. Для размеров матрицы, достаточно больших, чтобы вся машина была занята, FLOP слабо зависит от размера матрицы.

Алгоритм умножения матриц GPU выполняет столько же операций с плавающей запятой, что и простой алгоритм.

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];

В теле цикла есть 2 операции с плавающей точкой и MatrixSize * MatrixSize * MatrixSize итераций тела цикла, что дает формулу для NumOps. GFLOP - это просто количество операций в секунду, деленное на 10 ^ 9 («гига»).

...