新建设电影院 网站,锕锕锕锕锕锕锕好湿免费网址,景安建网站,昆明优化网站排名一#xff1a;概述 到目前为止#xff0c;我们已经学会了如何编写 CUDA 核函数#xff0c;以及如何设置和分配大量线程来执行核函数。我们还了解了当前 GPU 硬件的计算架构#xff0c;以及线程在硬件上调度执行过程。在本章中#xff0c;我们将重点关注 GPU 的片上(on-chi…一概述 到目前为止我们已经学会了如何编写 CUDA 核函数以及如何设置和分配大量线程来执行核函数。我们还了解了当前 GPU 硬件的计算架构以及线程在硬件上调度执行过程。在本章中我们将重点关注 GPU 的片上(on-chip)内存架构并研究如何组织和存放数据以便这些数据能够被大量线程高效的访问。 到目前为止我们所学习的 CUDA 核函数可能只达到底层硬件性能的一小部分。之所以性能不佳是因为通常使用片外off-chip内存即全局内存。全局内存往往具有较长的访问延迟数百个时钟周期和有限的访问带宽。尽管理论上当有许多线程执行时可以容许有较长的内存访问延迟。 但很容易出现这样的情况当大量线程同时去访问全局内存时由于全局内存带宽有限容易产生交通阻塞导致除极少数线程外其他所有线程都无法及时访问内存。 这样流式多处理器SM中的部分计算核cores就会空闲。为了避免这种情况GPU 提供了大量的片上on-chip内存资源用于数据的访问从而消除了访问全局内存的交通阻塞情况。在本章中我们将研究如何使用不同的内存类型来提高 CUDA 核函数的执行性能。
二内存访问效率的重要性 回顾一下前一章矩阵乘法的例子CUDA编程04 - GPU计算架构和线程调度 我们可以在矩阵乘法的核函数中找出矩阵乘法执行最多的那部分代码通过计算这部分代码的预期性能来说明内存访问对效率的影响。 下图中复制了这部分代码。就执行时间而言核函数中最重要的部分是在 for 循环中执行 M 行与 N 列点积的代码。 未完待续。。。