Visual Information Solutions Multithreading
Visual Information Solutions Qu’est-ce que le multithreading ? Un thread est une partie des instructions du processus en cours d'exécution Un processus peut contenir un ou plusieurs threads (applications dites multi-threadées) s'exécutant en quasi-simultanéité sur des systèmes mono-processeur ou simultanément sur les processeurs multi-coeurs. Mono-processeurMulti-processeur
Visual Information Solutions Le thread pool d’IDL -Le thread pool d’IDL est un mécanisme permettant l’utilisation automatique de routines « multi-threadées » en fonction d’un certains nombre de paramètres : *Le nombre d’éléments concernés par les calculs. *La disponibilité de plusieurs processeurs. *La disponibilité de versions “multithreadées” des routines utilisées. - Voir dans l’aide en ligne « Routines that use the thread pool »
Visual Information Solutions Avantages/inconvenients du thread pool Avantages Accélération des temps de calculs. Inconvénients Calculs sur un “petit” nombre d’éléments L’utilisation d’un seul thread peut s’avérer plus rapide. Calculs sur un “grand” nombre d’éléments Si le calcul est trop important pour tenir en mémoire physique, l’utilisation concurrentielle de la mémoire virtuelle par les différents threads peut s’avérer problématique. Utilisateurs multiples Sur des systèmes multi-utlisateurs, une application IDL utilisant le thread pool risque d’utiliser tous les CPUs disponibles, et donc de gêner d’autres utilisateurs.
Visual Information Solutions Les routines IDL utilisant le thread pool (1)
Visual Information Solutions Les routines IDL utilisant le thread pool (2)
Visual Information Solutions Les routines IDL utilisant le thread pool (3)
Visual Information Solutions Contrôle du thread pool Visualisation de l’état courant (lecture seule) IDL> HELP, /STRUCTURE, !CPU Utilisation des paramètres par défaut du thread pool Lorsque plus d’un processeur est disponible, que le code utilise des routines “multithreadées”, et que le nombre d’éléments se trouve dans la gamme des valeurs autorisées, IDL utilise automatiquement le thread pool. Modification des paramètres du thread pool avec la routine CPU TPOOL_MAX_ELTS : nombre maximal d’éléments dans le calcul TPOOL_MIN_ELTS : nombre minimal d’éléments dans le calcul TPOOL_NTHREADS : nombre de threads à utiliser pour le calcul 0 : utilisation du nombre de threads par défaut défini dans !CPU 1 : un seul thread (désactivation du thread pool) RESET : utilisation des paramètres par défaut de !CPU
Visual Information Solutions Exemple ; Retrieve the current thread pool settings threadpool = !CPU ; Modify the thread pool settings CPU, TPOOL_MAX_ELTS = , $ TPOOL_MIN_ELTS = 50000, $ TPOOL_NTHREADS = 2 ; Create 65,341 elements of floating point data theta = FINDGEN(361, 181) ; Perform computations, using 2 threads sineSquared = 1. - (COS(!DTOR*theta))^2 next computation etc. ; Modify thread pool settings for new data type CPU, TPOOL_MAX_ELTS = 50000, TPOOL_MIN_ELTS = ; Create 65,341 elements of double precision data theta = DINDGEN(361, 181) ; Perform computation sineSquared = 1. - (COS(!DTOR*theta))^2 next computation etc. ;Return thread pool settings to their initial values CPU, TPOOL_MAX_ELTS = threadpool.TPOOL_MAX_ELTS, $ TPOOL_MIN_ELTS = threadpool.TPOOL_MIN_ELTS, $ TPOOL_NTHREADS = threadpool.HW_NCPU