MCPcopy Create free account
hub / github.com/DeepRec-AI/DeepRec / Hash64AVX_512_Impl

Function Hash64AVX_512_Impl

tensorflow/core/lib/hash/hash.cc:491–535  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

489}
490
491inline void Hash64AVX_512_Impl(const char*& data, size_t& n, uint64& h,
492 const uint64& m, const int& r) {
493 __m512i m_pack = _mm512_set1_epi64(m);
494 __m512i k;
495 __m512i k_tmp;
496 __m256i k_low;
497 __m256i k_high;
498
499 while (n >= 64) {
500 // k packs 32 chars (bytes)
501 k = _mm512_loadu_si512((const void*)data);
502 if (!port::kLittleEndian) {
503 // change from BigEdian to LittleEdian
504 // swap_int64_256(k);
505 }
506 data += 64;
507 n -= 64;
508
509 k = _mm512_mullo_epi64(k, m_pack);
510 k_tmp = _mm512_srli_epi64(k, r);
511 k = _mm512_xor_si512(k, k_tmp);
512 k = _mm512_mullo_epi64(k, m_pack);
513 // 1st reduction
514 k_low = _mm512_extracti64x4_epi64(k, 0);
515 k_high = _mm512_extracti64x4_epi64(k, 1);
516
517 h ^= _mm256_extract_epi64(k_low, 0);
518 h *= m;
519 h ^= _mm256_extract_epi64(k_low, 1);
520 h *= m;
521 h ^= _mm256_extract_epi64(k_low, 2);
522 h *= m;
523 h ^= _mm256_extract_epi64(k_low, 3);
524 h *= m;
525
526 h ^= _mm256_extract_epi64(k_high, 0);
527 h *= m;
528 h ^= _mm256_extract_epi64(k_high, 1);
529 h *= m;
530 h ^= _mm256_extract_epi64(k_high, 2);
531 h *= m;
532 h ^= _mm256_extract_epi64(k_high, 3);
533 h *= m;
534 }
535}
536
537inline void Hash64AVX_64_Impl(const char*& data, size_t& n, uint64& h,
538 const uint64& m, const int& r) {

Callers 1

Hash64V3Function · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected