Je viens d'écrire mon premier programme OpenMP qui parallélise une boucle simple. J'ai couru le code sur ma machine à deux cœurs et j'ai vu une accélération en passant de 1 thread à 2 threads. Cependant, j'ai couru le même code sur un serveur linux d'école et n'ai vu aucune accélération. Après avoir essayé différentes choses, je me suis finalement rendu compte que la suppression de certaines instructions printf inutiles entraînait une accélération significative du code. Ci-dessous la partie principale du code que je parallélisées:Pas d'accélération avec printf inutile utilisant OpenMP
#pragma omp parallel for private(i)
for(i = 2; i <= n; i++)
{
printf("useless statement");
prime[i-2] = is_prime(i);
}
Je suppose que la mise en œuvre de printf dispose d'une charge importante qui doit être OpenMP dédouble à chaque thread. Quelles sont les causes de ce surcoût et pourquoi OpenMP ne peut-il pas le surmonter?
Impossible de résister; entendu parler du Prime Sieve? http://en.wikipedia.org/wiki/Generating_primes#Prime_sieves – Will
Quel compilateur utilisez-vous? Quelle version? – osgx