我的第一个SSE算法

/*************************************************
*文件名:SSEProject.cpp
*版本:0.0
*功能描述:利用SSE函数优化浮点数据相乘的算法
*创建日期:2012-03-28
*作者:Brandy Yin
*修改记录:
*备注:我的第一个SSE算法
*************************************************/
#include <windows.h>
#include <xmmintrin.h>
#include<iostream>
#include "Time.h"
using std::cout;
using std::endl;
#define ArrayCount 1000

//使用SSE的函数
void f1(float* i_array,DWORD i_num,float i_mul)
{
DWORD num=i_num/4;
__m128 mul=_mm_set_ps1(i_mul);
for (int i=0;i!=num;i++)
{
*(__m128*)(i_array+i*4)=_mm_mul_ps(*(__m128*)(i_array+i*4),mul);
}
}

//不使用SSE的函数
void f2(float* i_array,DWORD i_num,float i_mul)
{
for (int i=0;i!=i_num;i++)
{
*(i_array+i)=(*(i_array+i))*i_mul;
}
}


int main()
{
//声明数组在内存中按16字节对齐
float _declspec(align(16)) Array[ArrayCount];

//利用memset函数初始化数组
memset(Array,0,sizeof(float)*ArrayCount);

CTime t;
t.Reset();
for (int i=0;i!=100000;i++)
{
f1(Array,ArrayCount,1000.2f);
}
cout<<"Use SSE: "<<t.End()<<"ms"<<endl;

t.Reset();
for (int i=0;i!=100000;i++)
{
f2(Array,ArrayCount,1000.2f);
}
cout<<"Don't Use SSE: "<<t.End()<<"ms"<<endl;

system("pause");
return 0;

}


作为一个SSE初学者,我在写这个算法时遇到了以下问题:

1)什么是SSE?----简单地说,他是一组CPU指令集,VC++.net为我们提供了很方便的指令C函数级的封装和C格式数据类型,我们只需像平时写C++代码一样定义变量、调用函数就可以很好的应用SSE指令了。

参考:http://blog.csdn.net/miss_acha/article/details/7403446

2)什么是“__m128”类型?----SSE算法标准的数据类型。

它的定义参考:http://blog.csdn.net/miss_acha/article/details/7403446

3)函数调用方式?----这实际上是在看网上的一篇相关文章时接触到的,就看了看,觉得还不错。

参考:http://blog.csdn.net/miss_acha/article/details/7402728

4)内存对齐问题是怎么回事?

参考:http://blog.csdn.net/miss_acha/article/details/7402896

5)memset函数的使用?

参考:http://www.iteye.com/topic/353769

参考:http://blog.csdn.net/yangsen2016/article/details/1638503

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值