cuda 函数传地址_CUDA程序设计入门(三)——实现简单的应用:向量加

本文介绍CUDA编程的基础,通过实现向量加来展示CUDA的优势。内容包括核函数编写、任务划分、内存分配与数据传输、CPU与GPU性能对比。实验结果显示,GPU在不考虑传输时浮点运算速度远超CPU,但低重用性计算时受限于数据传输开销。
摘要由CSDN通过智能技术生成

cebf52c12619ba51e588096d61ea0cd8.png

上期内容:核函数


写在前面

因为疫情原因拖更了很久,本想回到学校后继续用学校的服务器做实验,结果碰上服务器维护,所以本期实验使用的GPU为PC端显卡。本期文章将讨论如何实现CUDA版的向量加程序——一种在数值应用中常见的计算场景,并与CPU版程序进行比较。

本来还想在本期文章中加入矩阵乘的实现,但后来感觉矩阵乘和向量加有很多重复的内容,那就不增加文章的篇幅了。

实验用完整代码可见我的GitHub:https://github.com/BenQuickDeNN/CUDA_tutorial/tree/master/vadd

实现向量加

一般情况下,数值计算应用场景下的向量加形式化定义为:

其中,cab皆为向量,alpha和beta为标量。

向量加程序是非常典型的一维批量数据运算,其在一般编程情景中的示例代码如下:

for (int i = 0; i < LEN; i++)
    c[i] = alpha * a[i] + beta * b[i];

现在我们要把类似的功能搬到GPU上。

1 编写核函数

核函数用于封装程序的热点。我们希望调用一个一维Grid和若干个一维Block来并行处理向量加计算,每个线程处理其中的一批(batch)加法运算。需要注意:

  1. 核函数不能返回任何值,所以参数中应包括用于存储结果的数组,通过参数传回计算结果。
  2. 因为Grid和Block都是一维的,所以计算线程号的过程可以大大简化。

核函数示例代码如下:

/*********************************************************************
 * @file 	cuda_vadd_kernel.cu
 * @brief 	kernel source of vector add
 * @author 	Bin Qu
 * @email 	benquickdenn@foxmail.com
 * you can reedit or modify this file
*********************************************************************/

#ifndef CUDA_VADD_KERNEL_H

#define CUDA_VADD_KERNEL_H

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值