Как измерить gflops ядра умножения матрицы?

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

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

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

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

1 ответов


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

алгоритм умножения матрицы 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. GFLOPs-это просто количество операций в секунду, деленное на 10^9 ('giga').