В настоящее время я работаю с OpenCL и пытаюсь записать данные в массив, который будет использоваться из ЦП впоследствии. Размер локальной рабочей группы - «1», а размер рабочей группы - размер массива. Проблема заключается в следующем в kernel.cl:OpenCL Доступ к памяти
__kernel void foo (..., __global int *a){
int test_array[2];
for (int i = 0; i<20; i++){
... // do something here
}
test_array[0] = 5;
int test = test_array[1];
a[gid] = test; // this throws an error at the graphical unit
a[gid] = test_array[0] // but this works if we assign test_array after the for-loop
В то время как происходит ошибка, экран становится черным для второго и возвращает ERRORCODE «-5» (CL_OUT_OF_RESSOURCES), но это, кажется, по умолчанию ErrorCode Nvidia ,
Чтение test_array (int test ..) показывает, что мы можем его прочитать, а [gid] = test_array [0] показывает, что мы можем получить доступ к массиву a [], но комбинация не выполняется ,
Так что мой вопрос:
- Почему мы не можем копировать данные из test_array в виде [] - массив после для цикла?
Я ценю любые комментарии.
'Почему мы не можем копировать данные из test_array в массив a [] после цикла for. 'Все, что вы делаете, это перемещение ошибки повреждения памяти при изменении исходного кода. Это не имеет никакого отношения к различию между входом int и int array. Поэтому проблема в том, что у вас где-то есть поврежденная память, и вам нужно выяснить, где. Поэтому мой совет для вас - убедиться, что ошибка все еще существует (не скрывайте ее, делая ненужные изменения в кодировке) и исправляйте проблему. – PaulMcKenzie
Я не вижу причины, почему это не должно работать для вас. Неужели это происходит на другом gpus? Это может быть ошибкой в реализации. Если у вас есть доступ к графике Intel HD или устройству AMD/ATI, было бы очень полезно попробовать его для отладки. Может быть, ошибка должна быть подана в Nvidia? Может быть, у вашего конкретного устройства есть проблема? – mfa
Я согласен с @PaulMcKenzie. Или по-другому, это часть «сделать что-то здесь», которую вы оставили. –
Dithermaster