Ошибка: внешние вызовы не поддерживаются (обнаружен не встроенный вызов cublasGetVersion_v2)

Я пытаюсь использовать вызов 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-/ но я все еще с проблемой.

1 ответ

Решение

cublasGetVersion() это host функция. Вы не можете позвонить с __global__ функция.

Другие вопросы по тегам