SIMD技术:内存延迟、架构与操作优化
1. 长内存延迟与短向量长度
在带有缓存的系统中,从大容量内存中获取数据所产生的延迟是最为关键的。通常情况下,内存延迟可能是相对简单计算(如saxpy)的10倍,甚至可能超过循环内部部分的执行时间。
为了应对这种情况,可以利用向量硬件展开循环来计算 B = f(A) ,主要有两种方式,如图所示:
- 无预取方式 :
for i = 0, n - 1 by 4 {
V0 <- Ai, ..., Ai+3
wait memory
f(V0)
V0 <- A0, ..., A3
}
在这种方式中,向量寄存器 V0 (这里大小为4)加载 Ai, Ai+1, Ai+2, Ai+3 ,等待数据到达后,对这四个元素计算 f(A) ,然后将结果存储在 B 的一个段 (Bi, Bi+1, Bi+2, Bi+3) 中。
- 预取方式 :
for i = 0, n - 5 by 4 {
V1 <- V0
(wait memory) - Tf - TJ
V2 <- f(V0)
Bi+4, ..., Bi+7 <
超级会员免费看
订阅专栏 解锁全文
1084

被折叠的 条评论
为什么被折叠?



