如何在Chapel中找到数组的最大值

时间:2017-08-31 16:16:55

标签: chapel

它像所有好故事一样开始,我有一个矩阵A,我想找到最大值,有时是整个事物,有时甚至是行。

var dom = {1..2, 1..5};
var m: [dom] real;
m[1,..]  = [1.0, 2.0, 3.1, 4.8, 5.6];
m[2,..]  = [2.0, 3.0, 4.1, 5.8, 6.6];
writeln(m);
writeln(max(m));

但是这里没有爱情,它只会让我感到害怕:

maxy.chpl:5: error: unresolved call 'max([domain(1,int(64),false)] real(64))'
$CHPL_HOME/modules/internal/ChapelBase.chpl:614: note: candidates are: max(x, y)

我应该使用reduce还是有一些更简单的语法?

1 个答案:

答案 0 :(得分:2)

使用max reduction是今天实现这一目标的最简单方法:

var mx = max reduce(m);

但是,对于示例中显示的问题大小,并行最大减少可能是过度的。如果性能很重要,最好编写自己的proc max(arr: [])过程,迭代数组并找到最大的元素。

Chapel已经支持可变参数的内置max()过程,但它不支持数组。在回答这个问题时,我想知道它是否应该......