我正在使用OpenMP和Fortran。
在OpenMP并行区域内private
在堆栈上分配变量。我有一些1000x1000阵列的变量,这导致一些问题。我可以绕过它,但我似乎必须做ulimit -s unlimited
以及设置OMP_STACKSIZE
环境变量。这对我来说没问题,但对于我的代码的其他用户来说并不是很好。
目前,我已经采用过时的方式传递数组:
integer, intent(in) :: N
real(c_double) :: private_var(N,N)
!$omp parallel do default(shared) private(private_var)
...
是否有更好的方法来声明这些数组,以避免用户必须在其计算机上手动设置堆栈大小?我不想在循环中分配,但也许我可以先打开并行区域,让每个worker分配自己的私有工作数组,有do循环吗?