|
|
# Utiliser une machine OpenMP au LPNHE #
|
|
|
Désormais, toutes les machines de type PC sous OS récent sont des machines à plusieurs cœurs de calcul, avec mémoire partagée.
|
|
|
Désormais, toutes les machines de type sous OS récent sont des machines à plusieurs cœurs de calcul, avec mémoire partagée.
|
|
|
|
|
|
Par exemple la machine qui supporte les [Phi](PhiAtLpnhe) est une machine :
|
|
|
* avec 16 cœurs physiques avec ses Intel(R) Xeon(R) CPU E5-2630 v3 @ 2.40GHz; dans la pratique, la machine est configurée en [hyperthreading](https://fr.wikipedia.org/wiki/Hyper-Threading), ce qui lui confère deux fois plus de cœurs de calculs logiques soit 32 cœurs (que l'on voit ainsi via `top` ou bien dans le fichier `/proc/cpuinfo`.
|
... | ... | @@ -15,10 +15,11 @@ La compilation d'un programme *OpenMP* nécessite des flags spécifiques (voir l |
|
|
```bash
|
|
|
export OMP_NUM_THREADS=4
|
|
|
```
|
|
|
Par ailleurs, pour une machine [NUMA](https://en.wikipedia.org/wiki/Non-uniform_memory_access), qui physiquement possède plusieurs processeurs dont certains accèdent plus vite à certaines partie de la mémoire qu'à d'autre, il peut être utile de préciser une option d'[affinité](https://software.intel.com/en-us/articles/using-kmp-affinity-to-create-openmp-thread-mapping-to-os-proc-ids), demandant ainsi que les process soient exécutés sur des processeurs en particulier (et donc que le *scheduler* ne les balade pas de cœurs en cœurs), ce qui permet aussi de ne pas avoir accès à des données présent dans une mémoire éloignée du processeur d'exécution de la tâche. Par exemple :
|
|
|
Par ailleurs, pour une machine [NUMA](https://en.wikipedia.org/wiki/Non-uniform_memory_access), qui physiquement possède plusieurs processeurs dont certains accèdent plus vite à certaines partie de la mémoire qu'à d'autre, il peut être utile de préciser une option d'[affinité](https://en.wikipedia.org/wiki/OpenMP#Thread_affinity), demandant ainsi que les process soient exécutés sur des processeurs en particulier (et donc que le *scheduler* ne les balade pas de cœurs en cœurs), ce qui permet aussi de ne pas avoir accès à des données présent dans une mémoire éloignée du processeur d'exécution de la tâche. Par exemple :
|
|
|
```bash
|
|
|
export KMP_AFFINITY=physical,0
|
|
|
```
|
|
|
On consultera utilement la [documentation Intel](https://software.intel.com/en-us/articles/using-kmp-affinity-to-create-openmp-thread-mapping-to-os-proc-ids) à ce sujet. Pour les Phi, il existe [des arguments supplémentaires](https://cvw.cac.cornell.edu/hybrid/kmpaffinity?AspxAutoDetectCookieSupport=1) (à étudier...)
|
|
|
|
|
|
### Compilation C ###
|
|
|
#### Avec le compilateur GNU ####
|
... | ... | |