распараллеливание с использованием openmp - PullRequest
1 голос
/ 05 ноября 2011

У меня есть эта функция, которую я хотел бы распараллелить, используя openmp:

for(i=len-1;i>=0;i--){
  if(bin[i]==49) // bin is a binary number & is
                 // stored in a string. 49 is ascii value of 1
  {
     s=(s*x)%n;    
  }
  x=(x*x)%n;
}

Я пытался использовать #pragma omp parallel for, но он не работает. Я тоже пробовал с функцией сокращения, но получил неправильные ответы.
Я думаю, причина в том, что значение s зависит от x (которое зависит от значения каждого шага).

1 Ответ

2 голосов
/ 05 ноября 2011

Вы правы, что зависимость от x вызывает проблемы.Эта зависимость между итерациями.Каждая итерация требует x от предыдущей итерации.Таким образом, он делает весь цикл не распараллеливаемым.

Похоже, этот цикл вычисляет модуль мощности с использованием повторного возведения в квадрат.,Зависимость присуща алгоритму, который вы используете.

...