Я с трудом определить, почему ошибка сегментации происходит случайным образом на следующей строке в моем коде:OpenCL clEnqueueReadBuffer случайно
rc = clEnqueueReadBuffer(ompctx->clctx->queue,
ompctx->result, CL_TRUE, 0, sizeof(int), &pos,
1, &ompctx->clctx->ev1, NULL);
ompctx-> Результатом является объект памяти используется как массив целых чисел и позиция является объект хозяина объявлен как:
int pos
Я попытался с позами объявленных в стеке и в глобальном пространстве, и результат не меняется. Я пробовал с ожиданием окончания последнего ядра (как и выше, хотя я не должен, потому что у меня очередь команд в очереди), и без ожидания результат остается тем же.
Я использую AMD APP v2.8, и я попытался использовать i7 с 8 процессорами и AMD FirePro v8800. Оба имеют ту же проблему.
Я пропустил что-то очевидное? Что еще я должен проверить?
Возможно, вы разыскиваете указатель 'null'? Не видя большего кода, это будет трудно сказать. –
Я печатаю указатели, и все они выглядят нормально до вызова ReadBuffer. Очередь используется прямо перед этим вызовом, и она всегда преуспевает, результат также используется с успехом, pos - глобальная переменная, и события не имеют никакого значения, если они есть или нет. Поэтому я не думаю, что это разыменование нулевого указателя. –
Вы пробовали использовать платформу Intel OpenCL? Это дает вам такую же ошибку? – Ani