Я занимаюсь программированием OpenCL, и в одном месте моего кода я получаю странную ошибку.
a и a_end - указатели на локальную память
if (a+POS<=a_end) {
max = ....
} else {
max = *(a_end-1);
}
В моем случае "else"не достигается в текущем цикле.Тем не менее, приложение падает с -5 CL_OUT_OF_RESOURCES, если строка является частью кода.Если я прокомментирую строку, программа работает хорошо.Это очень странно.
Есть ли у вас какие-либо предложения?
С уважением, Крис
Редактировать: Еще немного кода
Значенияa, a_end и POS1 до его сбоя: a: 3298304 a_end: 3311264 POS1: 34
border=b-b_end; //TODO: Check if all dummy elements are removed in this case
if(POS1<border && a+POS1<a_end) {
s_data[POS1+s_maxes[2]-border+1]=a[POS1];
s_ids[POS1+s_maxes[2]-border+1] = a_pos+POS1;
}
if(POS1+1==border) {
debug[0] = a+POS1;
debug[1] = a_end;
s_maxes[1]=*(b_end-1);
if(a+POS1<=a_end) {
s_maxes[0]=s_data[s_maxes[2]];
} else {
s_maxes[0]=*(a_end-1); //Here is the line where it crashes
}
}
if(POS2<border && a+POS2<a_end) {
s_data[POS2+s_maxes[2]-border+1]=a[POS2];
a_pos+POS2;
}
if(POS2+1==border) {
s_maxes[1]=*(b_end-1);
if(a+POS2<=a_end) {
s_maxes[0]=s_data[s_maxes[2]];
} else {
s_maxes[0]=*(a_end-1);
}
}
a+=border;a_pos+=border;