OpenCL Out of Resources - сбой в строке кода, которая не достигнута в этот момент - PullRequest
0 голосов
/ 06 марта 2012

Я занимаюсь программированием 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;

1 Ответ

0 голосов
/ 06 марта 2012

Есть хороший шанс, что произойдет следующий сценарий: до того, как ваше if значение a_end будет повреждено, весьма вероятно, что оно инициализируется равным 0 (без дальнейшего знания кода это мой лучший выстрел, но это также может быть значением, которое меньше a + POS), и тогда, очевидно, выполняется ветвь else, которая пытается отменить ссылку на значение, найденное по адресу 0 - 1, который является довольно большим числом, и затем происходит сбой приложения. Очевидно, что если вы удалите ветку else, этот код не будет выполнен.

Подсказка: поместите несколько распечаток для значения a_end.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...