Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Алгоритмы > Параллельный алгоритм возведения в степень


Автор: Revares 14.12.2010, 20:41
Всем привет!

Возможно ли  распараллелить операцию возведения целого числа  в дробную степень?
Есть ли алгоритм быстрого возведения целого числа в дробную степень? 

Автор: NumLock 21.12.2010, 09:50
a^(p/q) —суть извлечение корня q-той степени из a^p. Возведение числа в p-тую степень можно распараллелить, хотя и не очень эффективно (равномерность загрузки процессоров будет уменьшаться с каждой итерацией). a^p = a*a*a*...*a (p раз). Можно задействовать floor(n/2) процессоров, вот так: a^p=(a*a)*(a*a)*...*(a*a). Все что в скобках вычисляется параллельно.

На OpenMP это будет выглядеть примерно так:
Код

#pragma omp parallel
{
    int result = 1;
    for (int i = 0; i < p; i++)
    #pragma omp task
        result *= a;
}
/** а потом вычисляем корень n-ой степени
 *  уже последовательно
 *  кажется это делается так
 */ 
double = exp(1/q*log(result));

Автор: maxim1000 21.12.2010, 09:58
а нужно ли?
неужто так много времени занимает?
просто чем меньше распараллеливаемый кусок, тем большую часть занимают накладные расходы на общение между потоками и т.п.

или числа длинные?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)