You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

tensor_remap.cpp 894 B

123456789101112131415161718192021222324252627282930313233343536
  1. #include "test/common/tensor_remap.h"
  2. #include <cstring>
  3. #include "test/common/random_state.h"
  4. namespace megdnn {
  5. namespace test {
  6. namespace tensor_remap {
  7. dt_float32 MapRNG::gen_single_val() {
  8. auto&& gen = RandomState::generator();
  9. std::uniform_int_distribution<int> dist(0, m_src[m_cnt] - 1);
  10. m_cnt++;
  11. if (m_cnt == m_src.ndim)
  12. m_cnt -= m_src.ndim;
  13. return dist(gen);
  14. }
  15. NonoverlappingMapRNG::NonoverlappingMapRNG(TensorShape src)
  16. : m_cnt(0), m_src(src), m_idx(TensorLayout(src, dtype::Byte()), 0) {}
  17. dt_float32 NonoverlappingMapRNG::gen_single_val() {
  18. auto res = m_idx.array()[m_cnt];
  19. m_cnt++;
  20. if (m_cnt == m_src.ndim) {
  21. m_cnt -= m_src.ndim;
  22. m_idx = Index(m_idx.layout(), m_idx.linear_index() + 1);
  23. }
  24. return res;
  25. }
  26. } // namespace tensor_remap
  27. } // namespace test
  28. } // namespace megdnn
  29. // vim: syntax=cpp.doxygen