#include #include #if PLATFORM_WINDOWS #include #include #elif PLATFORM_LINUX #include #elif PLATFORM_MACOS #include #include #include #endif inline void set_thread_name(const char* name) { #if PLATFORM_WINDOWS SetThreadDescription(GetCurrentThread(), std::wstring(name, name + strlen(name)).c_str()); #elif PLATFORM_LINUX pthread_setname_np(pthread_self(), name); #elif PLATFORM_MACOS pthread_setname_np(name); #endif } inline void set_thread_affinity(std::thread& thread, int core) { #if PLATFORM_WINDOWS const auto handle = reinterpret_cast(thread.native_handle()); SetThreadAffinityMask(handle, 1 << core); #elif PLATFORM_LINUX cpu_set_t cpuset; CPU_ZERO(&cpuset); CPU_SET(core, &cpuset); pthread_setaffinity_np(thread.native_handle(), sizeof(cpu_set_t), &cpuset); #elif PLATFORM_MACOS thread_affinity_policy_data_t policy = { core }; kern_return_t result = thread_policy_set( pthread_mach_thread_np(thread.native_handle()), THREAD_AFFINITY_POLICY, (thread_policy_t)&policy, THREAD_AFFINITY_POLICY_COUNT ); if (result != KERN_SUCCESS) { spdlog::error("Failed to set thread affinity: {}", result); } else { spdlog::info("Thread bound to core {}", core); } #endif }