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

How to find the max of an array in 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 还是有更简单的语法?

使用 max reduction 是今天完成此任务的最简单方法:

var mx = max reduce(m);

但是,对于示例中显示的问题大小,并行最大缩减可能有点矫枉过正。如果性能很重要,最好编写自己的 proc max(arr: []) 过程来遍历数组并找到最大的元素。

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