Suite

Grass GIS : nombre de cœurs CPU à utiliser

Grass GIS : nombre de cœurs CPU à utiliser


Par exemple. dans SAGA GIS, il est possible de définir en un clic le nombre de cœurs CPU à utiliser pendant le traitement.

Est-ce également possible dans Grass GIS ?


GRASS n'a pas été entièrement optimisé pour fonctionner en parallèle car il ne verrouille pas les fichiers en cours de traitement. Depuis le wiki GRASS :

GRASS n'effectue aucun verrouillage sur les fichiers dans une base de données GRASS, donc l'utilisateur peut se retrouver avec un processus en train de lire un fichier tandis qu'un autre processus est en train de l'écrire. Le cas le plus problématique est le fichier WIND, qui contient la région actuelle, bien qu'il y en ait d'autres.

Si un utilisateur souhaite exécuter plusieurs commandes simultanément, des mesures doivent être prises pour s'assurer que ce type de conflit ne se produit pas.

Cependant, il existe la bibliothèque d'équations différentielles partielles GRASS (GPDE) qui est conçue pour fonctionner avec OpenMP et est capable de multi-threading.

Il y a également eu quelques développements dans les bibliothèques gpde et gmath où certaines fonctions bénéficient de systèmes multi-cœurs :


Il existe de nombreuses approches de la parallélisation. Certains modules GRASS GIS sont parallélisés en interne à l'aide d'OpenMP ou de pthreads lorsque GRASS GIS est compilé de la manière dont ils sont pris en charge. Cela s'applique aux modules écrits en C, les modules parallélisés écrits en Python utilisent différentes méthodes Python pour la parallélisation basée sur des processus. Ces modules ont généralement l'optionnprocpour définir le nombre de processus à utiliser. Exemple de ceci estr.dim.dailydans le référentiel GRASS GIS Addons (notenproc=4):

r.sun.daily altitude=elev_lid792_1m glob_rad_basename=daily_rad  start_day=255 end_day=302 -t nproc=4

Certains modules ne sont pas parallèles car il est difficile ou impossible de paralléliser le processus ou parce que la version parallélisée ne donne aucun avantage en termes de performances en raison de la surcharge liée à la gestion de différents threads ou processus. Il existe également d'autres limites que vous pouvez atteindre avec la parallélisation, à savoir la mémoire limitée (RAM) ou la vitesse des opérations d'E/S (qui ne sont généralement pas parallèles).

Dans le commentaire de la réponse de Joseph, vous faites du script. C'est vraiment le meilleur endroit pour paralléliser selon ce que je sais. Vous pouvez paralléliser en gardant à l'esprit l'analyse particulière que vous effectuez et vous pouvez même considérer les données et le matériel donnés.

Python a plusieurs façons de vous aider à paralléliser les choses. GRASS GIS lui-même propose des outils spécialisés pour GRASS GIS et les tâches géospatiales, à savoirParallelModuleQueueetGridModule:

Le wiki GRASS contient des suggestions sur la façon de faire vous-même la parallélisation en Python et en Bash :

Dans Bash, la parallélisation de base au niveau des processus triviale : il suffit d'ajouter&à la fin des commandes et en utilisantattendrepour reconnecter les processus :

dormir 10 & dormir 10 & dormir 10 & dormir 10 & attendre

Cela provoque l'exécution en parallèle de quatre processus, ici juste un sommeil fictif pendant 10 secondes, et lorsqu'ils sont tous terminés, l'exécution se poursuit après la ligne avecattendre. Sans faire quelques étapes supplémentaires, cette approche simple (contrairement par exempleGridModule) ne fonctionnera pas lorsque vous souhaitez diviser la zone spatialement, mais cela fonctionnera bien si vous devez calculer, par ex. pente et aspect sur 4 modèles altimétriques numériques différents.

Lire aussi Let's Get Parallel ! par Graeme Bell (une présentation de FOSS4G-E Como) qui donne beaucoup de bonnes idées sur le traitement parallèle du point de vue du SIG et des scripts :


Voir la vidéo: Edge detection