在 GNU Octave 中设置基本的 pararrayfun

Setting up basic pararrayfun in GNU Octave

我有一个文件testPowr.m

function testPowr(x)
   printf(x^2)
   end

我正在与 testPowr.m 位于同一文件夹中的另一个文件 main.m 中尝试以下操作:

clear; clc;
pkg load parallel;
vector = 1:10;
fun = @(x) x^2;
pararrayfun(nproc, @(n) testPowr(n), vector)
%a2 = pararrayfun(nproc, fun, vector)

但是 testPowr 似乎对 pararrayfun 不可见,因为上面的注释行有效。我尝试了多种不同的语法,但我无法正确使用它。

我在其中一种语法中遇到以下错误:

execution error
error: __parcellfun_get_next_result__: could not receive result
error: called from
    parcellfun at line 201 column 16
    pararrayfun at line 85 column 28
    main at line 5 column 1

问题是 testPowr 没有 return 值。

pararrayfun 收集每个函数调用的 return 值,但您的函数所做的只是将结果打印到标准输出。您可以通过 returning 解决此问题,如下所示:

function xp = testPowr (x)
  xp = x^2;
endfunction

您的脚本将正常运行:

octave> pkg load parallel;
octave> rv = pararrayfun (nproc, @(n) testPowr(n), 1:10)
parcellfun: 10/10 jobs done
rv =

     1     4     9    16    25    36    49    64    81   100