小编cak*_*ako的帖子

gfortran中隐含的数组构造函数的奇怪初始化行为

假设我有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)

arrays constructor fortran intel gfortran

5
推荐指数
1
解决办法
247
查看次数

你如何在 Julia 的函数中加载模块@everywhere

在使用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)

有任何想法吗?

module distributed-computing julia

3
推荐指数
1
解决办法
1006
查看次数