Как измерить 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').