2012-12-02 28 views
4

只是关于cublas的一般问题。对于单线程,如果没有从GPU到CPU的内存传输(例如cublasGetVector),cublas内核函数(例如cublasDgemm)是否会自动与主机同步?cublas内核函数会自动与主机同步吗?

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

此外,在两个相邻的内核调用之间呢?

cublasDgemm(); 
cublasDgemm(); 

而且,不涉及前一个内核中使用的全局内存的同步传输呢?

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

回答

7

不,CUBLAS API除少数1级例程返回一个标量值外,是异步的。

3级例程如cublasDgemm不会阻塞主机,您需要调用阻塞API例程,如同步内存传输或显式主机-GPU同步调用,以确保CUBLAS调用已完成。

+0

谢谢!现在在两个内核之间怎么样?同步内存传输怎​​么样不涉及前一个内核中使用的全局内存? (上面的帖子也更新了)。 –

+0

内核始终异步启动,并且同步内存传输(除了一种情况)始终同步。所以你的dgemm调用不会阻塞,你的内存传输将被阻塞。 – talonmies