Je fais des essais de temps sur mon code, et logiquement, il semble vraiment facile de paralléliser avec OpenMP car chaque essai est indépendant des autres. En l'état actuel, mon code ressemble à ceci:E/S OpenMP et Fichier
for(int size = 30; size < 50; ++size) {
#pragma omp parallel for
for(int trial = 0; trial < 8; ++trial) {
time_t start, end;
//initializations
time(&start);
//perform computation
time(&end);
output << size << "\t" << difftime(end,start) << endl;
}
output << endl;
}
je soupçonne faufilant que ce genre d'un faux pas, cependant, que deux threads peuvent écrire simultanément des valeurs à la sortie, vissage ainsi la mise en forme . Est-ce un problème, et si oui, va entourer le code output << size << ...
avec une déclaration #pragma omp critical
le corriger?
Je ne suis pas tellement intéressé par les données de synchronisation absolues, je suis juste en train d'essayer de voir la mise à l'échelle relative entre les différentes tailles. Cela sera-t-il aussi lourdement touché? Les premiers essais parallèles ont semblé suffisamment convaincants comme les résultats de la série pour que je puisse continuer, mais je suis toujours un noob et l'apparence peut être trompeuse :) –
Je peux penser à plusieurs scénarios dans lesquels différentes tailles de problèmes seraient impactées différemment par les problèmes que j'ai mentionnés. Par exemple, il y aura une coupure de pression de cache différente en fonction du parallélisme avec lequel vous courez. – Novelocrat