cuda学习笔记(一)

一、基础的API
先是线程id的索引:
对于一维的 block. 线程的 threadID 就是 threadIdx.x;
对于大小为 (Dx. Dy) 的二维 block. 线程的 threadID 是 (threadIdx.x + threadldx.yx×Dx);
对于大小为 (Dx. Dy. Dz) 的三维 block. 线程的 threadID 是 (threadIdx.x + threadldx.y× Dx+ threadIdx.zx ×Dx ×Dy)

Kernel函数
kernel函数的参数形式

1、参数Dg用于定义整个grid的维度和尺寸,即一个grid有多少个block, 为dim3类型
Dim3 。
Dg(Dg.x, Dg.y, 1)表示grid中每行有Dg.x个block,每列有Dg.y个block,第三维一般为1(目前一个核函数对应一个grid)。这样整个grid中共有Dg.x*Dg.y个block。
(2147483647,65535,65535)

2、参数Db用于定义一个block的维度和尺寸,即一个block有多少个thread,为dim3类型。
Dim3 Db(Db.x, Db.y, Db.z)表示整个block中每行有Db.x个thread,每列有Db.y个thread,高度为Db.z。Db.x和Db.y最大值为1024,Db.z最大值为64。 一个block中共有Db.xDb.yDb.z个thread。
(1024,1024,64)
3、参数Ns是一个可选参数,用于设置每个block除了静态分配的shared Memory以外,最多能动态分配的shared memory大小,单位为byte。不需要动态分配时该值为0或省略不写。
4、参数S是一个cudaStream_t类型的可选参数,初始值为零,表示该核函数处在哪个流之中。

二、判断code的效率

#include<time.h>

clock_t start = clock( );
for (i = 0; i < DATA_SIZE; i++) {
sum += num[i] * num[i] * num[i];}
result = sum;
time = clock( ) - start;

得到的time需要除以时钟频率

cudaDeviceProp prop;
cudaGetDeviceProperties(&prop, 0);
cout <<prop.name<<'\n'<<prop.sharedMemPerBlock<<'\n'<<prop.clockRate<<'\n';
//this device clockRate is 1084500

最终的时间为time/(1084500*1000)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值