北方骑马的萝卜
一只:码农!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
capter8:共享内存的合理使用
只要同一个线程束内的多个线程不同时访问同一个 bank 中不同层的数据,该线程束对共享内存的访问就只需要。利用共享内存进行线程块之间的合作(通信)之前,都要进行同步,以确保共享内存变量中数据对于所有线程块内的。核函数中循环的每一轮都会被拆解、分配到线程块内的所有线程上执行,而不是一个线程连续执行一次完整循环。由于共享内存访问速度快于全局内存,所以可以通过线程块内的共享内存将全局内存的非合并访问转为合并访问。实现一个线程块中所有线程按照代码出现的顺序执行指令,但是不同线程块之间依然是独立、异步的。原创 2025-01-24 14:17:01 · 225 阅读 · 0 评论 -
capter7:全局内存的合理使用
如果线程束请求的全局内存地址刚好为 0-127 字节或 128-255 字节,就能与 4 次数据传输所处理的数据完全吻合,这种情况下就是合并访问。以仅使用 L2 缓存的情况为例,一次数据传输指的就是将 32 字节数据从全局内存(DRAM) 通过 32 字节的 L2 缓存片段(cache sector)传输到 SM。考虑一个线程束访问单精度浮点数类型的全局内存变量的场景,一个单精度浮点数占有 4 个字节,故一次访问需要 32*4 个字节的数据。读取全局内存,从而对数据的读取进行缓存、缓解非合并访问的影响。原创 2025-01-24 14:10:16 · 210 阅读 · 0 评论 -
capter6:CUDA 的内存组织
< CPU > // ---------------------------------------------------------------------------------- // 内存 // ---------------------------------------------------------------------------------- || || < GPU > || // --------------------------------------------------原创 2025-01-23 14:34:23 · 147 阅读 · 0 评论 -
capter5:获得 GPU 加速的关键
由于 cuda 程序需要在主机和设备间传递数据,所以当计算强度较小时数据传输的性能对程序总耗时影响更大。同时,可以指定其他编译选项,如 -DUSE_DP 启用双精度版本。因此 cuda 的两种浮点数类型对程序性能的影响就较为明显。可见双精度版本基本上比单精度版本耗时多一倍。,还可以指定 c++ 优化等级 -O3;在编译时,除了指定 GPU 计算能力。原创 2025-01-23 13:50:32 · 126 阅读 · 0 评论 -
capter4:CUDA 程序的错误检测
同时,只要在核函数调用后还有对其他任何能返回错误值的 API函数进行同步调用,都会触发主机和设备的同步,并捕捉到核函数中可能发生的错误。就是说,主机调用一个核函数之后必须等待其执行完,才能向下执行。即主机调用核函数后不会等待核函数执行完成、而是立刻执行之后的语句。为 1,这样所有核函数的调用都将不再是异步的,而是同步的。一般要获得精确的出错位置,还是需要显式地 同步,例如调用。此外,主机和设备之间的数据拷贝会隐式地同步主机和设备。因为核函数没有返回值,所以无法直接检查核函数错误。核函数的调用是异步的。原创 2025-01-23 11:36:33 · 124 阅读 · 0 评论 -
capter3:简单 CUDA 程序的基本框架
简单 CUDA 程序的基本框架原创 2024-12-02 17:21:21 · 195 阅读 · 0 评论 -
capter2:CUDA 中的线程组织
一个利用了 GPU 的 CUDA 程序既有主机代码,又有设备代码(在设备中执行的代码)。 主机对设备的调用是通过 核函数(kernel function) 实现的。原创 2024-12-02 17:12:15 · 313 阅读 · 0 评论 -
capter1:GPU 硬件与 CUDA 程序开发工具
GPU 硬件与 CUDA 程序开发工具原创 2024-04-07 17:46:46 · 359 阅读 · 1 评论
分享