J'essaie d'utiliser OpenMP dans mon projet qui contient N agents dans une simulation. Chaque agent a un vecteur de position. A l'intérieur de mon programme, je fais quelque chose comme ce qui suit:OpenMP pour les boucles imbriquées?
for(int i=0;i<agents.size();i++){
for(int j=0;j<agents.size();j++){
if(i==j) continue;
if(distance_between(i,j)<10){
//do a lot of calculations for interaction between i and j,
//and a bunch of changes to variables of the Agents stored in the list
}
}
}
Suis-je capable de simplement préfixer « #pragma omp parallèle » en face de la première boucle pour distribuer le travail? Si je le fais, mon programme s'exécute beaucoup plus rapidement, mais je crains que les calculs qu'il effectue ne soient pas exacts. L'ordre de ces calculs n'a pas d'importance, tant que chaque paire i, j est traitée, et aucune variable en dehors des variables définies à l'intérieur de la boucle la plus interne, et les variables de ma classe Agents sont toujours modifiées (seulement lues).
N'étant pas un type de système J'ai du mal à comprendre les rouages internes d'OpenMP, et je m'en mets un peu en doute. Merci pour toute aide concernant ceci!
Vous devez vous assurer que vos boucles for ne tiennent pas les inhibiteurs à la parallélisation (par exemple, la dépendance des données) – user2230996