它像所有好故事一样开始,我有一个矩阵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
还是有一些更简单的语法?
答案 0 :(得分:2)
使用max reduction是今天实现这一目标的最简单方法:
var mx = max reduce(m);
但是,对于示例中显示的问题大小,并行最大减少可能是过度的。如果性能很重要,最好编写自己的proc max(arr: [])
过程,迭代数组并找到最大的元素。
Chapel已经支持可变参数的内置max()
过程,但它不支持数组。在回答这个问题时,我想知道它是否应该......