我正在运行gnuapl 1.5并启用了实验性并行功能。在四个核心上运行以下两行:
一个←←b←⍳x1000
a-⊂b⍝这条线似乎需要很长时间才能计算出来。
对于较小的x值(例如十和一百),此计算没有任何明显的滞后。
任何人都可以推荐与a-⊂b
不同的方法答案 0 :(得分:2)
首先,您的输出数据大小以二次方式增加:
a←b←⍳x←100 ◊ ⍴,⍕ a-⊂b
33240
a←b←⍳x←200 ◊ ⍴,⍕ a-⊂b
146490
a←b←⍳x←300 ◊ ⍴,⍕ a-⊂b
349740
a←b←⍳x←400 ◊ ⍴,⍕ a-⊂b
642990
a←b←⍳x←500 ◊ ⍴,⍕ a-⊂b
1026240
a←b←⍳x←600 ◊ ⍴,⍕ a-⊂b
1499490
a←b←⍳x←700 ◊ ⍴,⍕ a-⊂b
2062740
a←b←⍳x←800 ◊ ⍴,⍕ a-⊂b
2715990
a←b←⍳x←900 ◊ ⍴,⍕ a-⊂b
3459240
然后,只有在打印数据时才会出现延迟。 APL2的格式规则很难针对所有情况进行优化。在您的情况下,您的输出行看起来非常长(x←1000为4292490个字符)。 但即便如此,我相信显示数据所需的时间仍然较短 而不是阅读它们的时间。
///Jürgen
答案 1 :(得分:1)
你确定它是计算而不是将结果回显到屏幕上花费时间吗?
我不在GnuAPL上,但在我看来它似乎很快:
B←A-⊂A←⍳1000
这里我将结果分配给B而不是回应它。
另一种选择可能是:
B←,/A∘.-A←⍳1000
实际计算∘.-
可能会更快(尽管它会占用大量内存),但将其转换为向量,/
的向量很慢。
(代码看起来更酷,但是......)