在 C++ 中使用 cublasSgemm 进行矩阵乘法

问题描述

我想在 GPU 上将两个 2x2 矩阵相乘,但出现此错误。这是我的代码错误

#include <cublas_v2.h>
#include <iostream>
#include <cuda.h>
#include <curand.h>
#include <curand_kernel.h>
#include <thrust/device_vector.h>
#include <thrust/execution_policy.h>

int main(){
  int nr_rows_A,nr_cols_A,nr_rows_B,nr_cols_B,nr_rows_C,nr_cols_C;
  // for simplicity we are going to use square arrays
  nr_rows_A = nr_cols_A = nr_rows_B = nr_cols_B = nr_rows_C = nr_cols_C = 2;
  int m,n,k,lda,ldb,ldc; 
  m = n = k = lda = ldb = ldc= nr_rows_A;

  thrust::device_vector<float> d_A(nr_rows_A * nr_cols_A),d_B(nr_rows_B * nr_cols_B),d_C(nr_rows_C * nr_cols_C);
  thrust::sequence(d_A.begin(),d_A.end(),1);
  thrust::sequence(d_B.begin(),d_B.end(),5);

  const float * dv_ptra = thrust::raw_pointer_cast(&d_A[0]);
  const float * dv_ptrb = thrust::raw_pointer_cast(&d_B[0]); 
  float * dv_ptrc = thrust::raw_pointer_cast(&d_C[0]); 


  cublasHandle_t handle;
  cublasCreate(&handle);

  float alpha = 1;
  float beta =0;

  cublasSgemm(handle,CUBLAS_OP_N,m,&alpha,dv_ptra,dv_ptrb,&beta,dv_ptrc,ldc);

  cublasDestroy(handle);

  for(int i = 0; i < nr_rows_A * nr_cols_A; i++){
    std::cout<<d_C[i]<<std::endl;
  }


 }

这是我得到的错误

 Creating library a.lib and object a.exp
 tmpxft_000020a4_00000000-19_inverse.obj : error LNK2019: unresolved external symbol cublasCreate_v2 
 referenced in function main
 tmpxft_000020a4_00000000-19_inverse.obj : error LNK2019: unresolved external symbol cublasDestroy_v2 
 referenced in function main
 tmpxft_000020a4_00000000-19_inverse.obj : error LNK2019: unresolved external symbol cublasSgemm_v2 
 referenced in function main
 a.exe : Fatal error LNK1120: 3 unresolved externals

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)