Pourquoi les programmeurs définissent-ils des modèles de programmation pour remplacer C / POSIX pour le parallélisme?

10

Les fournisseurs de nouvelles architectures informatiques essaient régulièrement d'introduire de nouveaux modèles de programmation, par exemple récemment CUDA / OpenCL pour GPGPU, et remplacent C / POSIX comme interface de contrôle pour le parallélisme de plate-forme. (Poss & Koening, AM3: Vers un accélérateur matériel Unix pour plusieurs cœurs, 2015)

Pourquoi les concepteurs d'architecture essaient-ils de concevoir de nouveaux modèles de programmation pour remplacer C / POSIX pour le calcul parallèle? C / POSIX n'est-il pas bien adapté aux multiprocesseurs ou les auteurs originaux de C / POSIX n'avaient-ils pas à l'esprit le besoin de calcul parallèle au moment de la conception de C / POSIX? Ou est-ce le cas que les programmeurs ont besoin de plus de capacités que C / POSIX peut fournir, recourant ainsi à de nouvelles conceptions, par exemple CUDA / OpenCL, etc.?

codezombie
la source
7
N'oubliez pas que le logiciel est une abstraction du matériel. Si le matériel change trop, l'abstraction logicielle n'est peut-être plus la bonne. Je crois que cela est certainement vrai lorsque l'on envisage d'utiliser des threads POSIX pour un GPU, mais je laisserai à quelqu'un d'autre le soin d'expliquer plus en détail dans une réponse.

Réponses:

10

Comparez les threads POSIX et Grand Central Dispatch, par exemple. J'ai du code qui distribue à quatre threads en huit lignes de code. Avec POSIX, tout cela serait un véritable cauchemar.

D'un autre côté, CUDA / OpenCL ne sont pas du tout sur le multithreading, mais sur l'utilisation de capacités vectorielles massives. (Ils peuvent également faire du multithreading, mais la vectorisation est la chose importante).

gnasher729
la source
9

Il existe une distinction entre la programmation parallèle SIMD et le modèle de programmation parallèle plus traditionnel utilisé par POSIX.

SIMD est le modèle utilisé par CUDA, OpenCL, etc. Il existe un seul ensemble d'instructions qui sont exécutées simultanément par de nombreux threads, chacun fonctionnant sur son propre pool de données. Ceci est très utile pour des choses comme les graphiques 3D, où les mêmes transformations sont appliquées à un grand nombre de points.

Le modèle POSIX suppose que chaque thread s'exécute de manière asynchrone et que chaque thread peut potentiellement exécuter du code totalement différent.

Les deux modèles ont leurs forces et leurs faiblesses - c'est pourquoi ils sont différents. POSIX est beaucoup plus flexible, mais CUDA / OpenCL / etc. peut tirer parti d'un matériel spécialisé, exécutant des milliers de threads (généralement plus simples) à la fois.

Mike Harris
la source