Cheats MVAPICH2

Gestion du recouvrement

Par défaut, MVAPICH2 utilise du RDMA-Write pour ses rendez-vous. Le recouvrement calcul/communication est mauvais. Avec du RDMA-Read, le recouvrement est bien meilleur (cf Ce papier )

Pour activer le RDMA-Read lors des rendez-vous, il faut mettre cette variable d'environnement :

  MV2_RNDV_PROTOCOL=RGET

Cheats OpenMPI

OpenMPI utilise des composants partout. Pour spécifier le réseau a utiliser, il y a deux types de composants qui nous interessent

* le BTL (Byte Transfer Layer) correspond aux couches 'basses' de l'implementation. OpenMPI peut appliquer des transformations sur les messages passés par l'application (par exemple, OpenMPI peut couper un message en deux). Une fois ces transformations appliquées, des octets sont passés au BTL

* le MTL (Message Transfer Layer) correspond a une couche plus 'haute' de l'implémentation. Les messages sont passés directement à cette couche.

Pour certains réseaux, des drivers BTL et MTL sont disponibles (pour MX par exemple) Le driver BTL a tendance à avoir des performances 'brutes' (ie: sur un ping pong) moins bonnes que le driver MTL. Sur des programmes un peu plus compliqués, le BTL peut être meilleur du fait des optimisations de OpenMPI (collectives par exemple)

Utiliser MX

MTL:

mpiexec --mca pml cm --mca mtl mx -np 2 programme

Ca utilise MX pour l'internoeud, l'intranoeud et le self.

BTL:

mpiexec --mca pml ob1 --mca btl mx,sm,self -np 2 programme 

Ca n'utilise MX que pour l'internoeud. Pour forcer MX en intranoeud et self, il faut faire:

mpiexec --mca pml ob1 --mca btl mx --mca btl_mx_self 1 --mca btl_mx_shared_mem 1

Utiliser IB

BTL:

mpiexec --mca btl openib,sm,self -np 2 programme

Pour le multirail homogène

Rien de particulier à faire, le BTL va utiliser automatiquement plusieurs cartes.

En cas de multirail homogène, si les carte sont sur le même réseau, il peut faire un gros warning. Si c'est le cas, ajouter cette option peut aider:

mpiexec --mca btl_openib_warn_default_gid_prefix 0 ...

Pour le multirail hétérogène

Idem, rien de spécial à faire puisque tous les BTLs sont utilisés par défaut. Supprimer TCP éventuellement avec

mpiexec --mca btl ^tcp

Par contre, la répartition sur des rails heterogènes n'est pas optimale car les valeurs par défaut sont bizarres pour IB. On peut donc lui donner le débit 0 pour chaque carte pour lui indiquer d'utiliser le debit théorique selon la taille du lien IB:

mpiexec --mca btl_openib_bandwidth_mlx4_0 0 programme

Comme le débit théorique n'est jamais atteint en pratique, il vaut souvent mieux lui donner le débit qu'on veut associer à chaque carte:

mpiexec --mca btl_openib_bandwidth_mlx4_0 11000 programme

C'est un debit en megabit/s. 11000 marche bien sur les joe pour le multirail IB+MX. Pour jack, utiliser 25000.

On ne peut apparemment pas forcer le débit pour les cartes myrinet.

Binder les process

Pour binder le rank X sur le core X

mpiexec --mca mpi_paffinity_alone 1 ...

Lancer les processus dans l'ordre du machinefile

Par défaut, le lanceur OpenMPI ne prend pas vraiment en compte l'ordre des machines du machinefile.

Pour le forcer à lancer le processus dans le bon ordre (Proc #1 sur machine #1, Proc #2 sur machine #2, etc.), il faut utiliser un mca particulier :

mpiexec --hostfile hostfile -mca rmaps seq -np ...

Reactiver knem

/opt/openmpi-1.5 a été compilé avec KNEM mais il est désactivé dans .bashrc pour éviter des warnings parce que le module noyau knem n'existe généralement pas. Pour le réactiver.

mpiexec --mca btl_sm_use_knem 1 ...

Cheats MPICH2

Rediriger stdout et stderr dans des fichiers séparés pour chaque processus

Très utile pour débugger quand on ne peut pas ouvrir un xterm par processus (beaucoup de processus, pas de $DISPLAY, etc.)

en passant l'option -l à mpiexec, chaque affichage est de la forme:

num_proc: affichage

exemple :

$ mpiexec -l  -machinefile ./joe_ib -np 4  ./ring 2>&1 |tee /tmp/plop
0: Size of MPID_nem_mad_module_vc_area_internal_t : 336 | size of nm_sr_request_t :64 | Size of req_area : 72
2: Size of MPID_nem_mad_module_vc_area_internal_t : 336 | size of nm_sr_request_t :64 | Size of req_area : 72
1: Size of MPID_nem_mad_module_vc_area_internal_t : 336 | size of nm_sr_request_t :64 | Size of req_area : 72
3: Size of MPID_nem_mad_module_vc_area_internal_t : 336 | size of nm_sr_request_t :64 | Size of req_area : 72
0: # nmad: strategy = strategy-default
2: # nmad: strategy = strategy-default
1: # nmad: strategy = strategy-default
3: # nmad: strategy = strategy-default
...

Donc pour avoir l'affichage d'un processus particulier:

grep ^0 /tmp/plop

Configurer MPICH2 pour mesurer des perfs

<CONFIGURE> --prefix=<PREFIX> --with-device=ch3:nemesis:newmad --with-newmad=$PM2_ROOT --enable-f77 --enable-fast=O3

Plus :

export CFLAGS='-O3 -Winline --param inline-unit-growth=500 --param large-function-growth=500'

Utiliser la version SVN de MPICH2 sur les daltons

La version SVN de MPICH2 nécessite une version spécifique de autoconf (2.63) qui n'est pas installée sur les dalton.

Pour pouvoir profiter des dernières modifications committées dans le dépôt Subversion de MPICH2, il faut donc utiliser un chemin alternatif :

./maint/updatefiles --with-autotools=/home/ftrahay/sources/autotools/bin

Tuner BMI

In order to configure BMI and only use its MX (or IB, etc.) driver, you need the following command:

./configure --prefix=... --enable-bmi-only --with-mx=$MX_DIR --without-bmi-tcp
tuner_mpi.txt · Last modified: 2010/10/11 18:21 by goglin
 
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki