The print in decimal format is not good to validate the packed structure of integers. The hex format is better because it enable us to validate the methods by looking at the position of the packed values
63 lines
No EOL
1.5 KiB
C++
63 lines
No EOL
1.5 KiB
C++
#include <iostream>
|
|
#include <string>
|
|
#include <iomanip>
|
|
#include <sys/time.h>
|
|
|
|
#include "src/core/cpu/naive.hpp"
|
|
#include "src/core/cpu/sse.hpp"
|
|
#include "src/core/cpu/utils.hpp"
|
|
|
|
using namespace Core::Cpu;
|
|
|
|
long int gettime(){
|
|
struct timeval tp;
|
|
gettimeofday(&tp, NULL);
|
|
long int ms = tp.tv_sec * 1000 + tp.tv_usec / 1000;
|
|
return ms;
|
|
};
|
|
|
|
#define MAX_ITER 1000*1000*100
|
|
|
|
int main(int argc, char** argcv){
|
|
UInt v1_128[Utils::INT_LEN_128] = { 0x1, 0x2,0x3,0x4 };
|
|
UInt v2_128[Utils::INT_LEN_128] = { 0x1, 0x2,0x3,0x4 };
|
|
|
|
ULong v1_128_l[Utils::LONG_LEN_128];
|
|
ULong v2_128_l[Utils::LONG_LEN_128];
|
|
|
|
Utils::int128BitToLong(v1_128,v1_128_l);
|
|
Utils::int128BitToLong(v2_128,v2_128_l);
|
|
|
|
long int start,end;
|
|
|
|
Utils::printHex(v1_128,Utils::INT_LEN_128);
|
|
Utils::printHex(v2_128,Utils::INT_LEN_128);
|
|
|
|
Utils::printHex(v1_128_l,Utils::LONG_LEN_128);
|
|
Utils::printHex(v2_128_l,Utils::LONG_LEN_128);
|
|
|
|
start = gettime();
|
|
for(int i=0;i<MAX_ITER;i++){
|
|
Naive::sum_128_long(v1_128,v2_128);
|
|
}
|
|
end = gettime();
|
|
cout << "Naive Approach: " << end-start << endl;
|
|
|
|
start = gettime();
|
|
for(int i=0;i<MAX_ITER;i++){
|
|
SSE::sum_128(v1_128,v2_128);
|
|
}
|
|
end = gettime();
|
|
cout << "SSE Approach paddw: " << end-start << endl;
|
|
|
|
start = gettime();
|
|
for(int i=0;i<MAX_ITER;i++){
|
|
SSE::sum_128(v1_128_l,v2_128_l);
|
|
}
|
|
end = gettime();
|
|
cout << "SSE Approach paddd: " << end-start << endl;
|
|
|
|
Utils::printHex(v1_128,Utils::INT_LEN_128);
|
|
Utils::printHex(v1_128_l,Utils::LONG_LEN_128);
|
|
|
|
} |