Advertisement
T-D-K

Untitled

Feb 7th, 2019
438
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 1.74 KB | None | 0 0
  1.         [Benchmark]
  2.         public unsafe bool Intrinsics() {
  3.             const int vectorSize = 256 / 8;
  4.             int i = 0;
  5.             var arrayA = ArrayA;
  6.             var arrayB = ArrayB;
  7.             int length = arrayA.Length;    
  8.             fixed (byte* ptrA = arrayA)
  9.             fixed (byte* ptrB = arrayB) {
  10.                 int l = length - vectorSize;
  11.                 for (; i <= l; i += vectorSize) {
  12.                     if (Avx2.MoveMask(Avx2.CompareEqual(Avx2.LoadVector256(ptrA + i), Avx2.LoadVector256(ptrB + i))) != unchecked((int) 0b11111111111111111111111111111111)) {
  13.                         return false;
  14.                     }
  15.                 }
  16.                 int rem = length - i;
  17.                 if (rem >=24) {
  18.                     if (*(long*) (ptrA + i) != *(long*) (ptrB + i) || *(long*) (ptrA + i + 8) != *(long*) (ptrB + i + 8) || *(long*) (ptrA + i + 16) != *(long*) (ptrB + i + 16)) {
  19.                         return false;
  20.                     }
  21.                     i += 24;
  22.                 } else if (rem >= 16) {
  23.                     if (*(long*) (ptrA + i) != *(long*) (ptrB + i) || *(long*) (ptrA + i + 8) != *(long*) (ptrB + i + 8)) {
  24.                         return false;
  25.                     }
  26.                     i += 16;
  27.                 }
  28.                 else if (rem >= 8) {
  29.                     if (*(long*) (ptrA + i) != *(long*) (ptrB + i)) {
  30.                         return false;
  31.                     }
  32.                     i += 8;
  33.                 }
  34.                 for (;i < length; i++) {
  35.                     if (arrayA[i] != arrayB[i]) {
  36.                         return false;
  37.                     }
  38.                 }
  39.             }            
  40.             return true;            
  41.         }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement