【问题标题】:sched_getcpu() equivalent for OS X?sched_getcpu() 等效于 OS X?
【发布时间】:2016-02-18 03:22:44
【问题描述】:

在 OS X 上,有没有办法找出线程在哪个 CPU 上运行? Linux 的等效函数是sched_getcpu

【问题讨论】:

  • 谁在乎,为什么?此外,此类信息在收到时已过时。
  • @MartinJames:实际上我需要知道这一点,因为我正在尝试调试内核之间线程迁移的性能问题 - 我想在线程运行时记录 CPU(内核)亲和力以查看如何通常线程会被迁移。不幸的是,在 BSD 或 OS X 中似乎没有这样做的标准方法。
  • @Will:你有没有找到解决方案?

标签: c macos cpu scheduler processor


【解决方案1】:

GetCurrentProcessorNumber 示例显示了使用 CPUID 指令实现此功能的代码。我自己试过了,可以确认它可以在 Mac OS X 上运行。

这是我在 Mac OS X 上使用的版本

#include <cpuid.h>

#define CPUID(INFO, LEAF, SUBLEAF) __cpuid_count(LEAF, SUBLEAF, INFO[0], INFO[1], INFO[2], INFO[3])

#define GETCPU(CPU) {                              \
        uint32_t CPUInfo[4];                           \
        CPUID(CPUInfo, 1, 0);                          \
        /* CPUInfo[1] is EBX, bits 24-31 are APIC ID */ \
        if ( (CPUInfo[3] & (1 << 9)) == 0) {           \
          CPU = -1;  /* no APIC on chip */             \
        }                                              \
        else {                                         \
          CPU = (unsigned)CPUInfo[1] >> 24;                    \
        }                                              \
        if (CPU < 0) CPU = 0;                          \
      }

【讨论】:

    猜你喜欢
    • 2015-05-05
    • 1970-01-01
    • 2010-10-04
    • 2012-06-06
    • 2020-01-19
    • 2010-11-29
    • 2010-09-05
    • 2013-06-08
    • 2021-04-04
    相关资源
    最近更新 更多