У меня есть ядро, которое принимает следующие параметры:Способ смещения индексов в ядре OpenCl?
1) Глобальный идентификатор 1040
2) Локальный идентификатор 16
Ниже не ядро я использую, но я использую его проиллюстрировать то, что я хотел бы реализовать; в основном массивные входы A и B имеют длину 1040 * 10.
__kernel void vector_add(__global const int *A, __global const int *B, __global int *C, int Offset, int constant) {
// Index of the current element to be processed
int i = get_global_id(0);
// Do the operation
C[i + Offset*constant] = A[i + Offset*constant] + B[i + Offset*constant];
}
В то время как константа является постоянным, я хотел бы Offset быть «массив» сортов, содержащий значения 0,1, ..., 9. Я уже пробовал передавать эти значения в виде массива, но я не думаю, что можно использовать массив для смещения таким образом (программа вылетает). Образец того, что я хотел бы написать ниже:
__kernel void vector_add(__global const int *A, __global const int *B, __global int *C, __constant const int *Offset, int constant) {
// Index of the current element to be processed
int i = get_global_id(0);
for (int k = 0; k < 10; k++) {
// Do the operation
C[i + Offset[k]*constant] = A[i + Offset[k]*constant] + B[i + Offset[k]*constant];
}
}
Обратите внимание: Scaling Глобальный идентификатор не вариант, так как в моем ядре она должна оставаться фиксированной. Поэтому: так или иначе, чтобы достичь этого?
EDIT: Я добавил пример того, что хотел бы реализовать. В настоящее время это не работает. Является ли это законным?
Если элементы массива ноль, он не должен падать, если сработает, если нет, то они находятся за пределами границ буфера –
@huseyintugrulbuyukisik Я отредактировал свой вопрос, может быть, это яснее. второе ядро, которое я разместил, не работает ... если вы скажете мне, что это законно, тогда у меня есть проблема в моем хост-коде – user1816546