gfortran中的内部编译器错误(gfc_omp_子句_default_ctor),带有OpenMP和FFTW

gfortran中的内部编译器错误(gfc_omp_子句_default_ctor),带有OpenMP和FFTW,fortran,openmp,gfortran,internal-compiler-error,Fortran,Openmp,Gfortran,Internal Compiler Error,我试图编译一段代码,其中有一个嵌套循环,我使用OpenMp作为第一个循环。该程序与本文中的程序非常相似,包括FFTW的使用。错误是: DO indiceY=1+2*window,ny-2*window ^ internal compiler error: in gfc_omp_clause_default_ctor, at fortran/trans-openmp.c:481 Please submit a full bug report, with preprocessed sour

我试图编译一段代码,其中有一个嵌套循环,我使用OpenMp作为第一个循环。该程序与本文中的程序非常相似,包括FFTW的使用。错误是:

 DO indiceY=1+2*window,ny-2*window
 ^
 internal compiler error: in gfc_omp_clause_default_ctor, at fortran/trans-openmp.c:481
 Please submit a full bug report,
 with preprocessed source if appropriate.
 See <file:///usr/share/doc/gcc-5/README.Bugs> for instructions.
首先,我怀疑这是内存(RAM)空间的问题,但我在计算中减小了3D矩阵的大小,问题仍然存在。我已经检查过这是否是一个报告的bug(实际上是一个bug,但看起来不是)

我还怀疑这是gfortran版本的问题,所以我安装了
gfortran-5
,但错误依然存在(
内部编译器错误:在gfc\u omp\u子句\u default \u ctor中,在fortran/trans openmp.c:481

我使用的是64位Ubuntu 14.04(3.13.0-119-generic)。

您使用的是哪个gfortran版本?完整的错误消息是什么样子的?我们需要查看完整的代码,包括所有声明和
结束程序
。在保留错误的同时尽量减少代码().
内部编译错误
是编译器内部的一个错误。编译器崩溃了。这是编译器的错误。它可能是由代码中的错误触发的,但编译器无论如何都不应该崩溃。请尝试不同的gfortran版本。错误可能在不同的版本中修复。甚至是不同的subversion,如5.1 vs 5.3。您所使用的代码ted与错误消息中的代码不同。请确保您发布的代码与您试图解决的问题完全一致。@HristoIliev对此表示抱歉,我正在进行一些测试(我在上面编辑)。@vladimir-f gfortran的版本为:
(Ubuntu 5.4.1-2ubuntu1~14.04)5.4.1 20160904
(Ubuntu 4.8.4-2ubuntu1~14.04.3)4.8.4
。在这两个版本中都发生了错误。我将错误消息的其余部分放在上面。我们需要完整的代码!尝试减少它()。
call dfftw_init_threads(iret)
!nthreads = omp_get_num_thread()
call dfftw_plan_with_nthreads(nthreads)
!***********************************
CALL dfftw_plan_dft_3d(plan, filter_window, filter_window, filter_window, OUTPUT_FFTW, OUTPUT_FFTW, FFTW_FORWARD, FFTW_ESTIMATE)
!$OMP PARALLEL DO DEFAULT(SHARED) SHARED(matrix_in, window, filter_window, plan, nx, ny, nz) &
!$OMP PRIVATE(indiceX, indiceY, indiceZ, OUTPUT_FFTW, matrix_out)
DO indiceZ=1+2*window,nz-2*window
    DO indiceY=1+2*window,ny-2*window
        DO indiceX=1+2*window,nx-2*window
            OUTPUT_FFTW = ABS(matrix_in(indiceX-2*window:indiceX, indiceY-window:indiceY+window,& 
                                                                 indiceZ-window:indiceZ+window) - &
                              matrix_in(indiceX:indiceX+2*window, indiceY-window:indiceY+window,&
                                                                 indiceZ-window:indiceZ+window) )
            CALL dfftw_execute_dft(plan, OUTPUT_FFTW, OUTPUT_FFTW)
            matrix_outX(indiceX, indiceY, indiceZ) = SUM(ABS(OUTPUT_FFTW))
        END DO
    END DO
END DO
!$OMP END PARALLEL DO
CALL dfftw_destroy_plan(plan)
!***********************************
CALL dfftw_cleanup_threads()