Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //Runs on Windows 7 Ultimate.
- #include <vector>
- bool isPrime(int number) //This is pure CSStudent.jpg but whatever
- {
- int i;
- for (i=2; i<number; i++)
- { if(number % i==0)
- return false;
- }
- return true;
- }
- long int average(FILE* file,std::vector<float>& arr, size_t size)
- {
- void *mem = malloc((sizeof(float)*4)+15); //needed to have 16 bit alligned space for the unload.
- void *ptr = (void*)(((uintptr_t)mem+15) & ~ (uintptr_t)0x0F);
- float* avgFloats=(float*)ptr;
- __m128 tot = _mm_setr_ps((float)size,(float)size,(float)size,(float)size);
- __m128 avg = _mm_setr_ps(0.0f,0.0f,0.0f,0.0f);
- long int start =__rdtsc();
- for (size_t i = 0; i < size; i=i+4)
- {
- __m128 values = _mm_loadu_ps(&arr[i]);
- __m128 div = _mm_div_ps(values,tot);
- avg = _mm_add_ps(avg,div);
- }
- _mm_store_ps (avgFloats, avg);
- float result=0;
- for (int i = 0; i < 4; i++)
- {
- result+=avgFloats[i];
- }
- long int end =__rdtsc();
- fprintf(file,"R:%f\t", result);
- return end-start;
- }
- int main(){
- std::vector<float> arr;
- for (size_t i = 0; i < 100000; i++) //Because of the CSStudent.jpg isPrime function I reduced this.
- {
- if (isPrime(i))
- {
- arr.push_back((float)i);
- }
- }
- size_t oldSize=arr.size();
- printf("Number of integers:%d\n",oldSize);
- size_t unalign = arr.size()%4;
- arr.resize(arr.size()+(4-unalign),0);
- FILE* file= fopen("output.txt","w");
- for (int i = 0; i < 100; i++)
- {
- fprintf(file,"Run#%02d: %ld\n",i,average(file,arr,oldSize));
- }
- getchar();
- return 0;
- }
- //Using my i7-3720QM. Has had issues..
- //Time gotten using _rdtsc()
- //Only measured the actual process of averaging and recombining the value
- //output.txt:
- R:47362.574219 Run#00: 13630
- R:47362.574219 Run#01: 12560
- R:47362.574219 Run#02: 12558
- R:47362.574219 Run#03: 12556
- R:47362.574219 Run#04: 12524
- R:47362.574219 Run#05: 12526
- R:47362.574219 Run#06: 12562
- R:47362.574219 Run#07: 12520
- R:47362.574219 Run#08: 12524
- R:47362.574219 Run#09: 12520
- R:47362.574219 Run#10: 12520
- R:47362.574219 Run#11: 12520
- R:47362.574219 Run#12: 12518
- R:47362.574219 Run#13: 12524
- R:47362.574219 Run#14: 12532
- R:47362.574219 Run#15: 12522
- R:47362.574219 Run#16: 12556
- R:47362.574219 Run#17: 12526
- R:47362.574219 Run#18: 12526
- R:47362.574219 Run#19: 12516
- R:47362.574219 Run#20: 12522
- R:47362.574219 Run#21: 12518
- R:47362.574219 Run#22: 12520
- R:47362.574219 Run#23: 12524
- R:47362.574219 Run#24: 12558
- R:47362.574219 Run#25: 12522
- R:47362.574219 Run#26: 12520
- R:47362.574219 Run#27: 12550
- R:47362.574219 Run#28: 12522
- R:47362.574219 Run#29: 12524
- R:47362.574219 Run#30: 12556
- R:47362.574219 Run#31: 12520
- R:47362.574219 Run#32: 12516
- R:47362.574219 Run#33: 12522
- R:47362.574219 Run#34: 12518
- R:47362.574219 Run#35: 12562
- R:47362.574219 Run#36: 12522
- R:47362.574219 Run#37: 12524
- R:47362.574219 Run#38: 12518
- R:47362.574219 Run#39: 12524
- R:47362.574219 Run#40: 12556
- R:47362.574219 Run#41: 12550
- R:47362.574219 Run#42: 12560
- R:47362.574219 Run#43: 12526
- R:47362.574219 Run#44: 12520
- R:47362.574219 Run#45: 12526
- R:47362.574219 Run#46: 12562
- R:47362.574219 Run#47: 12520
- R:47362.574219 Run#48: 12522
- R:47362.574219 Run#49: 12526
- R:47362.574219 Run#50: 12524
- R:47362.574219 Run#51: 12550
- R:47362.574219 Run#52: 12520
- R:47362.574219 Run#53: 12520
- R:47362.574219 Run#54: 12532
- R:47362.574219 Run#55: 12524
- R:47362.574219 Run#56: 12518
- R:47362.574219 Run#57: 12532
- R:47362.574219 Run#58: 12524
- R:47362.574219 Run#59: 12522
- R:47362.574219 Run#60: 12556
- R:47362.574219 Run#61: 12552
- R:47362.574219 Run#62: 12520
- R:47362.574219 Run#63: 12520
- R:47362.574219 Run#64: 12554
- R:47362.574219 Run#65: 12526
- R:47362.574219 Run#66: 12520
- R:47362.574219 Run#67: 12558
- R:47362.574219 Run#68: 12520
- R:47362.574219 Run#69: 12554
- R:47362.574219 Run#70: 12524
- R:47362.574219 Run#71: 12522
- R:47362.574219 Run#72: 12520
- R:47362.574219 Run#73: 12526
- R:47362.574219 Run#74: 12518
- R:47362.574219 Run#75: 12528
- R:47362.574219 Run#76: 12526
- R:47362.574219 Run#77: 12526
- R:47362.574219 Run#78: 12520
- R:47362.574219 Run#79: 12522
- R:47362.574219 Run#80: 12524
- R:47362.574219 Run#81: 12524
- R:47362.574219 Run#82: 12518
- R:47362.574219 Run#83: 15370
- R:47362.574219 Run#84: 14672
- R:47362.574219 Run#85: 12562
- R:47362.574219 Run#86: 12526
- R:47362.574219 Run#87: 12524
- R:47362.574219 Run#88: 12556
- R:47362.574219 Run#89: 12520
- R:47362.574219 Run#90: 12526
- R:47362.574219 Run#91: 12618
- R:47362.574219 Run#92: 12622
- R:47362.574219 Run#93: 12522
- R:47362.574219 Run#94: 12526
- R:47362.574219 Run#95: 12522
- R:47362.574219 Run#96: 12526
- R:47362.574219 Run#97: 12518
- R:47362.574219 Run#98: 12556
- R:47362.574219 Run#99: 12554
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement