12
votes

Se mettre en commençant par une programmation parallèle

Cela ressemble donc à la multicœur et toutes ses complications associées sont là pour rester. Je planifie un projet de logiciel qui bénéficiera certainement du parallélisme. Le problème est que j'ai très peu d'expérience en écrivant un logiciel simultané. Je l'ai étudié à l'université et j'ai bien compris les concepts et la théorie très bien, mais vous avez des mains seules sur une expérience utile de la construction de logiciels pour courir sur plusieurs processeurs depuis l'école.

ma question est donc, quelle est la meilleure façon de commencer avec la programmation multiprocesseur? Je connais principalement le développement Linux en C / C ++ et Obj-C sur Mac OS X avec une expérience de fenêtres presque zéro. De plus, mon projet logiciel prévu nécessitera une FFT et probablement des comparaisons de points flottants de nombreuses données.

Il y a opencl, openmp, MPI, threads POSIX, etc. Quelles technologies dois-je commencer par?

Voici quelques options de pile que je considère, mais pas sûres s'ils me permettront d'expérimenter de travailler dans mon objectif:

  • Dois-je avoir la neige léopard et essayer de Obtenez des programmes Opencl Obj-C pour exécuter Exécution sur le GPU ATI X1600 sur mon portable? ou
  • devrais-je obtenir un PlayStation et essayez d'écrire C code pour jeter à travers ses six cœurs de cellule disponibles? ou
  • devrais-je construire une boîte Linux avec une carte NVIDIA et essayez de travailler avec Cuda?

    Merci d'avance pour votre aide.


1 commentaires

Installez VS2010 ou 2012 sous Windows, démarrez-le, accédez à F # Interactive et tapez array.map (((+) 3) [| 1..10 |] . Vous avez écrit un programme F # Serial F #. Ensuite, tapez array.parallel.map ((+) 3) [| 1..10 |] . Vous êtes une programmation parallèle.


7 Réponses :


2
votes

Vous devriez En vous apprendre à erlang . Pour grand bien.


0 commentaires

3
votes

Si vous êtes intéressé par le parallélisme dans le système d'exploitation X, assurez-vous de vérifier Grand Central Dispatch , d'autant plus que la technologie a été ouverte et peut bientôt voir une adoption beaucoup plus large.


2 commentaires

Savez-vous si GCD me permettra d'exécuter FFT sur un GPU X1600?


Vous voulez regarder Opencl dans ce cas, pas GCD. Le GCD est pour les CPU, Opencl est pour GPU.



2
votes

Vous n'avez pas besoin de matériel spécial comme des cartes graphiques et des cellules pour effectuer une programmation parallèle. Votre processeur multi-fondamental simple profitera également de la programmation parallèle. Si vous avez de l'expérience avec C / C ++ et Objective-C, commencez par l'un de ceux-ci et apprenez à utiliser des threads. Commencez par des exemples simples tels que la multiplication de matrice ou la résolution de labyrinthe et vous en apprendrez à propos de ces problèmes Pesky (le logiciel parallèle n'est pas déterministe et plein de heisenbugs).

Si vous voulez aller dans le multiparallallisme massif, je choisirais opencl car il est le plus portable. Cuda a toujours une communauté plus grande, plus de documentation et des exemples et est un peu plus facile, mais vous une carte NVIDIA.


2 commentaires

Je pense que Cuda peut probablement être mon meilleur choix depuis que la communauté est un peu plus développée, Nvidia semble être attachée à HPC et à bien ... c'est C et Linux. Je ne sais toujours pas si GPU sera capable de courir des choses comme FFT, ou même si cette question a du sens du tout!


FFT a beaucoup de sens. Voir par exemple MACRESEARCH.ORG/CUDA-QUICK-LOOK-AND -Comparison-FFT-Effectan Ce



4
votes

Je suggérerais d'aller chercher OpenMP et MPI Initialement, je ne suis pas sûr que cela compte que vous choisissez d'abord, mais vous devez absolument vouloir (à mon avis :-)) Apprendre les approches de mémoire partagées et distribuées en parallèle.

Je suggère d'éviter les threads opencl, Cuda, Posix, au début: obtenez une bonne mise à la terre dans les bases des applications parallèles avant de commencer à lutter avec la sous-structure. Par exemple, il est beaucoup plus facile d'apprendre à utiliser les communications de diffusion dans MPI qu'il ne s'agit de les programmer dans des threads.

Je colle avec C / C ++ sur votre Mac puisque vous les connaissez déjà et que vous êtes de bonnes bibliothèques open-source OpenMP et MPI pour cette plate-forme et ces langues.

Et, et pour certains d'entre nous, c'est un grand avantage, tout ce que vous apprenez sur C / C ++ et MPI (dans une moindre mesure, il est vrai que OpenMP aussi) vous servira bien lorsque vous êtes diplômé à de vrais supercalculateurs.

Tout subjectif et argumentatif, alors ignorez ceci si vous le souhaitez.


1 commentaires

Salut Mark, avez-vous quelques liens que vous pouvez m'envoyer pour commencer OpenMP et MPI? -Taalesh -tatalesh



3
votes

L'état partagé traditionnel et impératif avec les serrures n'est pas votre seul choix. Riche Hickey, le créateur de Clojure, un LISP 1 pour la JVM, fait un argument très convaincant contre l'état partagé. Il soutient essentiellement qu'il est presque impossible de bien avoir raison. Vous voudrez peut-être lire sur le message en passant des acteurs ALA Erlang ou des bibliothèques STM.


0 commentaires

0
votes

Peut-être que votre problème convient au Mapreduce paradigme. Il s'occupe automatiquement des problèmes d'équilibrage de la charge et de concurrence, le document de recherche de Google est déjà un classique. Vous avez une implémentation à une seule machine appelée Mars qui fonctionnent sur GPU, cela peut fonctionner correctement pour vous. Il y a aussi Phoenix qui exécute une carte-réduction sur les multipérapateurs multicœurs et symétriques.


0 commentaires

0
votes

Je commencerais avec MPI lorsque vous apprenez à gérer la mémoire distribuée. Le livre de Pacheco est un oldie mais une goodie, et MPI court bien de la Boîte sur OS X donnant maintenant une très bonne performance multicœur.


0 commentaires