Новичок в OpenCL здесь.Я пытаюсь преобразовать численный метод, который я написал в OpenCL для ускорения.Я использую пакет PyOpenCL , как я уже писал один раз на Python, и, насколько я могу судить, нет веской причины использовать версию C.Но я все слышу, если я ошибаюсь в этом.
Мне удалось перевести большую часть функциональности, которая мне нужна, в ядра OpenCL.Мой вопрос о том, как (правильно) сказать OpenCL игнорировать мои граничные / призрачные ячейки.Причина, по которой мне нужно это сделать, заключается в том, что мой метод (например) для точки i
обращается к ячейкам на [i-2:i+2]
, поэтому, если i=1
, я убегу с конца массива.Итак - я добавляю несколько дополнительных точек, которые служат для предотвращения этого, а затем просто говорю моему алгоритму работать только на точках [2:nPts-2]
.Легко понять, как это сделать с помощью цикла for
, но я немного более неясен относительно правильного способа сделать это для ядра.
Достаточно ли, например, сделать это(псевдокод)
__kernel void myMethod(...) {
gid = get_global_id(0);
if (gid < nGhostCells || gid > nPts-nGhostCells) {
retVal[gid] = 0;
}
// Otherwise perform my calculations
}
или есть другой / более подходящий способ применения этого ограничения?