Я только что написал свою первую программу OpenMP, которая распараллеливает простой цикл. Я запустил код на своей двухъядерной машине и увидел некоторую скорость при переходе от 1 потока к 2 потокам. Тем не менее, я запустил тот же код на школьном Linux-сервере и не видел ускорения. Пробовав разные вещи, я наконец понял, что удаление некоторых бесполезных заявлений printf привело к значительному ускорению кода. Ниже приводится основная часть кода, который я распараллеливание:Нет ускорения с использованием бесполезных printf с использованием OpenMP
#pragma omp parallel for private(i)
for(i = 2; i <= n; i++)
{
printf("useless statement");
prime[i-2] = is_prime(i);
}
Я думаю, что реализация Printf имеет значительные накладные расходы, что OpenMP должен быть дублирующий каждой нити. Что вызывает эти накладные расходы и почему OpenMP не может его преодолеть?
Не выдерживает; слышал о Prime Sieve? http://en.wikipedia.org/wiki/Generating_primes#Prime_sieves – Will
Какой компилятор вы используете? Какая версия? – osgx