“julia-lang:这个案子还不支持”

时间:2017-06-19 09:57:05

标签: julia

我正在练习像P3.jl这样的练习。当我运行以下代码时,它没有任何错误,答案是正确的。

N = 10
A = rand(N,N)
SA = convert(SharedArray, A)
T = 100
Jacobi_parallel(SA,N,T)

但是当我使用N = 16386运行时,它有一个错误:

  

此案例尚不支持

我该如何解决?

谢谢。

1 个答案:

答案 0 :(得分:3)

在这部分代码中:

@everywhere function Jacobi_blockwise_parallel_one_time_step(A,x,y,k,threshold)
  if k <= threshold
    Jacobi_serial_one_block_one_time_step(A,x,y,k)
  else
    k1 = floor(Int64, k/2)
    k2 = k - k1
    if (k1 != k2) error("This case is not supported yet") end
    lrefs = [@spawn Jacobi_blockwise_parallel_one_time_step(A,x,y,k1,threshold),
             @spawn Jacobi_blockwise_parallel_one_time_step(A,x+k1,y,k1,threshold),
             @spawn Jacobi_blockwise_parallel_one_time_step(A,x,y+k1,k1,threshold),
             @spawn Jacobi_blockwise_parallel_one_time_step(A,x+k1,y+k1,k1,threshold)];
    pmap(fetch, lrefs)
  end
end

当你第一次用k = N-2调用它时(即N = 2048这会触发我的错误),k = 1023,当你到达'spawn'语句时,在第二次调用' k'变为511,k2变为512,因此触发此错误。

有趣的是,如果在没有首先添加额外的工作进程的情况下运行,则不会出现错误。据推测,@spawn宏在没有定义的工作者时表现不同/意外,我不确定。无论哪种方式,我都不认为lrefs位正在做作者认为它正在做的事情(也许它是在旧版的朱莉娅中做过的?)