0
У меня есть код, который имеет зависимость от данных.Удалить зависимость данных в C
пример кода:
int data[1000*3];
int result[1000]={0,};
// initialize data[]
for(i=0; i<1000; i++)
{
a = data[i*3 + 0];
b = data[i*3 + 1];
c = data[i*3 + 2];
if((a>b) && (a>c)) // This line makes data dependency
result[i]++;
}
Я хочу, чтобы удалить зависимость от данных распараллелить этот код. Я знаю, что мне нужно изменить свой код, но не знаю, как его исправить.
Как мне исправить этот код?
Я не вижу зависимость данных, но иногда компилятор запутывается, когда вы делаете индексацию математику в квадратных скобках. Пока вы приватизируете a, b и c, это должно быть параллелизуемо. Поскольку вы отметили это с помощью openacc, я бы предложил использовать 'acc parallel loop' вместо' acc kernels', если компилятор сообщает вам, что он не может распараллеливаться из-за зависимости данных. – jefflarkin
Фактически, я нашел зависимость от другого кода (используемого NVVP). Но, как этот пример кода, NVVP не говорит мне, что делает зависимость данных. Я думаю, что зависимость моего реального кода происходила по другим причинам. Я попытаюсь найти другую причину. Благодарим вас за помощь, jeff. :) – soongk
Две вещи, которые нужно искать: 1) Если вы обращаетесь к нескольким массивам, убедитесь, что указатели объявлены 'ограничивать ', поэтому компилятор знает, что они не сглажены. 2) Индексирование математики внутри квадратных скобок. – jefflarkin