Существует одна простая функция, которую я использовал с C ++ в прошлом для имитации простых форм тесселяции.Функция принимает число и делитель.Делитель должен быть ( степень двух - 1), а n должно быть между 0 и делителем.Он возвращает результат модуля n% (d + 1), используя побитовое отображение &.
Я уверен, что функция выглядит следующим образом:
unsigned int BitwiseMod(unsigned int n, unsigned int d){ return n & d; }
Я хочу эффективно использовать это в OpenCL, и яинтересно, будет ли это работать так, как я себе это представляю.На мой взгляд, модуль является очень дорогой операцией на графическом процессоре, но я знаком с его использованием для формирования пространств величин и других методов перемещения по данным.
Чаще, я с большей вероятностью просто напишу это, предполагаяфункции имеют некоторые накладные расходы.
x[i] = 8*(i&d)+offset[i]; //OR in other contexts,...
num = i&d+offset[i];
x[num] = data;
Вопрос в следующем: будет ли это полезно или мешает, если полезно, можете ли вы дать мне несколько примеров, где я мог бы попытаться применить его.