我认为这可能是内存带宽有限的。将f1或f2内联到res中所暗示的少量额外增加并不重要。事实上,我通过以下时间表获得了最佳表现:
in1.compute_at(res, yi).vectorize(in1.args()[0], 8); in2.compute_at(res, yi).vectorize(in2.args()[0], 8); res.split(y, y, yi, 8).vectorize(x, 8).parallel(y);
即只需拉入每个输入的填充扫描线,然后进行所有数学内联。
但它几乎没有比你的快。差异可能是噪音。我的完整实验:
https://gist.github.com/abadams/c2e6f67d79e1768af6db5afcabb1caab
f2的产物嵌套在 消耗 f1。这是正常的 - 它不使用f1,但它被使用f1的东西使用,所以这是一个合理的地方让它结束。