快速入门 CUDA C++ 混编

教程: https://zhuanlan.zhihu.com/p/34587739

kernel是CUDA中一个重要的概念,kernel是在device上线程中并行执行的函数

一个kernel所启动的所有线程称为一个网格(grid)

每个线程块有包含共享内存(Shared Memory),可以被线程块中所有线程共享,其生命周期与线程块一致。
此外,所有的线程都可以访问全局内存(Global Memory)。还可以访问一些只读内存块:常量内存(Constant Memory)和纹理内存(Texture Memory)

CUDA中使用cudaMallocManaged函数分配托管内存

localmem:线程register资源不足时 自动为local memory

local men 读写慢于register,存储位置和global mem在一起 有些

shared mem 每一个线程内部 有一块 声明周期与block一致 部分线程退出不会释放 比较稀缺资源
每一个shared 都很大

cons mem host写到里面 在device只进行读取 可以多个线程读取时 效果比较好

texture mem 纹理内存 专门存储图像等二维结构 一般不会用到

global mem 显存 对于 整个grid可见 延迟最高 延迟最大

cuda core 也叫 SP:

SM(Streaming Multiprocessor),流式多处理器

一个线程块在一个SM

warp scheduler

线程 以 warp为单位进行调度 32个线程数

32个线程构成一个线程束

线程分化

联系的32bit划分到一个bank
shared mem 分 bank
先用前16个线程去请求shared men 然后用后16个线程请求bank
所以前16个线程 和后16个线程不会发生bank冲突

baseIndex+s*tid n
s和n不互素

_shared_

512
每一个的结果放在 shared 数组里面


Q&A:

对于不变的数据只拷贝一次是否可以

c++和c相比cuda编写哪个容易

共享内存和全局内存:存多份相同的共享vs一份全局 效率方面的影响

核函数调用核函数开销大吗

评估的点与线程ID的对应关系怎么确定

long long 比int慢吗

规约操作在GPU还是CPU做

相关推荐
©️2020 CSDN 皮肤主题: 精致技术 设计师:CSDN官方博客 返回首页