10、SIMD编程:从基础到FFT应用

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,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值