Advertisement
Guest User

Untitled

a guest
Feb 25th, 2020
241
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.17 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #include <immintrin.h>
  3. using namespace std;
  4.  
  5. #define mp make_pair
  6. #define endl '\n'
  7. #define un unsigned
  8. #define all(a) begin(a), end(a)
  9. #define fastream ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0)
  10. typedef long long ll;
  11. typedef pair<int, int> pii;
  12. typedef pair<ll, ll> pll;
  13. typedef double db;
  14. typedef long double ldb;
  15.  
  16. unsigned int SegMinSum(unsigned int *a, unsigned int *b, int n) {
  17. __m256i sumv = _mm256_set1_epi32(0);
  18. int i;
  19. for (i = 0; i < n - 8 + 1; i += 8) {
  20. __m256i seg = _mm256_lddqu_si256(reinterpret_cast<__m256i*>(a + i));
  21. seg = _mm256_min_epi32(seg, _mm256_lddqu_si256(reinterpret_cast<__m256i*>(b + i)));
  22. sumv = _mm256_add_epi32(sumv, seg);
  23. }
  24. int sum = 0;
  25. sum += _mm256_extract_epi32(sumv, 0);
  26. sum += _mm256_extract_epi32(sumv, 1);
  27. sum += _mm256_extract_epi32(sumv, 2);
  28. sum += _mm256_extract_epi32(sumv, 3);
  29. sum += _mm256_extract_epi32(sumv, 4);
  30. sum += _mm256_extract_epi32(sumv, 5);
  31. sum += _mm256_extract_epi32(sumv, 6);
  32. sum += _mm256_extract_epi32(sumv, 7);
  33. for (; i < n; i++) {
  34. sum += min(a[i], b[i]);
  35. }
  36. return sum;
  37. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement