这将是我假设的一个时髦的问题,如果我需要详细说明,请说出来。
情况如下:我有大约2演出的GPU内存包含我的随机数,我需要在许多不同的功能中使用它们。为了防止传递指向这个内存的指针,从设备功能到设备功能(这次多次),我把指针放在gpu常量内存中,这也节省了我的寄存器(对我来说非常重要)。现在我知道,如果通过使用关键字__restrict__
解释它的参数指向的内存块是非重叠的,在某些情况下可以加速函数。
问题:如何确保编译器知道常量内存中指针所指向的全局内存中的内存块是非重叠的(也许还可以很好地知道:生成randoms内核调用之后永远不会改变) )?
答案 0 :(得分:0)
我不知道如何为编译器提供有关其他匿名指针的启发式方法。
如果你可以管理它,尝试帮助编译器完成其工作的最简单方法是将指针作为__restrict__
修饰的内核参数传递,然后强制设备函数内联。这将绕过ABI并且可以允许编译器利用已知的非混叠条件来优化存储器访问模式。它还应该有助于函数的寄存器占用空间。我不确定__restrict__
会对__device__
函数或__constant__
声明产生多大影响,但您已经注意到编译器会接受它,所以我想它不会对最少尝试。
我期待着NVIDIA的工具链或优化大师之一对可能发生的事情以及在这种情况下可能有用的其他技巧的评论。