2011-07-29 4 views
6

Programming Massively Parallel Processors에서 gflops의 수는 다른 행렬 곱셈 커널의 효율성을 비교하는 데 사용됩니다. 내 컴퓨터에서이 커널을 어떻게 계산할 수 있습니까?행렬 곱셈 커널의 gflops를 측정하는 방법은 무엇입니까?

NVIDIA 포럼의 어떤 곳에서이 '알고리즘'을 찾았지만 유효한지 또는 시간 2가 어디서 비롯되는지 모릅니다.

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

p.s. 태그를 자유롭게 변경하십시오.

답변

8

큰 입력으로 알고리즘을 실행하고 실행 시간을 측정하여 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 부동 소수점 연산, 당신에게 NumOps에 대한 공식을 제공 루프 본문의 MatrixSize * MatrixSize * MatrixSize 반복 있습니다. GFLOP는 초당 작업 수를 10^9 ('기가')로 나눈 값입니다.

+1

+1. 필자는 모든 최신 nvidia gpus를 포함하는 내장 FMAD (fused multiply and add) 명령을 하드웨어에 추가합니다. 사람들은 MatrixSize^3 용어 앞에 2의 인수를 사용할지 여부를 묻습니다. 당신이 그것을 일관되게하는 한별로 중요하지 않아야합니다. –