MPI n'est pas un langage de programmation. MPI définit un ensemble de routines de bibliothèque qui peuvent être appelées à partir de programmes C et Fortran. Les programmes MPI utilisent généralement une approche à programme unique et à données multiples. Plusieurs instances, ou rangs MPI, du même programme s'exécutent simultanément. Chaque rang calcule une partie différente du problème plus vaste et utilise MPI pour communiquer des données entre les rangs. Du point de vue d'un programmeur MPI, les rangs peuvent s'exécuter sur le même nœud ou sur des nœuds différents ; le chemin de communication peut être différent, mais cela est transparent pour le programme MPI.
Les mécanismes de démarrage des applications MPI ne font pas partie de la Norme. Nous montrons comment gérer les programmes Intel MPI sous Linux, mais la plupart des autres distributions ont une sémantique similaire et des fonctionnalités similaires. La manière basique d'exécuter un programme Intel MPI est (avec
$ mpirun –n < N > ./prg.x
Cela sera suffisant pour un nœud de mémoire partagée ou un cluster avec un système de gestion par lots standard. Si vous rencontrez l'erreur ci-dessous :
mpirun.openmpi: command not found
vous pouvez essayer d'installer le package ci-dessous selon votre choix de distribution.
Répartition | Commande |
---|---|
Debian | apt-get install openmpi-bin |
Ubuntu | apt-get install openmpi-bin |
Kali Linux | apt-get install openmpi-bin |
Raspbian | apt-get install openmpi-bin |
Résumé
Le modèle de programmation MPI est un choix naturel pour les clusters contenant des coprocesseurs Intel Xeon Phi. Le programmeur peut accélérer les rangs MPI individuels en déchargeant les noyaux de calcul clés sur le coprocesseur. Cependant, il faut veiller à éviter les conflits de ressources et à amortir l'augmentation du nombre de communications. Alternativement, le coprocesseur a les caractéristiques d'un seul autre nœud de cluster, bien qu'il ait des capacités de calcul différentes de celles de l'hôte, et les rangs MPI peuvent s'exécuter de manière native sur le coprocesseur. L'une ou l'autre approche introduit de nouveaux degrés d'hétérogénéité et la probabilité d'un déséquilibre de charge en tant que goulot d'étranglement des performances.