Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading Julia Lang UndervarError:未定义内部循环_Multithreading_Julia - Fatal编程技术网

Multithreading Julia Lang UndervarError:未定义内部循环

Multithreading Julia Lang UndervarError:未定义内部循环,multithreading,julia,Multithreading,Julia,我试图在Julia-Lang中使用多线程(或者更好的多处理器)。只使用Base.Threads会使我的应用程序变慢,所以我想尝试分布式 模块并行 # ... 包括。。 使用分布式 @分布式。无处不在包括(“…jl”) #... 包括过程中所需的 导出循环\u内部 @Distributed.everywhere函数循环_inner(parentValue、value、i、depth) ... 结束 函数序列(父值、深度) ... 如果深度1 futures=[@spawnat:any-loop_-

我试图在Julia-Lang中使用多线程(或者更好的多处理器)。只使用Base.Threads会使我的应用程序变慢,所以我想尝试分布式

模块并行
# ... 包括。。
使用分布式
@分布式。无处不在包括(“…jl”)
#... 包括过程中所需的
导出循环\u内部
@Distributed.everywhere函数循环_inner(parentValue、value、i、depth)
...
结束
函数序列(父值、深度)
...
如果深度<4&&深度>1
futures=[@spawnat:any-loop_-inner(parentValue,value,i,depth)for i=0:possibilites]
返回金额(提取(期货))
%2)问题行^^
其他的
返回和([i=0的循环\u内部(parentValue、value、i、depth):可能性])
%1)问题行^^
结束
结束
结束
但是我遇到了
$julia-L…jl-L Parallel.jl main.jl-p8

错误:LoadError:UndevarError:loop\u内部未定义
(在第行[参见上面代码的
%1)有问题的第行^ ^

我希望有人能告诉我我做错了什么。 如果im将
If depth<4&&depth>1
更改为
If depth<4
im获取
未定义变量错误:未定义并行(在第行[见上文代码
%2处)有问题的行^


提前Ty

它不起作用,因为每个辅助进程都需要单独加载模块

您的模块应如下所示:

module MyParallel

include("somefile.jl") 
export loop_inner
function loop_inner(parentValue, value, i, depth)
end

end
现在,您可以按以下方式使用它(假设模块位于您的私有包中):

现在,您可以使用
MyParallel
模块了

编辑
更清楚地说,模块的重要目标是为一组函数、类型和全局(模块)提供公共名称空间变量。如果将任何分布式代码放在模块内,显然会破坏这种设计,因为每个Julia的工作者都是一个完全独立的系统进程,拥有自己的内存和命名空间。因此,在我看来,好的设计是将所有做工作的代码放在模块内,而分布式计算管理放在模块外。Perhaps在某些情况下,可能希望分布式业务流程代码位于第二个模块中,但通常将此类代码保留在模块之外更方便。

您好,感谢您的快速回复,我的问题是我需要从内部循环调用其他函数,这可能吗?内部循环正在调用LangfordSequences如果它们在同一个模块中,你只需调用你需要的任何东西。如果它们在一个单独的模块中,你当然需要在MyParallel中导入这些模块。在我的设计中,在每种情况下,
@everywhere使用
将只为模块调用,而不是为模块的依赖项调用。基本上,通常
@everyw此处
不应出现在模块内部。这听起来像我在做什么?我在同一个模块中有两个函数,但我仍然收到错误否,您在模块内部有
@everywhere
,它应该在外部,就像在我的代码中一样。因此,我替换了所有
@everywhere
导入和
@everywhere
函数在我的
Parallel
模块中。在我导出的
loop\u-inner模块中,langfordSequence
我将您的第二个代码段添加到我的“main”类中,以开始计算
错误:LoadError:ArgumentError:在当前路径中找不到并行包:
using Distributed
using Pkg
Pkg.activate(".") # or wherever is the package
using MyParallel # enforces module compilation which should not occur in parallel 
addprocs(4) # should always happen before any `@everywhere` macro or use `-p` command line option instead. 
@everywhere using Pkg, Distributed
@everywhere Pkg.activate(".")
@everywhere using MyParallel