潮声隔雨深 · 2020年02月23日

st1为什么如此耗时?

我的代码模式是:

while(4096){

"ld1 { v8.4s, v9.4s,v10.4s, v11.4s}, [%2], #64 \n" // output
"ld1 {v12.4s, v13.4s,v14.4s, v15.4s}, [%2], #64 \n" // output
"sub %1, %1, #128 \n"
"ld1 {v0.4s, v1.4s, v2.4s, v3.4s}, [%1], #16 \n"

计算部分;

"st1 {v12.4s, v13.4s,v14.4s, v15.4s}, [%2], #64 \n" // output
"st1 { v8.4s, v9.4s, v10.4s, v11.4s},[%2], #64 \n" // output
}

1111.png

如图所示,为什么存储st1部分所占耗时的比例将近42%?

1 个回答 得票排序 · 时间排序
一知半解 · 2020年02月23日

如果方便,是否可以把你的样例代码和测试代码共享出来?这样大家可以更准确的讨论问题。

在我看来,你的样例有一个问题是ld1和st1都会对地址写回,这会增加当前循环的st1和下一个循环的ld1的依赖。如果可以改成无依赖的版本,可能性能会好一些。

你的回答