【问题标题】:Windows AffinityWindows 亲和性
【发布时间】:2014-08-02 15:57:07
【问题描述】:

在为 Core 2 设置 Windows CPU 关联掩码时,掩码应该是 0x0010 还是 0x0001?我已经看到一个示例,其中 Core 0 的掩码设置为 0x0010 但这没有多大意义?

【问题讨论】:

  • 为什么没有意义?如果它是位掩码,0x0001 非常有意义,它将位 0 ​​设置为 1。
  • @LasseV.Karlsen 因为 0000 for Core....0 更有意义?
  • 如果它是位掩码,那将导致没有内核符合条件。所以不,这没有意义(对我来说)。这不是核心的数量,而是您允许的核心的位掩码。
  • 记住,这是一个掩码,而不是一个枚举。如果 0000 仅表示核心 0,您如何说“核心 0 和核心 1”?

标签: windows cpu affinity setthreadaffinitymask


【解决方案1】:

0x0000 根本不允许为此进程/线程安排任何 CPU。 (会被挂起,假设在参数验证过程中设置亲和度不会失败,在不同的Windows版本上可能会有所不同)

0x0001 只允许 Core 0

0x0002 只允许 Core 1

0x0003 允许 Core 0 和 Core 1。

【讨论】:

  • 亲和 0x0 真的支持吗?我在 Windows 7 下尝试,调用失败,错误 87 (ERROR_INVALID_PARAMETER)。
  • 我尝试将 NtSetInformationProcess 与 ProcessAffinityMask 一起使用并引用值 0x0,但这也因 0xC000000D (STATUS_INVALID_PARAMETER) 而失败。
  • @RolandPihlakas:请仔细阅读:假设在参数验证期间设置亲和度不会失败,在不同的 Windows 版本上可能会有所不同
  • 感谢您的详细信息!您是否还记得 0x0 是在哪个 Windows 版本关联上通过了参数验证?
  • @RolandPihlakas:我不知道是否有任何这样的版本,但是亲和函数的官方文档并没有保证 0x0000 总是被拒绝为无效参数,所以你不应该依赖它。
【解决方案2】:

你也可以设置任务

("taskset -cp 2 %d"% os.getpid())

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-06
    • 1970-01-01
    • 2012-01-09
    • 1970-01-01
    • 1970-01-01
    • 2011-01-15
    • 2012-11-07
    • 1970-01-01
    相关资源
    最近更新 更多