假设我有3个双精度数组,
real*8, dimension(n) :: x, y, z
Run Code Online (Sandbox Code Playgroud)
初始化为
x = 1.
y = (/ (1., i=1,n) /)
z = (/ (1. +0*i, i=1,n) /)
Run Code Online (Sandbox Code Playgroud)
他们应该将所有数组的所有元素初始化为1.在ifort(16.0.0 20150815)中,这适用n于声明的精度范围内的任何范围.也就是说,如果我们初始化n为
integer*4, parameter :: n
Run Code Online (Sandbox Code Playgroud)
然后,只要n < 2147483647初始化按预期用于所有声明.
在gfortran(4.8.5 20150623红帽4.8.5-16),初始化失败对于y(具有恒定的参数数组理解),只要n>65535,独立的其精度.AFAIK,65535是a的最大值unsigned short int,也就是说unsigned int*2,它在范围内integer*4.
以下是MWE:
program test
implicit none
integer*4, parameter :: n = 65536
integer*4, parameter :: m = …Run Code Online (Sandbox Code Playgroud) 在使用addprocs. 当addprocs在顶层调用时,一切都很好。但是,当我将代码包装在函数中时,我无法做同样的事情。
就我而言,我正在动态添加工作人员,因此@everywhere using XXX始终在顶层调用是不可行的,我需要在函数内部执行此操作。
简而言之,这有效:
addprocs(1)
@everywhere using XXX
Run Code Online (Sandbox Code Playgroud)
而这不会:
function myaddprocs()
addprocs(1)
@everywhere using XXX
end
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?