static void avx512f_test (void) { __m512i a = _mm512_set_epi32 (1, 17, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16); __m512i b = _mm512_set_epi32 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16); __mmask16 c = _mm512_cmpgt_epu32_mask (a, b); if (_mm512_mask2int (c) != 0xc000) __builtin_abort (); }
// Philox RNG for Xeon Phi cards __forceinline void philox2x32_mic(uint64_t counter, uint32_t key, __m512i& rnd1, __m512i& rnd2) { #ifdef __MIC__ const __m512i m = _mm512_set1_epi32(0xD256D193); const __m512i w = _mm512_set1_epi32(0x9E3779B9); const __m512i incr = _mm512_set_epi32(15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); __m512i r = _mm512_set1_epi32(counter & 0xFFFFFFFF); __m512i l = _mm512_set1_epi32(counter >> 32); __m512i keyV = _mm512_set1_epi32(key); keyV = _mm512_add_epi32(keyV, incr); #pragma unroll(10) for(int i = 0; i < 10; ++i) { __m512i l_old = l; l = _mm512_mullo_epi32(r, m); r = _mm512_xor_epi32(_mm512_xor_epi32(_mm512_mulhi_epu32(r, m), keyV), l_old); keyV = _mm512_add_epi32(keyV, w); } rnd1 = r; rnd2 = l; #endif }
int main() { __m512i x = _mm512_set_epi32(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16); printf("max %u \n", avx512maxbitas32int(x)); }
foo (int x) { return _mm512_set_epi32 (x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x); }