Question

Y at-il paradigme que vous donner un état d'esprit différent ou avoir un regard différent pour écrire des applications multi thread? Peut-être quelque chose qui se sent très différent comme la programmation procédurale à la programmation de la fonction.

Était-ce utile?

La solution

Concurrency a de nombreux modèles différents pour des problèmes différents. La page Wikipedia pour noreferrer"> énumère quelques modèles et il y a aussi une page pour qui a un bon point de départ pour les différentes sortes de façons d'aborder la concurrence.

L'approche que vous prenez est très dépendante du problème à portée de main. Différents modèles résoudre divers problèmes différents qui peuvent survenir dans des applications concurrentes, et certains se fondent sur d'autres.

En classe on m'a enseigné que exclusion mutuelle et synchronisation ensemble pour résoudre les problèmes de concurrence. Certaines solutions ne nécessitent qu'un seul, mais à la fois, vous devriez être en mesure de résoudre tout problème de concurrence.

Pour un concept très différent vous pourriez regarder immuabilité et de la concurrence. Si toutes les données sont immuables alors les approches traditionnelles de la concurrence ne sont même pas nécessaires. Cet article explore ce sujet.

Autres conseils

Je ne comprends pas vraiment la question, mais si vous commencez à faire un certain codage en utilisant CUDA donner vous une autre façon de penser à des applications multi-thread.

Il se distingue des techniques multi-threading général, comme sémaphores, moniteurs, etc., parce que vous avez des milliers de threads simultanément. Le problème de parallélisme dans CUDA réside plus dans le partitionnement des données et mélanger les morceaux de données plus tard.

Juste un petit exemple d'une refonte complète d'un problème commun de série est le SCAN algorithme. Il est aussi simple que:

  • Etant donné un ensemble {a, b, c, d, e}

Je veux que le jeu suivant:

{a, a + b, a + b + c, a + b + c + d, a + b + c + d + e}

Lorsque le symbole « + » dans ce cas est tout opérateur Commutattive (non seulement plus, vous pouvez faire la multiplication aussi).

Comment faire en parallèle? Il est une refonte complète du problème, il est décrit dans cette papier .

Beaucoup plus implémentations de différents algorithmes CUDA peuvent être trouvés dans le NVIDIA

Eh bien, un très conservateur changement de paradigme est de la concurrence fil centrée sur (tout partager) vers centrée processus concurrency (séparation espace d'adressage). De cette façon, on peut éviter le partage des données non voulues et il est plus facile d'appliquer une politique de communication entre les différents sous-systèmes.

Cette idée est ancienne et a été propagée (entre autres) par la communauté Micro-noyau OS pour construire des systèmes d'exploitation plus fiables. Fait intéressant, le Singularity OS prototype par Microsoft Research montre que les espaces d'adresse traditionnels même pas nécessaire lorsque l'on travaille avec ce modèle.

L'idée relativement nouvelle que je préfère est mémoire transactionnelle : éviter en vous assurant les problèmes de concurrence les mises à jour sont toujours atomique.

Avoir un looksee OpenMP pour une variation intéressante.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top