2010-10-12 20 views
2

J'expérimente openMP pour le traitement de données volumineuses et relativement nouveau dans ce domaine. Mon ensemble de données d'entrée est énorme et je l'ai donc divisé en plusieurs sous-ensembles et chaque thread travaillant sur le sous-ensemble de données. Chaque élément de données du sous-ensemble est traité par le thread. Si l'un des threads échoue pendant son opération sur n'importe quel dataitem, je voudrais terminer d'autres threads et retourner un échec. Utiliser une variable partagée est une option, mais y a-t-il une meilleure façon de faire la même chose?OpenMP: existe-t-il un moyen pour un thread de terminer tous les autres threads parallèles?

Répondre

2

Que voulez-vous que se passe-t-il si l'un de vos threads s'étouffe à son entrée? Voulez-vous interrompre soudainement le programme? Ou voulez-vous arrêter l'exécution parallèle et avoir une partie sérielle du programme en ordre? OpenMP n'est pas vraiment conçu pour l'un ou l'autre type d'opération, donc vous allez avoir du mal à le faire, plutôt que de vous battre avec lui comme la plupart des débutants. Vous pouvez certainement, comme vous le suggérez, utiliser des variables partagées et écrire votre propre logique pour arrêter le programme ou sauter à la fin de la région parallèle si l'un des threads échoue. Mais il n'y a pas de mécanismes intrinsèques OpenMP pour ces opérations.

Vous pouvez étudier les nouvelles fonctionnalités task d'OpenMP 3.0. En utilisant ceux-ci, vous pouvez certainement implémenter un système dans lequel les tâches sont envoyées aux threads qui renvoient le succès ou l'échec, et ont d'autres tâches qui traitent des échecs. Enfin, on pourrait soutenir qu'une mauvaise entrée ne devrait pas causer le crash d'un programme, mais c'est un autre sujet.

+0

Merci pour la réponse, je pense que l'utilisation de variables partagées semble être l'option pour moi maintenant. –