0

我认为这将是一个有点时髦的问题,如果我需要详细说明,请说出来。

情况如下:我有大约 2 个 GPU 内存,其中包含我的随机数,我需要在许多不同的功能中使用它们。为了防止将指针从设备函数传递到设备函数(并且如此多次),我将指针放在 gpu 常量内存中,这也为我节省了寄存器(对我来说非常重要)。现在我知道,在某些情况下,如果函数被解释为它的参数指向的内存块是不重叠的,则可以通过使用关键字来加速函数__restrict__

问题:我如何确保编译器知道常量内存中的指针指向的全局内存中的内存块是不重叠的(也许也很高兴知道:在生成随机内核调用之后永远不会改变)?

4

1 回答 1

0

我不知道有一种方法可以为编译器提供对其他匿名指针的启发式方法。

如果您可以管理它,尝试帮助编译器完成其工作的最简单方法是将指针作为__restrict__修饰的内核参数传递,然后强制设备函数内联。这将绕过 ABI,并可能允许编译器利用已知的非混叠条件来优化内存访问模式。它还应该有助于您的函数的寄存器占用空间。我不确定这__restrict__会对__device__函数或__constant__声明产生多大影响,但您已经注意到编译器接受它,所以我想至少尝试一下不会有什么坏处。

我期待 NVIDIA 的一位工具链或优化专家就幕后可能发生的事情以及在这种情况下可能有用的其他技巧发表评论。

于 2015-08-05T15:00:17.930 回答