Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "stdafx.h"
- #include <cstdio>
- #include <cstdlib>
- #include <cstring>
- #include <map>
- #include <unordered_map>
- #include <vector>
- #include <fstream>
- #include <iterator>
- #include <algorithm>
- #include <list>
- #include <sstream>
- #include <iostream>
- #include <bitset>
- #include <array>
- #include <ctype.h>
- #include <ctime>
- #include <emmintrin.h>
- using namespace std;
- inline void addToDoubleVectorSSE(
- const double * what, const double * toWhat, double * dest, const unsigned int len)
- {
- __m128d * _what = (__m128d*)what;
- __m128d * _toWhat = (__m128d*)toWhat;
- __m128d * _toWhatBase = (__m128d*)toWhat;
- __m128d _dest1;
- __m128d _dest2;
- for ( register unsigned int i = 0; i < len; i+= 4, _what += 2, _toWhat += 2, _toWhatBase+=2 )
- {
- _toWhatBase = _toWhat;
- _dest1 = _mm_add_pd( *_what, *_toWhat );
- _dest2 = _mm_add_pd( *(_what+1), *(_toWhat+1));
- *_toWhatBase = _dest1;
- *(_toWhatBase+1) = _dest2;
- }
- /*
- for ( register unsigned int i = 0; i < len; i+= 4 )
- {
- _toWhatBase = _toWhat;
- _dest1 = _mm_add_pd( *_what++, *_toWhat++ );
- _dest2 = _mm_add_pd( *_what++, *_toWhat++ );
- *_toWhatBase++ = _dest1;
- *_toWhatBase++ = _dest2;
- }*/
- }
- int main(int argc, const char* argv[]) {
- int count = 10000000;
- __declspec(align(16)) double a[100];
- __declspec(align(16)) double b[100];
- for (int i =0 ; i != 100 ; i++) {
- a[i] = i*i;
- b[i] = sqrt((double)i);
- }
- __declspec(align(16)) double c[100];
- clock_t start = clock();
- for (int i = 0 ; i != count ; i++) {
- addToDoubleVectorSSE(a, b, c, 100);
- }
- cout << clock() - start << endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement