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?