Multithreading MATLAB
Le multithreading dans le calcul scientifique consiste à exécuter plusieurs threads simultanément au sein d’un même processus afin d’améliorer l’efficacité des calculs et l’utilisation des ressources. Avec le multithreading, les tâches peuvent être divisées et exécutées en parallèle sur plusieurs cœurs CPU, ce qui améliore les performances des applications exigeantes en ressources de calcul. Cette approche peut conduire à des temps d’exécution plus rapides, en particulier pour les opérations pouvant être parallélisées, comme les calculs matriciels, les transformées de Fourier et le traitement d’images. Cependant, elle nécessite également une gestion rigoureuse des ressources partagées pour éviter les conditions de concurrence, les deadlocks et autres problèmes.
L’utilisation du multithreading dans MATLAB est simple. MATLAB® et Simulink® vous permettent d'exploiter des ordinateurs multicœurs et multiprocesseurs de deux manières : le multithreading embarqué dans MATLAB et le parallélisme explicite via les fonctions de Parallel Computing Toolbox™. Vous pouvez ainsi exécuter vos applications MATLAB et vos modèles Simulink plus rapidement et plus efficacement en exploitant toute la puissance de calcul de votre machine.
Comparaison du multithreading implicite et explicite de MATLAB et du traitement en série.
Multithreading MATLAB intégré
La fonctionnalité de multithreading intégrée de MATLAB parallélise automatiquement les calculs en utilisant des bibliothèques sous-jacentes lors de l’exécution, ce qui entraîne des améliorations de performance significatives pour de nombreuses fonctions, notamment les fonctions d’algèbre linéaire et les fonctions numériques telles que fft, eig, mldivide, svd et sort. Comme MATLAB gère cela de manière implicite, vous n’avez pas besoin de l’activer manuellement. Si vous souhaitez contrôler le nombre de threads de calcul, vous pouvez utiliser la fonction maxNumCompThreads.
De manière similaire, Simulink propose des fonctionnalités prédéfinies pour le multithreading au niveau des sous-systèmes, de la cosimulation et du flux de données. Lorsque cela est approprié, Simulink prépare tous les modèles et blocs éligibles pour une exécution sur plusieurs threads. Lorsque Simulink détecte que les performances peuvent être améliorées, il exécute automatiquement les modèles éligibles en utilisant plusieurs threads, ce qui se traduit par des temps d’exécution plus rapides.
Parallélisme explicite utilisant les workers MATLAB
Parallel Computing Toolbox propose des fonctions pour créer et utiliser des pools parallèles, vous permettant d’exploiter des ressources matérielles supplémentaires via des threads et des processus afin d’améliorer les performances de votre application et de réduire le temps nécessaire pour obtenir des résultats. Vous pouvez exploiter des pools parallèles dans MATLAB et Simulink en recourant aux boucles for parallèles (parfor), aux files d’attente parallèles (parfeval), à l’exécution parallèle d’un même programme avec plusieurs jeux de données (spmd), aux simulations parallèles Simulink (parsim), ainsi qu’à d’autres fonctionnalités de programmation parallèle.
Un nombre croissant de fonctions et de fonctionnalités pour MATLAB et Simulink vous permettent d'exploiter des ressources de calcul parallèle sans nécessiter de code supplémentaire. Par exemple, dans Simulink, vous pouvez facilement activer la prise en charge du parallélisme dans certaines interfaces en définissant simplement des marqueurs ou des préférences.
Pool parallèle basé sur les threads
Les pools parallèles basés sur les threads permettent d'exécuter des calculs en parallèle et de les répartir entre plusieurs threads au sein d’un même processus MATLAB. Ces pools présentent un faible délai de communication et offrent un accès partagé à la mémoire, mais leur utilisation est limitée aux calculs effectués sur une seule machine. Avec MATLAB, vous pouvez activer un seul worker basé sur des threads supplémentaire via backgroundPool, tandis que Parallel Computing Toolbox vous permet d’utiliser plusieurs workers basés sur des threads grâce à parpool("Threads").
Pool parallèle basé sur les processus
Parallel Computing Toolbox vous permet également d’exécuter des applications MATLAB en parallèle en utilisant plusieurs processus de worker (moteurs de calcul) sur une machine locale ou sur un cluster distant. Par défaut, ces workers basés sur des processus sont monothread pour le calcul.
Contrairement au multithreading, le parallélisme explicite fourni par un pool parallèle basé sur des processus vous permet de faire évoluer vos applications parallèles utilisant des workers MATLAB au-delà d’une seule machine, en exploitant des clusters de calcul compatibles avec MATLAB Parallel Server™.
Exemples et démonstrations
Références logicielles
FAQ sur le multithreading MATLAB
Le multithreading MATLAB consiste à exécuter plusieurs threads simultanément au sein d'un même processus afin d'améliorer l'efficacité des calculs et l'utilisation des ressources. Le multithreading MATLAB peut être implicite (intégré et hors de votre contrôle) ou explicite (activé via Parallel Computing Toolbox et sous votre contrôle). Le multithreading explicite peut être basé sur des threads ou sur des processus.
Oui. MATLAB dispose d'un multithreading intégré qui parallélise automatiquement les calculs en exploitant les fonctionnalités parallèles des bibliothèques sous-jacentes au moment de l'exécution lorsque cela est approprié. Le multithreading intégré est pris en charge pour de nombreuses fonctions, notamment les fonctions d'algèbre linéaire et les fonctions numériques telles que fft, eig, mldivide, svd et sort.
Vous pouvez utiliser la fonction maxNumCompThreads pour contrôler le nombre de threads de calcul utilisés par MATLAB.
Le multithreading intégré utilise les bibliothèques sous-jacentes pour paralléliser implicitement l'exécution au niveau des threads lorsque cela est approprié, tandis que Parallel Computing Toolbox vous permet de paralléliser explicitement votre code à l'aide de fonctions telles que parfor, parfeval, spmd et de pools parallèles utilisant des threads ou des processus.
Un pool parallèle basé sur des threads distribue explicitement les calculs sur plusieurs threads au sein d'un même processus MATLAB, ce qui permet de réduire les coûts de communication et de bénéficier d'un accès à mémoire partagée. Le parallélisme basé sur des threads est limité à une seule machine. Vous pouvez activer un pool parallèle basé sur des threads à l'aide de backgroundPool ou de parpool(""Threads"").
Un pool parallèle basé sur des processus distribue explicitement les calculs sur plusieurs processus MATLAB exécutés sur une machine locale ou sur plusieurs machines d'un cluster de calcul. (L'exécution sur plusieurs machines nécessite MATLAB Parallel Server.)
Les pools parallèles basés sur des threads sont limités aux calculs exécutés sur une seule machine. De plus, certaines fonctionnalités MATLAB ne peuvent pas être utilisées dans les pools parallèles basés sur des threads.
Oui. Simulink fournit des fonctionnalités intégrées de multithreading pour les sous-systèmes, la cosimulation et les flux de données. Les modèles compatibles peuvent être automatiquement exécutés sur plusieurs threads lorsque cela permet d'améliorer les performances.
Voir aussi: Traitement en parallèle, calcul parallèle, calcul sur GPU