GEMMLOWP Class — pytorch Architecture
Architecture documentation for the GEMMLOWP class in q8gemm.cc from the pytorch codebase.
Entity Profile
Source Code
aten/src/ATen/native/quantized/cpu/qnnpack/bench/q8gemm.cc lines 373–444
class GEMMLOWP : public benchmark::Fixture {
public:
void SetUp(const benchmark::State& state) override {
const uint_fast32_t seed =
std::chrono::steady_clock::now().time_since_epoch().count();
auto rng =
std::bind(std::uniform_int_distribution<uint8_t>(), std::mt19937(seed));
mc_ = state.range(0);
nc_ = state.range(1);
kc_ = state.range(2);
a_.resize(mc() * kc());
std::generate(a_.begin(), a_.end(), std::ref(rng));
k_.resize(nc() * kc());
std::generate(k_.begin(), k_.end(), std::ref(rng));
b_.resize(nc());
std::generate(b_.begin(), b_.end(), std::ref(rng));
c_.resize(mc() * nc());
std::fill(c_.begin(), c_.end(), 0xA5);
threadingContext.set_max_num_threads(1);
}
void TearDown(benchmark::State& state) override {
state.SetItemsProcessed(
uint64_t(state.iterations()) * 2 * mc() * nc() * kc());
a_.clear();
k_.clear();
c_.clear();
}
inline const uint8_t* a() const {
return a_.data();
}
inline const uint8_t* k() const {
return k_.data();
}
inline const int32_t* b() const {
return b_.data();
}
inline uint8_t* c() {
return c_.data();
}
inline uint32_t mc() const {
return mc_;
}
inline uint32_t nc() const {
return nc_;
}
inline uint32_t kc() const {
return kc_;
}
protected:
gemmlowp::MultiThreadGemmContext threadingContext;
private:
std::vector<uint8_t> a_;
std::vector<uint8_t> k_;
std::vector<int32_t> b_;
std::vector<uint8_t> c_;
uint32_t mc_;
uint32_t nc_;
uint32_t kc_;
};
Source
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free