cuda学习
文章平均质量分 79
cuda 从入门到如土,新手详细教程
余额抵扣
助学金抵扣
还需支付
¥79.90
¥99.00
购买须知?
本专栏为图文内容,最终完结不会低于15篇文章。
订阅专栏,享有专栏所有文章阅读权限。
本专栏为虚拟商品,基于网络商品和虚拟商品的性质和特征,专栏一经购买无正当理由不予退款,不支持升级,敬请谅解。
WuYuFffan
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
8. reduction sumation
8. reduction sumationGPU版累加:相邻两个元素相加 (ruduction)pesedu code:for(int offset=1; offset < blockdim.x; offset *=2){ if(tid%(2 * offset) == 0) { input[tid] += input[tid + offset]; }}第一代中,offset为1,间隔为2:input[0] += input[0 + 1];input[2] += in原创 2020-09-19 21:39:34 · 236 阅读 · 0 评论 -
7. warp divergence
7. warp divergence因为CUDA是SIMD架构,所以当一个cuda核执行选择分支时,其他非该分支的核会强制进入等待状态。int tid = threadIdx.x;if (tid % 2 == 0){ //do something}else{ //do something else}tid为奇数的设备执行if时,tid为偶数的设备拥塞。反之亦然。可见如果同一个warp中的Thread有很多分支,会导致warp divergence,这会严重降低程序的运原创 2020-09-18 21:22:01 · 560 阅读 · 0 评论 -
6. cuda warp
7. cuda warp在cuda中,线程块在单流多处理器上运行。当设备内存足够时,多个block可以在同一个sm上运行。SIMT(Single instruction multiple threads):一个指令多个线程执行(cuda的本质)一个线程块不能再多个SM中执行。当一个SM中不能跑一个block的时候,(共享内存溢出时), 内核发射失败,函数将返回 cudaSucess以外的值。程序结构对应的硬件结构:为什么要有warp?理论上线程并行和实际上的并行原创 2020-09-18 19:33:53 · 654 阅读 · 0 评论 -
5. Device property查询
5. Device property查询在cuda编程中,要想编写出适合不同计算能力的并行程序,属性查询是必学的一部分。下表给出了cudaruntime.h中的动态查询属性:PropertyExplanationnamedescreptionMajor/minor计算能力 5.2 -> 5/2totalGlobalMem总全局内存的大小maxThreadsPerBlock每个block的最大线程数maxThreadsDim[3]block原创 2020-09-18 15:21:13 · 260 阅读 · 0 评论 -
4. 给CUDA程序计时
4. 给CUDA程序计时通过做差的方法来实现clock start = clock() Work loadclock end = clock()difference = end - starttime = (difference / clocks_per_sec)注意:要根据实际程序的运行时间除以合理的数字给cpu计时: //summation in CPU clock_t cpu_start, cpu_end; cpu_start = clock(); sum_array原创 2020-09-18 14:43:52 · 267 阅读 · 0 评论 -
3.cuda 异常捕获
3.cuda 异常捕获Error分类:Compile time errors:编译出错,在visual studio中代码一打错编译器就会提示这种错误。Run time Error:在一般的c++编程中,可以用 exception handling来抛出异常,并且用try 来捕获。Error handling in CUDAcudaError cuda_function(…)return value:cudaSuccess if the kennel was launched s原创 2020-09-18 14:43:40 · 963 阅读 · 0 评论 -
2. CUDA实例: 两个数组的相加
2. CUDA实例: 两个数组的相加#mermaid-svg-1LkSMkqK3VtEsCqd .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-1LkSMkqK3VtEsCqd .label text{fill:#333}#mermaid-svg-1LkSMkqK3VtEsCqd .node rect,#mer原创 2020-09-18 14:43:27 · 351 阅读 · 0 评论 -
1. CUDA内存传输
1. CUDA内存传输cudaMemCpy(destination ptr, sourse ptrsize in byte, direction);作用:把主机的数据传到设备端.cudaMalloc: ( (void**)destination ptr, size in byte);作用: 在主机端分配内存bite_size = size * sizeof(type):其中size为数组的大小,type为数组的类型,bite_size即size in byte;sourse原创 2020-09-18 14:42:48 · 332 阅读 · 0 评论
分享