在fortran上使用openmp和fftw

时间:2014-10-03 10:47:58

标签: fortran openmp fftw

我目前正在尝试在Fortran上使用OpenMP运行fftw但我在运行任何程序时都遇到了一些问题。

我相信我已经正确安装/配置了fftw:

./configure --enable-openmp --enable-threads

我似乎拥有所有正确的库和文件,但我无法运行任何程序,我不断收到错误

undefined reference to 'fftw_init_threads'

我使用的代码如下:

  program trial
    use omp_lib
    implicit none
    include "fftw3.f"
    integer :: id, nthreads, void
    integer :: error

    call fftw_init_threads(void)

    !$omp parallel private(id)
    id = omp_get_thread_num()
    write (*,*) 'Hello World from thread', id
    !$omp barrier

    if ( id == 0 ) then
      nthreads = omp_get_num_threads()
      write (*,*) 'There are', nthreads, 'threads'
    end if

    !$omp end parallel
  end program

并运行它我

gfortran trial.f90 -I/home/files/include -L/home/files/lib -lfftw3_omp -lfftw3 -lm -fopenmp

如果有人能帮助我,我将不胜感激。

1 个答案:

答案 0 :(得分:4)

旧的FORTRAN界面似乎不支持OpenMP ...我建议您使用新的Fortran 2003界面。请注意fftw_init_threads()是一个功能!

您还需要包含ISO_C_binding模块:

  program trial
    use,intrinsic :: ISO_C_binding
    use omp_lib
    implicit none
    include "fftw3.f03"
    integer :: id, nthreads, void
    integer :: error

    void = fftw_init_threads()

    !$omp parallel private(id)
    id = omp_get_thread_num()
    write (*,*) 'Hello World from thread', id
    !$omp barrier

    if ( id == 0 ) then
      nthreads = omp_get_num_threads()
      write (*,*) 'There are', nthreads, 'threads'
    end if

    !$omp end parallel
  end program