2 votes

Calcul parallèle pour les intégrales

Je veux réduire le temps de calcul pour une intégrale longue en divisant la plage d'intégration. J'utilise C++, Windows et un processeur Intel i7 quad-core.

Comment puis-je le diviser en 4 calculs parallèles ?

3voto

Pavel Radzivilovsky Points 11613

Quel est votre algorithme d'intégration?

Mathématiquement, l'intégrale sur une plage est la somme des intégrales sur les parties, donc la parallélisation semble triviale.

2voto

Cătălin Pitiș Points 10520

Utilisez OpenMP. gcc le prend en charge. Visual C++ le prend en charge.

1voto

hhafez Points 13240

Comme d'autres l'ont dit, et je suis sûr que vous le saviez, l'intégration est une sommation, la parallélisation devrait être facile Je sais que vous utilisez C++, mais est-ce que l'utilisation de go est une possibilité ? Il est très facile d'utiliser goroutines pour ce type de travail. Mais je comprends si ce code doit aller chez un client, vous seriez réticent à utiliser go car il est encore inexploré dans la nature. Si c'est un projet personnel, allez-y (sans jeu de mots).

1voto

Abordez cela en 2 parties :

1) Quelle approche de parallélisation allez-vous adopter : MPI, OpenMP, threads, peu importe ? et

2) Comment modifier l'algorithme.

Sur une machine Windows quad-core, je suggérerais OpenMP comme réponse à la première partie de cela. La réponse à la deuxième partie dépend de l'algorithme que vous utilisez. Par exemple, si vous utilisez la technique de Monte Carlo, la parallélisation est anecdotique. Si vous utilisez une quelconque quadrature numérique, il est beaucoup moins anecdotique de s'assurer que aucun des cas particuliers identifiés par d'autres ne deviennent des problèmes sérieux. Cependant, si vous pouvez exclure les intégrales pathologiques, cela ne devrait pas être excessivement difficile

0voto

Andreas Brinck Points 23806

Je vous suggère de regarder les blocs de construction de threads d'Intel.

http://www.threadingbuildingblocks.org/

et en particulier parallel_reduce.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X