Я пытаюсь вычислить a mod b
в OpenCL, где a
- это массив ulong
элементов и в два раза длиннее b
.
__kernel void mod(__global ulong *a, __global ulong *b, __global ulong length) {
// length = len(a) = 2 * len(b)
...
}
Что я хочуэто что-то вроде a %= b
, но с массивами.Массивы, конечно, представляют собой числа, причем их последний элемент представляет наименее значимые биты.
Возможно ли сделать это на месте (т.е. без выделения дополнительной памяти)?Каков хороший алгоритм для вычисления медулуса для больших чисел?
Обратите внимание, что ни одно из двух чисел не может быть легко представлено другим способом (например, с использованием показателей степени).В большинстве случаев они будут псевдопреступниками.Кроме того, было бы неплохо иметь некоторый параллелизм.
Приветствуются указатели на любые полезные материалы по этому вопросу.
РЕДАКТИРОВАТЬ: , если это поможет, length
можно узнать по адресувремя компиляции.
РЕДАКТИРОВАТЬ: Извините, я не понял здесь.Я не работаю с массивом целых чисел, я работаю с двумя большими целыми числами, например, a
- это 8 МБ ( a 67108864-bit number ) и b
4Mb ( a 33554432-bit number ).Я работаю с ними в базе 2 ^ 64, отсюда и массивы ulong
целых чисел.По сути, это всего лишь цифры номера.