《GPU高性能编程CUDA实战》

看了CUDA大概有10多天了,这里对学习内容做一个总结,主要参考的是《GPU高性能编程CUDA实战》这本书。
CUDA架构是有英伟达(NVIDIA)提出的,因此只能在配备英伟达显卡的电脑上使用,具体哪些型号的显卡支持CUDA,支持那一代的CUDA可以参考CUDA支持显卡列表
我是在windows下使用CUDA,只要从官网下好toolkit安装好就可了,不需要过多的配置。如果是在linux下进行开发,可以参考Ubuntu12.04配置NVIDIA cuda5.5经验贴
CUDA C是C语言的一个扩展,是在C语言基础上添加了一些CUDA专用的语法,关键字。

入门

核函数

为了方便描述,把CPU称为主机,把显卡称为设备,主机上的内存就称为内存,显卡上的缓存称为显存。
核函数以__global__修饰,告诉编译器这是需要设备来执行的代码,例如:

__global__ void kernel()
{
    printf("Hello, world!");
}  

核函数和主机执行的函数在传递参数方面没有什么不一样,看下面向量相加的代码:

__global__ void add(int *a, int *b, int *c)
{
    int i = threadIdx.x+blockIdx.x*blockDim.x;
    c[i] = a[i]+b[i];
}  

a,b是两个输入向量,c是输出向量,大括号内的代码是执行部分。由于代码在GPU中是多线程同时执行,每个线程都有核函数的一份拷贝,因此每个线程要找到自己计算的数据,上边大括号内第一行就是计算当前线程需要计算的数据的下标,第二行就是把对应位置的两个数加起来存放在向量c中。这一段代码假设了线程数量和向量长度是相等的。

分配内存

在内存里分配空间可以直接用malloc就可以了,后边介绍页锁定内存的时候在内存分配空间还可以用cudaHostAlloc(), 在显存里分配空间要用专门的函数cudaMalloc(),当然,销毁显存用的是cuda

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值