1

我为我的全局变量声明定义了一个模块“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 进行编译

4

2 回答 2

1

问题不在于 的声明maxthreads,而在于同一行的声明omp_get_max_threads。正如 haraldkl 所示,您需要use omp_lib改为自动访问这些函数的声明。

(如果由于某种原因你真的不想那样做,你也可以将语句添加external :: omp_get_max_threads, ...到模块中。)

于 2012-02-19T21:57:30.233 回答
0

不是一个真正的答案,但我不知道如何将代码放在这里。对不起...

 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)

于 2012-02-18T23:06:48.220 回答