首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Nvidia体系结构中的算术强度

Nvidia体系结构中的算术强度
EN

Stack Overflow用户
提问于 2013-06-05 00:47:15
回答 1查看 2K关注 0票数 1

我是GPU编程的新手,我正试图确定一个特定的产品是否值得移植到GPU。算法的一个主要步骤需要计算大量的Frobenius产品 (就像一个点积,但在矩阵上--一个元素乘法,然后是乘积的求和)。

数据结构使得我可以将所有东西存储在GPU的全局内存中,而不能存储在共享内存中。我的理解是,GPU在算术强度(每个字节传输的浮点运算)很高时表现最好,而点积在这方面表现(相对)差。我试图弄清楚其中的一些细节有多糟糕,有些细节让我感到困惑。

为了使事情具体化,让我们假设我有64x64个双精度条目矩阵。(它们必须是双精度的。)让我们假设这些矩阵的排列是正确的,因此它们也是对齐的。显然,这太大了,无法存储在共享内存中,即使在每个SM块中也是如此。因此,我的想法是“平铺”这个问题,并在每个块中存储每个矩阵的16x16块;现在,我至少可以同时对所有八个块进行操作,为每个积分配一个线程,计算每个块中的和,等等。

我的问题是:

1)触发器/字节的确切含义是什么?或者更准确地说,在这种情况下,双精度乘法需要多少次失败?如果答案是1,那么我似乎每个操作移动了16个字节,这看起来很糟糕。

( 2)这种计算是在合并内存读取的上下文中完成的吗?团结到底是帮助我还是伤害我?

更模糊的问题是:

( 3)这是否值得这样做?

作为参考,我可以使用GTX 580进行基准测试和实验,以及CUDA 4.2,不过如果它有帮助的话,我可能会安装5.0。如果最近的Nvidia体系结构在某些方面更友好的话,那么知道这一点也是有用的,尽管我可能无法访问其中一个。

更新:

我仍然在研究整个算法,但是我有充分的理由相信这些矩阵可以在全局内存中生成并保持在GPU上,而不会将任何东西移动到CPU上。

我可能不得不重新审视我的假设,即我可以确保合并的内存访问。有些矩阵是四维对象的切片;大约3/4的矩阵自然会以明显的合并方式访问,而其他的1/4则不会。我可能会通过两次存储大对象来解决这个问题,但这会产生一个新的问题:

4)合并后的内存准则是否也适用于从共享内存移回全局内存?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-06-05 01:19:35

1)正确。一个(双精度)乘法是一个浮点运算,或触发器。如果需要从内存中加载两个操作数,即1/16触发器/字节。但是,如果您需要与n个其他矩阵的m矩阵的乘积,则理想情况下得到(m * n) / (8 * (m + n))触发器/字节,对于足够大的m和n,则有一个算术强问题。

2)合并内存读取有助于达到(接近,大约80% )指定内存带宽。假设您现在确实可以实现这些,计算能力2.0GTX 580上的缓存在这方面有很大帮助。

3)视情况而定。GPU也有大约10倍的CPU内存带宽,所以即使是内存绑定任务也可以更快。

4)是的,他们是这样做的(对于全球记忆方面的移动)。共享内存有不同的规则来避免“银行冲突”。不过,现在不必担心这一点,因为共享内存访问比全局内存访问快一个数量级,所以几乎只有后者才重要。

最重要的因素是:你需要乘的矩阵从哪里来?如果它们来自主机,需要通过PCIe进行传输,这是一种损失,产品最好在CPU上计算。如果可以在GPU上生成矩阵,那就很好了,您将从更高的内存带宽中获益。如果你可以在不把它们存储在片外存储器的情况下动态地计算点积,那么GPU就会发光。虽然这将取决于矩阵的计算效率,但点积可能只是这方面的一个微小的“后果”。你真的确定产品的计算是你最耗时的一步吗?

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16929813

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档