我有一个代码使用cusparsedgemi将稀疏向量与密集向量相乘:
cusparseDgemmi(cusparsehandle,cols,cols,cols,nnz,&al,G,
cols,cscVal,cscColPtr,cscRowInd,
&bet,SE,cols);
哪里
cusparsehandle
,
cols
,
nnz
,
al
和
bet
在主机内存中,其余在设备内存中。以上工作正常。
现在假设我先行动
科尔斯
到设备内存,然后调用CusParse:
int *d_cols,*p_cols;
p_cols=&cols;
printf("%d\n",*p_cols);
cudaMalloc((void**)&d_cols,sizeof(int));
cudaMemcpy(d_cols,p_cols, sizeof(int), cudaMemcpyHostToDevice);
cusparseDgemmi(cusparsehandle,*d_cols,*d_cols,*d_cols,nnz,&al,G,
*d_cols,cscVal,cscColPtr,cscRowInd,
&bet,SE,*d_cols);
代码将编译,但在运行时崩溃。Cusparse参考手册指出
"cuSPARSE API assumes that input and output data reside in GPU (device) memory, unless it is explicitly indicated otherwise by the string DevHostPtr"
如果是这样,那么为什么我的代码在
科尔斯
是在主机内存中,但不是在设备内存中?当CusParse函数的所有参数参数都在设备内存中时,如何调用CusParse。我该怎么做?