代码之家  ›  专栏  ›  技术社区  ›  avgn

当所有参数都在设备内存中时,如何调用CusParse?

  •  0
  • avgn  · 技术社区  · 6 年前

    我有一个代码使用cusparsedgemi将稀疏向量与密集向量相乘:

    cusparseDgemmi(cusparsehandle,cols,cols,cols,nnz,&al,G,
            cols,cscVal,cscColPtr,cscRowInd,
            &bet,SE,cols);
    

    哪里 cusparsehandle , cols , nnz , al bet 在主机内存中,其余在设备内存中。以上工作正常。

    现在假设我先行动 科尔斯 到设备内存,然后调用CusParse:

    //d_cols->cols
    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);
    
    //...
    
    //call cusparse with *d_cols instead of cols
    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。我该怎么做?

    1 回复  |  直到 6 年前
        1
  •  3
  •   talonmies    6 年前