文章目录
- streaming workload是每个元素可被独立地计算的任务,是可移植到CUDA中的最简单的负载。
- 这类低计算密度的负载属于bandwidth-bound
- 他无须用太多的GPU硬件资源,
- 例如用于优化数据重用的高速缓存和共享存储器等。
G对高计算密度负载有大效,将讨论几种情形,助于流式负载移植到G
- 若输入和输出均在设备内存上,让数据传回CPU却仅执行一次计算是不好的。
- 若G比C更好的指令级支持(频繁用特殊功能单位指令的B-S期权任务),尽管有额外的内存传输开销,G仍可超C
- G操作与C并发执行可增一倍性能(即使假设它们速度同)
- 对给定负载,CUDA代码相对于高度优化的CPU代码会可读可维护。
- 对包含集成显卡的系统(CPU与支持CUDA的GPU共存同芯片,并作用同一内存),无传输开销。
- CUDA技术可用“零复制”方法,避免复制操作。
本章涵盖流式负载的方方面面。
- 对同一负载,用不同实现策略,暴露可能出现的多个问题。
- 这里关注的负载是来自BLAS库的 SAXPY操作。
- 在一个操作中同时执行一个标量乘法和矢量加法。
清单11-1 SAXPY的C程序。
- 由于GPU包含原生乘加指令, SAXPY的最内层循环在每次内存访问时,仅包含较少的指令数。
清单11-2 SAXPY的CUDA
- 此版本可运行于任何网格或各种大小的线程块,且其执行性能能满足大多数应用的需要。
- 这个内核严重受制于带宽,对多数程序而言,与其在它的基础上进行优化,不如重构该程序以增加计算密度。
本章旨在于讨论如何将数据高效地传入和传出主机内存。
- 先要研究如何从操作设备内存的角度改善这个内核的性能。
11.1设备内存
- 若输人和输出数据都在设备内存上,优化如 SAXPY这样低计算密度的任务就变成了优化全局内存访问的问题。
- 除了对齐和合并读取约束外,CUDA内核的性能也对线程块数目
和每块的线程数目比较敏感。
globalread、 global Write、 globalcopy和g! lobalcopy2应用程序
here!!!