2012-12-02 4 views
4

누울에 관한 일반적인 질문입니다. 단일 스레드의 경우 GPU에서 CPU (예 : cublasGetVector)로 메모리가 전송되지 않으면 cublas 커널 함수 (예 : cublasDgemm)가 자동으로 호스트와 동기화됩니까?cublas 커널 기능이 자동으로 호스트와 동기화됩니까?

cublasDgemm(); 
//cublasGetVector(); 
    host_functions() 

또한 인접한 두 개의 커널 호출은 무엇입니까?

cublasDgemm(); 
cublasDgemm(); 

그리고 이전 커널에서 사용 된 전역 메모리와 관련되지 않은 동기화 된 전송은 어떻게됩니까?

cublasDgemm(...gA...gB...gC); 
cublasGetVector(...gD...D...); 

답변

7

는 아니, CUBLAS API는 몇 레벨, 비동기 스칼라 값을 반환 한 루틴은 예외입니다.

cublasDgemm과 같은 레벨 3 루틴은 호스트를 차단하지 않으므로 CUBLAS 호출이 완료되었는지 확인하기 위해 동기식 메모리 전송 또는 명시 적 호스트 GPU 동기화 호출과 같은 차단 API 루틴을 호출해야합니다.

+0

고마워요! 이제는 두 커널 사이에서, 그리고 동기 메모리 전송은 이전 커널에서 사용 된 전역 메모리를 포함하지 않습니다. (위 게시물도 업데이트 됨). –

+0

커널은 항상 비동기 적으로 시작되며 동기식 메모리 전송은 항상 동기식입니다 (한 경우 제외). 따라서 dgemm 호출이 차단되지 않고 메모리 전송이 차단됩니다. – talonmies

관련 문제