SIMD编程:从基础到FFT应用
1. SIMD基础与数据对齐
SIMD(Single Instruction Multiple Data)即单指令多数据,是一种并行计算技术。在向量处理中,Intel Pentium III和Pentium 4芯片拥有一组名为XMM的八个向量寄存器,在SSE(Streaming SIMD Extensions)框架下,这些32位的4字寄存器非常适合进行科学计算的向量处理。而Apple/Motorola对IBM G - 4芯片的改进则增加了名为Altivec的硬件,包含32个4字寄存器。
在使用Altivec和SSE硬件时,数据对齐是一个极其重要的考虑因素。由于缓存加载具有关联性,在4路关联的情况下,缓存行长度为16字节(4个字),内存加载是基于4字边界进行的。当从内存地址m加载标量字时,地址会按16字节取模,加载从地址(m / 16) • 16开始。如果要加载从A3开始的4字段,可能会出现数据未对齐的情况,即数据不在16字节边界上。这种未对齐情况需要由程序处理,硬件不会像处理简单标量数据那样自动处理。在后续的BLAS示例中,我们假设数据是正确的4字对齐的。
2. G - 4上的SDOT计算
在G - 4上进行SDOT计算时,我们使用Altivec指令集。这里我们假设sdot的元素数量n是4的倍数(n = q • 4)。以下是sdotO函数的代码:
float sdotO(int n, float *x, float *y)
{
/* no x,y strides */
float *xp,*yp,sum=0.0;
int i,
超级会员免费看
订阅专栏 解锁全文
1043

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



