multithreading visual-studio-2015 fortran openmp

multithreading - omp_get_num_threads() y omp_get_thread_num() devolviendo tonterías



visual-studio-2015 fortran (1)

¡Use implicit none en TODOS sus programas Fortran!

Después de hacerlo, se dará cuenta de que las funciones no se declaran y se supone que son real . El valor real sin sentido se convierte en un valor integer y se almacena en las variables que imprime.

Como @francescalus recomienda en el comentario, mediante el use omp_lib utiliza un módulo que contiene las declaraciones correctas de las funciones y lo ayudará a verificar si las está utilizando correctamente.

Estoy comenzando a usar OpenMP en Fortran usando el compilador Fortran de Intel y Visual Studio 2015. En las propiedades del proyecto tengo "Fortran -> Idioma -> Directivas OpenMP de proceso" establecido en "Generar código paralelo (/ Qopenmp)"

Tengo un programa simple que comienza de la siguiente manera:

program hellothreads integer threads, id call omp_set_num_threads(3) threads = omp_get_num_threads() print *,"there are", threads, "threads"

Esto produce

hay -2147483648 hilos

que ciertamente no hay. Sin embargo, la configuración de la cantidad de hilos parece funcionar bien, ya que:

!$OMP Parallel private(id) shared(threads) threads = omp_get_num_threads() id = omp_get_thread_num() print *, "hello from thread", id, "out of", threads !$OMP end Parallel

salidas

hola del hilo -2147483648 de -2147483648

hola del hilo -2147483648 de -2147483648

hola del hilo -2147483648 de -2147483648

y continuando con:

!$OMP Parallel private(id) shared(threads) threads = omp_get_num_threads() id = omp_get_thread_num() print *, "this is thread", id, "of", threads !$OMP end Parallel

salidas

este es el hilo -2147483648 de -2147483648

este es el hilo -2147483648 de -2147483648

Finalmente, hay un comportamiento extraño diferente si llamo a las funciones de OpenMP dentro de una "impresión", por ejemplo:

!$OMP Parallel private(id) shared(threads) print *, "this is thread", omp_get_num_threads(), "of", omp_get_thread_num() !$OMP end Parallel stop end

Salidas

este es el hilo NaN de NaN

este es el hilo NaN de NaN

¿Qué está mal con mi configuración y / o código?