Ecriture d'un code parallèle en utilisant les pragma openMP.
Le but est de calculer les 100 premières décimales de PI. L'étudiant à le choix de son algorithme, le site wikipédia pourra fournir l'essentiel des informations sur les méthodes de calcul.
Les pré-requis sont :
utilisation de openMP
programmation en C/C++
fournir un algo séquentiel
fournir 1 ou plusieurs implémentation openMP
donner pour l'algo séquentiel et la solution openMP une complexité algorithmique ainsi qu'une complexité totale.
Attention :
Comment vérifier que votre résultat est juste ? Il faut pour celà trouver un site qui vous donne les 100 premières décimales de PI pour comparer.
Comment encoder 100 décimales en utilisant les typages C/C++ ?
durée : 2h 30 mn.
correction possible :
void main()
{
const int kN = 100000000;
long double top = 0.L;
long double bottom = 0.L;
long double kStep = 1.L/kN;
long double sum = 0.L;
#pragma omp parallel private(top, bottom)
{
#pragma omp for reduction(+:sum)
for(int i = 0; i < kN; i++) {
top = 4.L/(1.L + (kStep*i)*(kStep*i));
bottom = 4.L/(1.L + (kStep*(i+1))*(kStep*(i + 1)));
sum += (top + bottom)*kStep/2.L;
} // i
}
std::cout.precision(16);
std::cout << "pi = " << sum << "\n";
}