我正在尝试使用调用cublasIdamax(),但我得到了类似标题的错误。所以我编写了一个简单的代码来验证cublas的版本,以避免函数签名中的版本错误。但即使这个简单的代码也会导致编译错误。
这是我的代码:
__global__ void getVersion(cublasHandle_t handle, int *version){
cublasGetVersion(handle,version);
}
int main( int argc, const char* argv[] )
{
int *d_version;
int *h_version;
cublasHandle_t handle;
dim3 dimBlock( 2, 2 );
dim3 dimGrid( 1, 1 );
cublasCreate(&handle);
h_version = (int *)malloc(sizeof(int*));
cudaMalloc((void**)&d_version, sizeof(int*));
getVersion<<<dimGrid, dimBlock>>>(handle, d_version);
cudaMemcpy(h_version,d_version,sizeof(int),cudaMemcpyDeviceToHost);//gpu->cpu
cout << *h_version << endl;
}
我在第3行遇到以下错误:不支持外部调用(找到非内联调用cublasGetVersion_v2)
我做错了什么?
PS:我看了这个主题 https://devtalk.nvidia.com/default/topic/500814/external-calls-are-not-supported-found-non-inlined-call-to-meminit-/ 但我仍然遇到这个问题。
答案 0 :(得分:2)
cublasGetVersion()
是host
函数。您无法通过__global__
功能调用它。