2015-10-19 2 views
0

Я переношу существующий код декодирования Рида-Соломона в OpenCL В моем ядре есть несколько локальных массивов, таких как uint myarray [256]; в локальных функциях. И у меня есть довольно много функций memset над ними, и я не смог их использовать. Я могу просто написать заполнение их в цикле, но это может быть неэффективно. Кроме того, некоторые предложения о написании такого цикла тоже приветствуются, потому что кажется, что OpenCL просто не имеет memset.memset local variable/memory в OpenCL

Но OpenCL жалуется на отсутствующие MemSet, как кажется, не будучи отсутствующий его полностью

предупреждение: безоговорочное признание C библиотеки функций «MemSet» с типом «недействительным * (ничтожной *, Int, неподписанные долго) '

и предлагает включить <string.h>, но не смог найти его

fatal error: <string.h> file not found.

+0

Пожалуйста, разместите минимальный, полный и проверяемый пример ([mcve] (http://stackoverflow.com/help/mcve)) –

+0

Ну, возьмите самый простой пример OpenCL из OpenCL SDK и напишите что-нибудь вроде uint myarray [ 256]; memset (myarray, 0, 100); , скажем, в начале источника ядра. –

+0

Вы '#include ' в вашем коде? – Gilles

ответ

1

Там нет MemSet (ни какой-либо из остальной части стандартной библиотеки C) доступны в коде устройства OpenCL, так что вам нужно либо цикл вручную (возможно, с #pragma unroll оттенком) или, если массив фактически local в смысле OpenCL (т. е. разделяемые между рабочими элементами в рабочей группе), каждый рабочий элемент очищает один из элементов (что значительно более эффективно).