Я хочу реализовать этот clang алгоритм на C#, используя Vector512 вместо 256, но я не могу найти способ сделать это.
Существует Avx2.MoveMask() и нет Avx512F/BW/VBMI/DQ. MoveMask.
Код: Выделить всё
const __m256i first = _mm256_set1_epi8(needle[0]);
const __m256i last = _mm256_set1_epi8(needle[m - 1]);
const __m256i block_first1 = _mm256_loadu_si256((const __m256i *)(s + i));
const __m256i block_last1 = _mm256_loadu_si256((const __m256i *)(s + i + m - 1));
const __m256i eq_first1 = _mm256_cmpeq_epi8(first, block_first1);
const __m256i eq_last1 = _mm256_cmpeq_epi8(last, block_last1);
const uint32_t mask1 = _mm256_movemask_epi8(_mm256_and_si256(eq_first1, eq_last1));
Код: Выделить всё
ulong mask = ((ulong)Avx2.MoveMask(buffer.GetUpper())
Подробнее здесь: [url]https://stackoverflow.com/questions/79048577/what-is-the-alternative-method-for-avx2-movemask-in-vector512t[/url]