почему функции omp не работают, когда константы объявлены в модуле? - PullRequest
1 голос
/ 19 февраля 2012

у меня есть модуль 'gvars', определенный для моих объявлений глобальных переменных.когда я определяю integer :: nthreads, max_threads, tid, omp_get_max_threads, omp_get_num_threads, omp_get_thread_num внутри моего модуля gvars, вызов maxthreads = omp_get_max_threads() в моей основной процедуре выдает мне следующую ошибку при компиляции:

maxthreads = omp_get_max_threads()
1
Error: Unclassifiable statement at (1)

, но когда я включаю определения integer :: выше в мойОсновная рутина, она прекрасно компилируется и дает мне желаемый результат.если я даже дошёл до определения nthreads = -1 внутри моего модуля gvars, я смогу распечатать правильное значение в моей основной подпрограмме, так что я знаю, что оно включено и определено правильно, просто по какой-то причине я не могу иметьэто как возвращаемое значение из функций openmp.

с чего бы это?

Есть ли другой способ сохранить эти значения как глобальные переменные и по-прежнему определять их в моей основной подпрограмме вместо модуля?

если это имеет значение, я использую gfortran для компиляции

Ответы [ 2 ]

1 голос
/ 20 февраля 2012

Проблема не в объявлении maxthreads, а в объявлении в той же строке omp_get_max_threads.Как показал haraldkl, вам нужно вместо этого use omp_lib автоматически получить доступ к объявлениям этих функций.

(Если по какой-то причине вы действительно не хотите делать это таким образом, вы также можете добавитьзаявление external :: omp_get_max_threads, ... к модулю.)

0 голосов
/ 19 февраля 2012

Не совсем ответ, но я не знаю, как еще разместить код здесь.Извините ...

 module gvars
   integer :: maxthreads
 end module gvars

 program test
  use gvars
  use omp_lib

  implicit none

  maxthreads = omp_get_max_threads()
 end program test

скомпилировано с: gfortran -fopenmp test.f90

Где gfotran -v дает: gcc версия 4.4.5 (GCC)

...