是否可以从全局或设备函数调用CUDA CUBLAS函数

C o*_*eil 2 cuda cublas

我正在尝试并行化现有的应用程序,我将大部分应用程序并行化并在GPU上运行,我在将一个功能迁移到GPU时遇到问题

该函数使用函数dtrsv作为blas库的一部分,见下文.

void dtrsv_call_N(double* B, double* A, int* n, int* lda, int* incx) {
  F77_CALL(dtrsv)("L","T","N", n, B, lda, A, incx);
}
Run Code Online (Sandbox Code Playgroud)

我已经能够按照下面的方式调用等效的cuda/cublas函数,并且生成的结果等同于fortran dtrsv子例程.

status = cublasDtrsv(handle,CUBLAS_FILL_MODE_LOWER,CUBLAS_OP_T,CUBLAS_DIAG_NON_UNIT, x, dev_m1, x, dev_m2, c);

if (status != CUBLAS_STATUS_SUCCESS) {
        printf ( "!!!! kernel execution error.\n");
        return EXIT_FAILURE;
    }
Run Code Online (Sandbox Code Playgroud)

我的问题是我需要能够从设备或全局函数调用cublasDtrsv,如下所示,

__global__ void Dtrsv__cm2(cublasHandle_t handle,cublasFillMode_t uplo,cublasOperation_t trans, cublasDiagType_t diag,int n, const double *A, int lda, double *x, int incx){
    cublasDtrsv(handle,uplo,trans,diag, n, A, lda, x, incx);
}
Run Code Online (Sandbox Code Playgroud)

在cuda 4.0中如果我尝试编译以下我得到以下错误,有没有人知道是否有一种方法可以从一个__device____global__函数调用cublas 函数?

错误:不允许function("cublasDtrsv_v2")__device__/ 调用主机__global__ function("Dtrsv__dev")

Eug*_*ene 5

CUDA Toolkit 5.0引入了一个设备链接器,可以链接单独编译的设备对象文件.我相信,现在可以从设备功能调用CUDA Toolkit 5.0中的CUBLAS函数(但我只查看了标题,我没有使用CUBLAS的经验).

  • 肯定[有可能](http://docs.nvidia.com/cuda/cublas/index.html#topic_3_7)从设备代码调用CUBLAS例程,这是CUDA 5中的一项新功能.我不知道为什么这个答案被低估了.它使用动态并行功能,因此需要cc 3.5或更高版本的设备.Upvoting.请再次投票,以便我们可以从未答复的清单中取消. (3认同)