有一个简单的函数,我曾经用C++来模拟简单形式的镶嵌细分。该函数需要一个数字和一个除数。除数必须是(两个幂的两个-1),n应该在0和除数之间。它使用按位&返回n%(d + 1)的模数结果。OpenCL Alternative Modulo Uses,Advice
相当肯定的功能是这样:
unsigned int BitwiseMod(unsigned int n, unsigned int d){ return n & d; }
我想OpenCL中有效地利用这一点,我想知道它是否会工作,我想像这一点。在我看来,模数在GPU上是一个非常昂贵的操作,但我很熟悉使用它来形成大小空间和其他技术来传输数据。
更多的时候,我会更容易写这个假设函数有一些开销。
x[i] = 8*(i&d)+offset[i]; //OR in other contexts,...
num = i&d+offset[i];
x[num] = data;
问题是:这会有用或阻碍,如果有用,你可以给我一些例子,我可以尝试应用它。
是不是n&(d-1)而不是n&d? – 2014-09-05 19:40:33