stratégie "First Touch"

Stratégie « First Touch »

Les aspects NUMA sont à considérer plus particulièrement lorsqu’on utilise un parallélisme en mémoire partagée (OpenMP).
Sur les architectures multi-sockets, le temps nécessaire pour acheminer les données de la mémoire vers les cœurs de calcul dépend de leur localité.

Dans ce cas, on préférera optimiser les temps d’accès mémoire en s’assurant que les données accédées par chaque thread se trouvent sur le socket sur lequel il s’exécute.

Prenons l’exemple suivant :

program vect 
     implicit none 
     use omp_lib 
     integer :: i
     integer, parameter :: n=655360000 
     real(kind=8), allocatable,dimension(:) :: a, b, c 
     allocate(a(n), b(n), c(n)) 

     !$omp parallel 

   !$omp do schedule (static) 
     do i=1,n 
        a(i)=0. 
        b(i)=sin(2.*i) 
        c(i)=cos(2.*i) 
     enddo 
     !$omp end do 

     !$omp barrier 

   !$omp do schedule (static) 
     do i=1,n 
        a(i)=b(i)*c(i) 
     enddo 
     !$omp end do 
   
     !$omp end parallel 
end program vect

Chaque thread va initialiser les portions des tableaux a, b et c qui lui correspondent. Si l’espace mémoire disponible le permet, les données seront alors écrites dans la RAM du socket sur lequel s’exécute chaque thread  (boucle 1).

Lors du traitement parallèle de la seconde boucle, la lecture et l’écriture des données par chaque thread sera alors directe (pas d’échange de données inter-sockets) (boucle 2).
On parle de stratégie « First Touch », elle permet d’allouer les données avec une localité optimale.

Voir aussi

Analyser la performance de votre code : VTune

Description et utilisation de VTtune (outil de profilage d’Intel)

Outil d’aide à la Vectorisation :Vector Advisor

Pour utiliser Intel ® Vector Advisor sur Olympe : module purge module load intel/18.2 Compiler avec l’option -g L’outil est un outil graphique :

Options de compilation pour la vectorisation

Comment activer et optimiser la vectorisation d’un code au moment de la compilation.

Vectorisation, intensité arithmétique et bande passante

ATTENTION - Cet article fait référence à Eos, le calculateur qui a précédé Olympe à CALMIP