oneAPI GPU 优化指南 - 入门

本章节翻译by weavingtime@formail.com 原文:Getting Started (intel.com)


目录

阿姆达尔定律

局部性

工作项的大小


三个关键概念决定了在加速器上的软件优化。你的优化工作应该遵循这些概念。

阿姆达尔定律

这看起来可能很明显,但它是利用加速器的第一步。阿姆达尔定律指出,应用程序使用加速器的时间比例 (Fp) 限制了加速的效益。最大加速度受到 1/(1−Fp) 的限制。如果你使用加速器 50% 的时间, 你最多将获得 2× 的加速,* 即使使用了无限强大的加速器。*

请注意,这是关于程序执行,而不是你的程序源代码。并行kernel可能只占整体源代码的很小一部分 但如果这是程序执行时间集中的地方,优化这部分代码仍然可以提高整个程序的性能。

局部性

加速器通常具有专门的内存,具有不相交的地址空间。应用程序必须在适当的时间将数据分配或移动到正确的内存中。

加速器内存按层次排列。寄存器比缓存更高效地访问,缓存比主内存更高效地访问。将数据靠近执行点可以提高效率。

您可以通过多种方式重构代码以使数据更靠近执行。我们将在以下部分中介绍这些方法。在这里,我们重点介绍三个:

  1. 在加速器上分配数据,并尽可能长时间保留它。你的应用程序可能有许多部分部署到加速器。如果应用程序的这些部分需要访问共同的数据,可以用加速器的多个计算核分摊第一次从主机内存拷贝数据时的成本,并在剩余kernel调用中就地重用这些数据。

  2. 在kernel执行时访问连续的内存块。硬件会将连续的内存块提取到内存层次结构中,因此即使访问内存块的一小部分,耗时也和整个块相当。所以在使用块的第一个元素之后,剩余元素的访问耗时很短,因此要利用这个内存访问的特点。

  3. 将代码重构为具有更高数据重用率的块。在二维矩阵中,你可以安排处理完一个元素块后再移动到下一个相邻地址的元素块。例如,在模板操作中,你可能会访问前一行、当前行和下一行。当你在块中遍历元素时,可以重用数据并避免重复访问数据的成本。

工作项的大小

数据并行加速器被设计为高吞吐量的引擎,并且通常具有很多的执行单元。因为更多元素可以同时处理, 这种方法在数据并行算法上获得更高性能。

但是,充分利用并行处理器是很具有挑战性的。例如,假设你有512个执行单元,其中每个执行单元有8个线程,每个线程具有16个元素向量。那你需要至少安排 512×8×16=65536 个并行活动以匹配此容量。此外,如果每个并行活动都很小,那你需要另一个大因子来摊销提交此工作到加速器的成本。充分利用单个大型加速器可能需要将计算分解为数百万个并行活动。

上一章                                         主目录    上级目录                                                               下一章

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值