Я новичок в OpenCL, но много лет работал с opengl \ webgl для рисования и GPGPU.Стоп истинные результаты в буфере вывода
Я хочу проверить пересечение полилинии с другими. Полилиния - это набор связанных сегментов - как LINE_STRIP.
У меня есть полилинии. каждая полилиния имеет много точек. Я помещаю все в один буфер. когда буфер выглядит как [pntsCount, x, y, x, y ...., pntsCount, x, y, ....]. назовем это - буфер точек.
Кроме того, у меня есть буфер, который содержит индексы начала каждой полилинии, например индексы значений «pntsCount». позволяет назвать это - начинает буфер
Мое глобальное количество полилиний = длина начального буфера.
В каждом рабочем элементе я выполняю свою текущую полилинию (из буфера полилиний) и проверяю пересечение с одной полилинией.
Сегодня я предоставляю свой выходной буфер ядра размера буфера для запуска, если есть пересечение или нет.
Таким образом, после окончания ядра. Я запускаю буфер в хосте и проверяю, что имеет значение true \ false.
Мой вопрос: Могу ли я просто складывать свои истинные результаты в выходной буфер вместо истинных/ложных значений для всех полилиний. То, что я имею в виду, Сохранение в моем представлении только индексов полилиний, которые пересекают мою одиночную полилинию.
поэтому мой буфер результатов будет для exmaple [4,24,10, ...] и не [0,0,0,1,0,0,0,0,0,1 .... ]
Для этого мне нужно, чтобы переменная, содержащая текущий индекс в буфере результатов, установила значение и затем увеличила его для следующего результата. И перед первым ядром вызова мне нужно установить его в 0.
Я видел, что есть atomic_inc, кроме того, я могу добиться того, что с локальной памятью и барьерами ..
Может кто-то сделать заказ в это для меня? и, может быть, пример, как это сделать?
bottelneck является узел, который нужно читать и работать над этой длинной буфер результатов, для того, чтобы найти то, что было пересечено. может быть, что ничего не пересекалось, и я все равно буду пробежать по всему буфере, чтобы понять это. Возможно ли также получить эту глобальную переменную? так что я буду знать, сколько пересечений было там? –
Добавлен поясняющий пример – DarkZeros
Это было сделано в конце :) Хотя параметр Counter в ядре должен быть указателем (добавить '*') и удалить '&' в 'atomic_inc', иначе он не прошел build –