2009-02-27 9 views
0

Y a-t-il un paradigme qui vous donne un état d'esprit différent ou qui a une vision différente de l'écriture d'applications multi-thread? Peut-être quelque chose qui semble très différent comme la programmation procédurale pour fonctionner la programmation.Le paradigme du filetage?

Répondre

2

La concurrence a beaucoup de modèles différents pour différents problèmes. La page Wikipedia pour concurrency énumère quelques modèles et il y a aussi une page pour concurrency patterns qui a un bon point de départ pour différents types de manières d'approcher la concurrence.

L'approche que vous prenez est très dépendante du problème rencontré. Différents modèles résolvent différents problèmes pouvant survenir dans des applications concurrentes, et d'autres s'appuient sur d'autres.

Dans la classe I a été enseigné que la simultanéité utilise mutual exclusion et synchronization ensemble pour résoudre les problèmes de concurrence. Certaines solutions n'en nécessitent qu'une, mais avec les deux vous devriez pouvoir résoudre n'importe quel problème de concurrence.

Pour un concept très différent, vous pouvez envisager l'immuabilité et la simultanéité. Si toutes les données sont immuables, les approches classiques de la simultanéité ne sont même pas requises. This article explore ce sujet.

0

Je ne comprends pas vraiment la question, mais si vous commencez à faire du codage en utilisant CUDA, vous avez une façon différente de penser aux applications multi-thread.

Il diffère des techniques générales de multi-threading, comme les sémaphores, les moniteurs, etc. parce que vous avez des milliers de threads simultanément. Ainsi, le problème du parallélisme dans CUDA réside plus dans le partitionnement de vos données et le mélange des blocs de données plus tard.

L'algorithme SCAN est un petit exemple d'une refonte complète d'un problème série commun. 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 un opérateur commutatif (non seulement plus, vous pouvez également faire la multiplication).

Comment faire cela en parallèle? C'est une refonte complète du problème, il est décrit dans ce paper.

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

0

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

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

0

L'idée relativement nouvelle que je préfère est transactional memory: évitez les problèmes de simultanéité en vous assurant que les mises à jour sont toujours atomiques.

0

Voir le OpenMP pour une variation intéressante.

Questions connexes