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.

cpuinfo_help.h 1.0 kB

1234567891011121314151617181920212223242526272829303132333435
  1. #pragma once
  2. #include <mutex>
  3. #include <vector>
  4. #include "src/common/utils.h"
  5. #if MGB_ENABLE_CPUINFO
  6. #include "cpuinfo.h"
  7. extern const struct cpuinfo_core** cpuinfo_linux_cpu_to_core_map;
  8. class CpuInfoTmpReplace {
  9. public:
  10. CpuInfoTmpReplace(enum cpuinfo_uarch arch) {
  11. m_cpuinfo_lock.lock();
  12. for (uint32_t i = 0; i < cpuinfo_get_cores_count(); ++i) {
  13. m_arch_bak_vec.push_back(cpuinfo_linux_cpu_to_core_map[i]->uarch);
  14. ((struct cpuinfo_core**)cpuinfo_linux_cpu_to_core_map)[i]->uarch = arch;
  15. }
  16. }
  17. ~CpuInfoTmpReplace() {
  18. if (m_arch_bak_vec.size() > 0) {
  19. for (uint32_t i = 0; i < cpuinfo_get_cores_count(); ++i) {
  20. ((struct cpuinfo_core**)cpuinfo_linux_cpu_to_core_map)[i]->uarch =
  21. m_arch_bak_vec[i];
  22. }
  23. }
  24. m_cpuinfo_lock.unlock();
  25. }
  26. private:
  27. static std::mutex m_cpuinfo_lock;
  28. std::vector<cpuinfo_uarch> m_arch_bak_vec;
  29. };
  30. #endif
  31. // vim: syntax=cpp.doxygen