2012-01-03 6 views
2

이 실행 CUBLAS의 내 결과입니다 각 GPU (테슬라 M2050)에 대한 2 개 스트림을 사용하여 4 개 GPU에서 DGEMM 성능 DGEMM : 내 결과를 테스트 한 그들은 괜찮CUBLAS 쿼리

enter image description here

; 기본 스트림을 사용하는 버전과 비교할 때 높은 Gflops 값에 대해 우려하고 있습니다. 나는 공식 사용 플롭의 계산 오전 : 다중 스트림을 사용하는 버전

Gflops = {2.0*10^-9*(N^3+N^2)}/elapsed_time_in_s

를 내가 어떤 식 으로든이 공식을 수정해야합니까?

은 호스트에서 데이터 전송, 커널 실행 및 장치에서 호스트로 데이터 전송을 초 단위로 수행하는 데 걸리는 시간입니다 (위의 수식의 분모 임). 올리지 엔비디아에 대한 포럼 - http://forums.nvidia.com/index.php?showtopic=219910&st=0#entry1350908

편집 : @talonmies의 의견에 따라, 나는 시간을 계산하기 전에 cudaStreamSynchronize을 추가하고, 결과는 다음과 같다 :

enter image description here

감사합니다,

Sayan

+0

"4 GPU에서 실행 중"이라고 말하면 DGEMM 작업의 의미는 무엇입니까? DGEMM을 4 대 이상의 기기로 나눠 주시겠습니까? – talonmies

+0

각 GPU에 대해 4 부분으로 데이터를 분할하고 (각 GPU에서) 청크에서'cublasdgemm'을 실행 중입니다 ... – Sayan

+2

단일 C2050은 약 550 GFLOP/초 ** 피크 ** 또는 약 2200 GFLOP/초를 제공합니다 double precision의 경우 4 ** peak **에 대해 DGEMM은 피크보다 상당히 낮습니다.) 따라서 스트림의 경우 타이밍이 잘못되었다고 추측 할 수 있습니다. (아마도 기본 스트림의 경우 동기화 된 것이 아마도 비동기입니다.) FLOP/s 계산은 계산 방법에 관계없이 변경되지 않아야합니다. – talonmies

답변

3

단일 C2050은 배정도를 위해 4 피크에 대해 약 550 GFLOP/s 피크 또는 약 2200 GFLOP/s를 제공하고, DGEMM은 siderably 피크보다 낮은), 그래서 당신 타이밍이 잘못 스트림 경우 (아마도 뭔가가 기본 스트림의 경우 동기 비동기입니다)에 맞춰 것입니다. FLOP/s 계산은 계산 방법에 관계없이 변경되지 않아야합니다.

사용하는 타이밍 메커니즘이 모든 스트림에서 cudaStreamWaitEvent 메커니즘을 사용하거나 스트림 당 cudaStreamSynchronize을 통해 실행하는 모든 스트림에 동기화되도록 코드를 검토합니다. GPU가 CUBLAS 작업을 완료하기 전에 시간을 잰 코드에서 타이밍이 떨어질 가능성이 있습니다.

+0

대답없는 질문 목록에서이 질문에 대한 대답을 추가했습니다. 누군가가 이것을 반대하거나 대답을 받아 들일 수 있습니까? – talonmies