Распараллеливание циклов: где небезопасная зависимость? - PullRequest
0 голосов
/ 09 марта 2011

Я пытаюсь распараллелить следующий цикл, используя параметры автоматического распараллеливания, представленные в Compis Solaris Studio.

int max = A->m;
complex** A_me2;    
complex fred;   

for ( i = 0; i < max; i++ )
{
    for ( j = 0; j < i-1; j++ )
    {
        A_me2[i][j] = fred;
        A_me2[i][j] = fred;
    }
}

Однако, когда я запускаю этот цикл через компилятор, я получаю сообщение:параллельная, небезопасная зависимость ».Где именно небезопасная зависимость?Ясно, что нет псевдонимов между входами и выходами обоих операторов присваивания, и i и j являются частными для каждого потока ... Я чрезвычайно озадачен тем, почему это происходит.Любое руководство будет с благодарностью!

1 Ответ

1 голос
/ 09 марта 2011

Поскольку A_me2 является массивом указателей, компилятор не знает (например), что A_me2[0] и A_me2[1] не перекрываются, что приводит к нескольким записям в одном и том же месте, которые необходимо правильно упорядочить,Часто существует компилятор #pragma, который сообщает компилятору, что нет никаких зависимостей, переопределяющих автоматические механизмы безопасности.

...