我在Matlab代码中运行了两个for循环。内部循环使用Matlabpool在12个处理器中进行并行化(这是Matlab在单个机器中允许的最大值)。
我没有分布式计算许可证。请帮我使用Octave或Scilab如何做到这一点。我只想将'for'循环并行化。
当我在谷歌搜索它时,有一些断开的链接。
parfor
尚未真正实现八度音阶。该关键字已被接受,但仅仅是for
(http://octave.1599824.n4.nabble.com/Parfor-td4630575.html)的同义词。
并行包的pararrayfun
和parcellfun
功能在多核机器上很方便。它们通常是parfor循环的良好替代品。
例如,请参阅http://wiki.octave.org/Parallel_package。要安装,发行(只需一次)
pkg install -forge parallel
然后,每次会议一次
pkg load parallel
在使用这些功能之前
在Scilab中你可以使用parallel_run:
function a=g(arg1)
a=arg1*arg1
endfunction
res=parallel_run(1:10, g);
在GNU Octave中,您可以使用parfor
构造:
parfor i=1:10
# do stuff that may run in parallel
endparfor
欲了解更多信息:help parfor
for-loops
的方法。例如,map
函数和Python上的列表理解是矢量化计算。这是你编写代码的方式,而不是计算机处理代码的方式。并行计算主要用于GPU计算(数据并行),当你使用GPU计算单元在大数组上运行大量算术时。还有任务并行,主要是指在多个线程上执行任务,每个线程由一个单独的CPU核心处理。并发或异步是指您只有一个计算单元,但它同时执行多个作业,而无需无条件地阻塞处理器。基本上就像妈妈做饭和清洁,同时照顾孩子,但当时只做一份工作:)feval
函数不是并行性,而是一种矢量化常规函数的方法。根据Scilab的平台,硬件和版本,仿真矩阵算法和parallel_run
是矢量化或并行的。