単純な形式のテッセレーションをシミュレートするために、過去に 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;
問題は、これが役立つか、邪魔になるかです。有用な場合は、それを適用しようとする例をいくつか教えてください。