gis grass – Grass GIS: número de núcleos de CPU a utilizar

Pregunta:

Por ejemplo, en SAGA GIS es posible establecer con un clic el número de núcleos de CPU que se utilizarán durante el procesamiento.

¿Es esto también posible en Grass GIS?

Respuesta:

Hay muchos enfoques para la paralelización. Algunos módulos de GRASS GIS se paralelizan internamente usando OpenMP o pthreads cuando GRASS GIS se compila de la forma en que son compatibles. Esto se aplica a los módulos escritos en C, los módulos paralelizados escritos en Python utilizan diferentes formas de Python para la paralelización basada en procesos. Estos módulos suelen tener la opción nproc para establecer el número de procesos que se utilizarán. Ejemplo de esto es r.sun.daily en el repositorio de complementos de GRASS GIS (nota nproc=4 ):

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

Algunos módulos no son paralelos porque es difícil o imposible paralelizar el proceso o porque la versión paralelizada no ofrece ninguna ventaja de rendimiento debido a la sobrecarga relacionada con el manejo de diferentes subprocesos o procesos. También hay otros límites que puede alcanzar con la paralelización, a saber, la memoria limitada (RAM) o la velocidad de las operaciones de E / S (que generalmente no son paralelas).

En el comentario a la respuesta de Joseph, estás escribiendo un guión. Este es realmente el mejor lugar para paralelizar según lo que sé. Puede paralelizar teniendo en cuenta el análisis particular que está haciendo e incluso puede considerar los datos y el hardware proporcionados.

Python tiene varias formas de ayudarlo a paralelizar las cosas. El propio GRASS GIS ofrece herramientas especializadas para GRASS GIS y tareas geoespaciales, a saber, ParallelModuleQueue y GridModule :

La wiki de GRASS contiene sugerencias sobre cómo hacer la paralelización usted mismo en Python y en Bash:

En Bash, la paralelización básica en el nivel de procesos es trivial: simplemente agregando & al final de los comandos y usando wait para conectar los procesos nuevamente:

sleep 10 &
sleep 10 &
sleep 10 &
sleep 10 &
wait

Esto hace que cuatro procesos, aquí solo dummy sleep durante 10 segundos, se ejecuten en paralelo y cuando todos terminan, la ejecución continúa después de la línea con wait . Sin hacer algunos pasos adicionales, este enfoque simple (a diferencia de, por ejemplo, GridModule ) no funcionará cuando desee dividir el área espacialmente, pero funcionará bien si necesita calcular, por ejemplo, pendiente y aspecto en 4 modelos de elevación digitales diferentes.

Lea también ¡Consigamos el paralelo! de Graeme Bell (una presentación de FOSS4G-E Como) que brinda una gran cantidad de buenas perspectivas sobre el procesamiento paralelo desde el punto de vista de SIG y scripting:

Leave a Comment

Your email address will not be published.

Scroll to Top

istanbul avukat

-

web tasarım