过去我曾在 C++ 中使用过这个简单的函数来模拟简单的镶嵌形式。该函数接受一个数字和一个除数。除数必须是(2 的幂- 1)并且 n 应该在 0 和除数之间。它使用按位 & 返回 n % (d+1) 的模数结果。
相当肯定的功能是这样的:
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;
问题是:这会有用还是会妨碍你,如果有用的话,你能给我一些我可能会尝试应用它的例子吗?