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 ?
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 ?
Utilisez OpenMP. gcc le prend en charge. Visual C++ le prend en charge.
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).
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
Je vous suggère de regarder les blocs de construction de threads d'Intel.
http://www.threadingbuildingblocks.org/
et en particulier parallel_reduce
.
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.