/ / Ejecute la rutina fortran con multiprocesador: multiproceso, fortran, multiprocesamiento, fortran77, intel-fortran

Ejecute la rutina fortran con multiprocesador: multiproceso, fortran, multiprocesamiento, fortran77, intel-fortran

Soy nuevo en programación y en realidad soy uningeniero mecánico. Para mi investigación he escrito una rutina fortran para modelar un proceso. Esta rutina es bastante lenta porque yo la escribí (y, por lo tanto, no es perfecta desde el punto de vista computacional) y realiza muchas iteraciones para alcanzar la convergencia, por lo que necesita tiempo.

Pero tengo una CPU de 6 núcleos y creo que si pudiera explotar todos los núcleos, la rutina podría ejecutarse más rápido de lo que lo hace ahora.

La rutina es así:

  PROGRAM my routine

INCLUDE "dimensions_of_arrays.dim"
INCLUDE "subroutines.sub"
INCLUDE "subroutines2.sub"

DECLARATION OF VARIABLES
..
.
DO LOOP OVER MANY STEPS
.
CALL MANY SUBROUTINES
.
.
.
PERFORM SOME ITERATION
END LOOP
.
WRITE RESULTS
END

En el archivo de las subrutinas "subrutinas.sub" tengo más de 20 subrutinas, como esta:

  SUBROUTINE xxx(a,b)

INCLUDE "dimensions_of_arrays.dim"

DECLARATION OF VARIABLES
COMMON/PATH1/PATH2/G,J,K

.
.
SOME CALCULATION
.
END

En el archivo "dimensions_of_arrays.dim" hay parámetros comunes y usados ​​durante la compilación.

¿Es posible en su opinión usar multiprocesador con esta rutina? Tratando de no modificarlo "pesadamente".

Uso Intel Composer XE2011 con Visual Studio 2010 como compilador del código.

Se agradece mucho cualquier ayuda. Gracias

Respuestas

0 para la respuesta № 1

Ya que está utilizando Intel Fortran, sugiero queSu primer paso debe ser agregar la opción de paralelización automática. En Visual Studio en Windows, esta es la propiedad del proyecto Fortran> Optimización> Paralelización> Sí. Mientras esté en ello, sugiero la opción de configuración / QxHost. No recuerdo si la versión anterior que está utilizando lo admite como una propiedad del proyecto; si lo hace, sería Fortran> Generación de código> Específico para el procesador Intel Optimización> Igual que el procesador host. Por supuesto, debe crear una configuración de lanzamiento para habilitar la optimización.

Esto le puede dar suficiente impulso de rendimiento para sersatisfactorio. Si no fuera así, el siguiente paso que sugeriría sería activar los diagnósticos de optimización y ver qué dice acerca de por qué ciertos bucles no se pueden paralelizar.

Estás usando una versión bastante antigua del compilador- las versiones más nuevas son mucho mejores en paralelización y optimización y le recomiendo que use la última a la que tenga acceso. Si nada de esto produce los resultados que desea, entonces estoy de acuerdo en que tendrá que "ensuciarse las manos" y agregar Directivas OpenMP, pero esto requerirá que usted tenga un buen entendimiento de cómo funciona el programa, qué variables deben compartirse y cuáles son privadas. Un paso intermedio sería utilizar las directivas de paralelización de Intel, pero estas no son muy diferentes de OpenMP.

Al convertir un programa en serie a paralelo,Especialmente un código Fortran antiguo, hay que tener mucho cuidado cuando se trata de variables globales (normalmente COMUNES). Estos pueden bloquear la paralelización o llevar a resultados incorrectos. La herramienta Intel Inspector XE (parte de las ediciones más grandes de Intel Parallel Studio XE) puede ser una buena opción para encontrarlo por usted.