先上代码:
/*g++ -msse2 main.cpp -lrt*/
#include <iostream>
#include <xmmintrin.h>//SSE指令集需包含词头文件
#include <time.h>
using namespace std;
#define N 120
int main() {
struct timespec tpstart,tpend;
clock_gettime(CLOCK_MONOTONIC, &tpstart);
/////////////////do something
{
__m128 *p1,*p2,*p3;//__m128是一个长128位的数据类型,存放在寄存器中
__attribute(aligned(128)) float f1[N],f2[N],f3[N];//新建一些浮点型数组
/*__attribute(aligned(128))强制使编译器在给f1等分配内存空间时对齐在128位(8字节)上*/
//cout<<f1<<"\t"<<(int)f1%128<<endl;
/*运行此条语句可以看出地址f1总是128的倍数,在内存上即是总存在一行上,使得总线取值时能够一次取完*/
for(int i=0; i<N; i++) {
f1[i]=i+0.12;
f2[i]=i+0.16;
}
for(int time=0; time<10000; time++) {
p1=(__m128*)f1;
p2=(__m128*)f2;
p3=(__m128*)f3;
fo