Advertisement
Guest User

Averaging Primes

a guest
Aug 20th, 2016
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. //Runs on Windows 7 Ultimate.
  2.  
  3. #include <vector>
  4. bool isPrime(int number) //This is pure CSStudent.jpg but whatever
  5. {
  6.      int i;
  7.      for (i=2; i<number; i++)
  8.      { if(number % i==0)
  9.        return false;
  10.      }
  11.      return true;
  12. }
  13.  
  14. long int average(FILE* file,std::vector<float>& arr, size_t size)
  15. {
  16.     void *mem = malloc((sizeof(float)*4)+15); //needed to have 16 bit alligned space for the unload.
  17.     void *ptr = (void*)(((uintptr_t)mem+15) & ~ (uintptr_t)0x0F);
  18.     float* avgFloats=(float*)ptr;
  19.    
  20.    
  21.     __m128 tot = _mm_setr_ps((float)size,(float)size,(float)size,(float)size);
  22.     __m128 avg = _mm_setr_ps(0.0f,0.0f,0.0f,0.0f);
  23.     long int start =__rdtsc();
  24.     for (size_t i = 0; i < size; i=i+4)
  25.     {
  26.         __m128 values = _mm_loadu_ps(&arr[i]);
  27.         __m128 div = _mm_div_ps(values,tot);
  28.         avg = _mm_add_ps(avg,div);
  29.     }
  30.    
  31.     _mm_store_ps (avgFloats, avg);
  32.     float result=0;
  33.     for (int i = 0; i < 4; i++)
  34.     {
  35.         result+=avgFloats[i];
  36.     }
  37.     long int end =__rdtsc();
  38.     fprintf(file,"R:%f\t", result);
  39.     return end-start;
  40. }
  41.  
  42. int main(){
  43.     std::vector<float> arr;
  44.     for (size_t i = 0; i < 100000; i++) //Because of the CSStudent.jpg isPrime function I reduced this.
  45.     {
  46.         if (isPrime(i))
  47.         {
  48.             arr.push_back((float)i);
  49.         }
  50.     }
  51.     size_t oldSize=arr.size();
  52.     printf("Number of integers:%d\n",oldSize);
  53.     size_t unalign = arr.size()%4;
  54.     arr.resize(arr.size()+(4-unalign),0);
  55.     FILE* file= fopen("output.txt","w");
  56.     for (int i = 0; i < 100; i++)
  57.     {
  58.        
  59.         fprintf(file,"Run#%02d: %ld\n",i,average(file,arr,oldSize));
  60.     }
  61.    
  62.     getchar();
  63.     return 0;
  64. }
  65. //Using my i7-3720QM. Has had issues..
  66. //Time gotten using _rdtsc()
  67. //Only measured the actual process of averaging and recombining the value
  68. //output.txt:
  69. R:47362.574219  Run#00: 13630
  70. R:47362.574219  Run#01: 12560
  71. R:47362.574219  Run#02: 12558
  72. R:47362.574219  Run#03: 12556
  73. R:47362.574219  Run#04: 12524
  74. R:47362.574219  Run#05: 12526
  75. R:47362.574219  Run#06: 12562
  76. R:47362.574219  Run#07: 12520
  77. R:47362.574219  Run#08: 12524
  78. R:47362.574219  Run#09: 12520
  79. R:47362.574219  Run#10: 12520
  80. R:47362.574219  Run#11: 12520
  81. R:47362.574219  Run#12: 12518
  82. R:47362.574219  Run#13: 12524
  83. R:47362.574219  Run#14: 12532
  84. R:47362.574219  Run#15: 12522
  85. R:47362.574219  Run#16: 12556
  86. R:47362.574219  Run#17: 12526
  87. R:47362.574219  Run#18: 12526
  88. R:47362.574219  Run#19: 12516
  89. R:47362.574219  Run#20: 12522
  90. R:47362.574219  Run#21: 12518
  91. R:47362.574219  Run#22: 12520
  92. R:47362.574219  Run#23: 12524
  93. R:47362.574219  Run#24: 12558
  94. R:47362.574219  Run#25: 12522
  95. R:47362.574219  Run#26: 12520
  96. R:47362.574219  Run#27: 12550
  97. R:47362.574219  Run#28: 12522
  98. R:47362.574219  Run#29: 12524
  99. R:47362.574219  Run#30: 12556
  100. R:47362.574219  Run#31: 12520
  101. R:47362.574219  Run#32: 12516
  102. R:47362.574219  Run#33: 12522
  103. R:47362.574219  Run#34: 12518
  104. R:47362.574219  Run#35: 12562
  105. R:47362.574219  Run#36: 12522
  106. R:47362.574219  Run#37: 12524
  107. R:47362.574219  Run#38: 12518
  108. R:47362.574219  Run#39: 12524
  109. R:47362.574219  Run#40: 12556
  110. R:47362.574219  Run#41: 12550
  111. R:47362.574219  Run#42: 12560
  112. R:47362.574219  Run#43: 12526
  113. R:47362.574219  Run#44: 12520
  114. R:47362.574219  Run#45: 12526
  115. R:47362.574219  Run#46: 12562
  116. R:47362.574219  Run#47: 12520
  117. R:47362.574219  Run#48: 12522
  118. R:47362.574219  Run#49: 12526
  119. R:47362.574219  Run#50: 12524
  120. R:47362.574219  Run#51: 12550
  121. R:47362.574219  Run#52: 12520
  122. R:47362.574219  Run#53: 12520
  123. R:47362.574219  Run#54: 12532
  124. R:47362.574219  Run#55: 12524
  125. R:47362.574219  Run#56: 12518
  126. R:47362.574219  Run#57: 12532
  127. R:47362.574219  Run#58: 12524
  128. R:47362.574219  Run#59: 12522
  129. R:47362.574219  Run#60: 12556
  130. R:47362.574219  Run#61: 12552
  131. R:47362.574219  Run#62: 12520
  132. R:47362.574219  Run#63: 12520
  133. R:47362.574219  Run#64: 12554
  134. R:47362.574219  Run#65: 12526
  135. R:47362.574219  Run#66: 12520
  136. R:47362.574219  Run#67: 12558
  137. R:47362.574219  Run#68: 12520
  138. R:47362.574219  Run#69: 12554
  139. R:47362.574219  Run#70: 12524
  140. R:47362.574219  Run#71: 12522
  141. R:47362.574219  Run#72: 12520
  142. R:47362.574219  Run#73: 12526
  143. R:47362.574219  Run#74: 12518
  144. R:47362.574219  Run#75: 12528
  145. R:47362.574219  Run#76: 12526
  146. R:47362.574219  Run#77: 12526
  147. R:47362.574219  Run#78: 12520
  148. R:47362.574219  Run#79: 12522
  149. R:47362.574219  Run#80: 12524
  150. R:47362.574219  Run#81: 12524
  151. R:47362.574219  Run#82: 12518
  152. R:47362.574219  Run#83: 15370
  153. R:47362.574219  Run#84: 14672
  154. R:47362.574219  Run#85: 12562
  155. R:47362.574219  Run#86: 12526
  156. R:47362.574219  Run#87: 12524
  157. R:47362.574219  Run#88: 12556
  158. R:47362.574219  Run#89: 12520
  159. R:47362.574219  Run#90: 12526
  160. R:47362.574219  Run#91: 12618
  161. R:47362.574219  Run#92: 12622
  162. R:47362.574219  Run#93: 12522
  163. R:47362.574219  Run#94: 12526
  164. R:47362.574219  Run#95: 12522
  165. R:47362.574219  Run#96: 12526
  166. R:47362.574219  Run#97: 12518
  167. R:47362.574219  Run#98: 12556
  168. R:47362.574219  Run#99: 12554
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement