onnxruntime/onnxruntime/core/framework/prepacked_weights.cc
Edward Chen 3466ee45a3
Add hash value typedef. (#9710)
Add a typedef for the various hash value variables. Use of a typedef conveys some additional meaning.
2021-12-15 19:07:17 -08:00

31 lines
1 KiB
C++

// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
#include "prepacked_weights.h"
#include "core/framework/murmurhash3.h"
namespace onnxruntime {
HashValue PrePackedWeights::GetHash() const {
// Adaptation of the hashing logic of the KernelDef class
uint32_t hash[4] = {0, 0, 0, 0};
auto hash_int8_t_buffer = [&hash](void* data, int len) { MurmurHash3::x86_128(data, len, hash[0], &hash); };
ORT_ENFORCE(buffers_.size() == buffer_sizes_.size());
for (size_t iter = 0; iter < buffers_.size(); ++iter) {
// some pre-packed buffers may be null if they were just "place-holders" occupying an index
// in the "buffers_" vector
if (buffers_[iter].get() != nullptr) {
hash_int8_t_buffer(buffers_[iter].get(), static_cast<int>(buffer_sizes_[iter]));
}
}
HashValue returned_hash = hash[0] & 0xfffffff8; // save low 3 bits for hash version info in case we need it in the future
returned_hash |= uint64_t(hash[1]) << 32;
return returned_hash;
}
} // namespace onnxruntime