您的位置:首页 > 数码 > MP3 > 单指令多数据的程序优化问题

单指令多数据的程序优化问题

luyued 发布于 2011-06-07 09:27   浏览 N 次  

有没有用过SIMD ,SSE 做过效率优化的朋友啊?我编写了一个测试程序,通过vtune进行性能分析,发现function1(); 的执行时间比function2();的执行时间要长,没有成功的优化性能。问题出在哪里了呢?

#include
using namespace std;
#include

void function1()
{
//for(int i=0;i<1000000000;i++){
// __m128i *a,*b,c;
// __declspec(align(16)) short arrayA[8]={1,1,1,1,1,1,1,1};
// __declspec(align(16)) short arrayB[8]={2,2,2,2,2,2,2,2};
// short arrayC[8]={0};
// a=(__m128i*)arrayA;
// b=(__m128i*)arrayB;
// c=_mm_add_epi16(*a,*b);
// ::memcpy(arrayC,&c,8*sizeof(short));
// //cout< //}
for(int i=0;i<1000000000;i++){
__m128i a,b,c;
__declspec(align(16)) short arrayA[8]={1,1,1,1,1,1,1,1};
__declspec(align(16)) short arrayB[8]={2,2,2,2,2,2,2,2};
a = _mm_load_si128((__m128i*)(arrayA));
b = _mm_load_si128((__m128i*)(arrayB));
__declspec(align(16)) short arrayC[8]={0};
c=_mm_add_epi16(a,b);
_mm_store_si128((__m128i*)(arrayC),c);
//cout< }
}
void function2()
{
for(int j=0;j<1000000000;j++){
short arrayA[8]={1,1,1,1,1,1,1,1};
short arrayB[8]={2,2,2,2,2,2,2,2};
short arrayC[8]={0};
arrayC[0]=arrayA[0]+arrayB[0];
arrayC[1]=arrayA[1]+arrayB[1];
arrayC[2]=arrayA[2]+arrayB[2];
arrayC[3]=arrayA[3]+arrayB[3];
arrayC[4]=arrayA[4]+arrayB[4];
arrayC[5]=arrayA[5]+arrayB[5];
arrayC[6]=arrayA[6]+arrayB[6];
arrayC[7]=arrayA[7]+arrayB[7];
//cout< }
}
void main()
{
function1();
function2();
}


MSN空间完美搬家到新浪博客!

广告赞助商