CUDA学习(七):CUBLAS库实现向量加法


博主CUDA学习系列汇总传送门(持续更新):编程语言|CUDA入门



说起CUDA,不得不提NVIDIA巨资打造的CUDA库,CUDA函数库可以看做GPU程序的优化极限。
针对向量加法,CUBLAS库函数中cublasaxpy()函数可以实现向量加法功能,在float的前提下,可以用cublasSaxpy()函数。
本节主要学习了cublas库的调用方法:
包括代码上的主要流程以及CMakeList.txt链接库。


一、CUBLAS(V2)库的主要流程

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 <iostream>
#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) # 链接库

  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值