1、引用头文件cublas_v2.h
2、利用cublasHandle_t申明句柄
3、利用cublasCreate()函数创建句柄
4、利用cublasSetVector()函数实现(host to Device)数据传输
5、利用cublasSaxvpy_v2()函数实现向量加法运算
6、通过cublasFetVector() 函数实现(Device to host)运算
7、用cublasDestory()函数销毁句柄
#include
#include "cublas_v2.h"
#define N 10
int main() {
float a[N], b[N], c[N];
float *dev_a, *dev_b, *dev_c;
for(int i=0; i<N; ++i) // 为数组a、b赋值
{
float tmp = 1.0 * i;
a[i] = tmp;
b[i] = tmp * tmp;
}
cublasHandle_t handle; // 申明句柄
cublasCreate_v2(&handle); // 创建句柄
cudaMalloc(&dev_a, sizeof(float) * N);
cudaMalloc(&dev_b, sizeof(float) * N);
//
float alpha = 1.0;
cublasSetVector(N, sizeof(float), a, 1, dev_a, 1); // H2D host to device
cublasSetVector(N, sizeof(float), b, 1, dev_b, 1);
cublasSaxpy_v2(handle, N, &alpha, dev_a, 1, dev_b, 1); //实现向量+
cublasGetVector(N, sizeof(float), dev_b, 1, c, 1); // D2H
cudaFree(dev_a);
cudaFree(dev_b);
cublasDestroy(handle); // 销毁句柄
for(int i=0; i<N; ++i)
{
printf("%f + %f * %f = %f \n", a[i], b[i],b[i], c[i]);
}
std::cout << "Hello, World!" << std::endl;
return 0;
}
cmakeList.txt内容如下
编译的时候,还需要把libcublas.so文件添加进来
cmake_minimum_required(VERSION 3.14)
project(1_4_vectorAddWithBlas)
set(CMAKE_CXX_STANDARD 14)
find_package(CUDA REQUIRED)
link_directories("/usr/local/cuda-10.0/lib64") # libcublas.so 所在文件夹路径
cuda_add_executable(1_4_vectorAddWithBlas main.cu)
target_link_libraries(1_4_vectorAddWithBlas cublas) # 链接库