2016-07-06 9 views
0

Например, этот фрагмент кода будет компилироваться и выполняться нормально?делает нормальные указатели арифметические работы на ядрах opencl?

int* end = local_buffer + BUFFER_SIZE; 
for(int* x = local_buffer; x < end; ++x) 
{ 
    ... 
} 
+4

Да, если указатели находятся в пространстве устройства. Нет проблем. – DarkZeros

ответ

0

Арифметика указателей не работает, но вам нужно подписать указатели с соответствующим объемом памяти. Так что ваш пример кода, скорее всего, не так: если local_buffer объявлен как

local int local_buffer[BUFFER_SIZE]; 

Тогда напечатает end и x Variables' сусло также имеют local specfier:

local int* end = …; 
for (local int* x = … 

по умолчанию является global, что приведет к сбоям в работе, если ваш указатель находится в локальной или постоянной памяти. Я обнаружил, что многие реализации OpenCL не предупреждают вас об этом, поэтому вы должны быть очень осторожны.