Просмотр исходного кода

core_timing: Make use of MicroSleep for x64 CPUs

For CPUs that support tpause, this should result in significant CPU power savings over thread yield in this spin wait.
Morph 3 лет назад
Родитель
Сommit
e1bce50d8b
1 измененных файлов с 8 добавлено и 0 удалено
  1. 8 0
      src/core/core_timing.cpp

+ 8 - 0
src/core/core_timing.cpp

@@ -10,6 +10,10 @@
 #include "common/windows/timer_resolution.h"
 #include "common/windows/timer_resolution.h"
 #endif
 #endif
 
 
+#ifdef ARCHITECTURE_x86_64
+#include "common/x64/cpu_wait.h"
+#endif
+
 #include "common/microprofile.h"
 #include "common/microprofile.h"
 #include "core/core_timing.h"
 #include "core/core_timing.h"
 #include "core/core_timing_util.h"
 #include "core/core_timing_util.h"
@@ -269,7 +273,11 @@ void CoreTiming::ThreadLoop() {
                         if (wait_time >= timer_resolution_ns) {
                         if (wait_time >= timer_resolution_ns) {
                             Common::Windows::SleepForOneTick();
                             Common::Windows::SleepForOneTick();
                         } else {
                         } else {
+#ifdef ARCHITECTURE_x86_64
+                            Common::X64::MicroSleep();
+#else
                             std::this_thread::yield();
                             std::this_thread::yield();
+#endif
                         }
                         }
                     }
                     }