设置处理器亲和性的问题

有人知道如何在 AMD 5950x 上设置处理器亲和性吗?我想让它只使用 8 个核心,但日志里出现了这个错误。

2025-06-11T13:09:52 MCEBuddy.AppWrapper.Base → 设置 CPU 亲和性为 → -16711936
WARNING> 2025-06-11T13:09:52 MCEBuddy.AppWrapper.Base → 尝试设置进程优先级或 CPU 亲和性失败 → -16711936
System.ComponentModel.Win32Exception (0x80004005): 参数不正确
at System.Diagnostics.Process.set_ProcessorAffinity(IntPtr value)
at MCEBuddy.AppWrapper.Base.Run()

假设你有16个核心?能否附上转换日志文件。

也请截取一张 MCEBuddy 中 CPU 亲和性设置页面的截图,以便我们查看你试图使用哪个核心。

它有16核心32執行緒。我一直在嘗試不同的模式,大多數都會出現錯誤。

Criminal Minds - S17E05 - Conspiracy vs Theory.mkv-Process TV Shows-2025-06-11T17-39-34.log (1.1 MB)

尝试将其限制为仅使用前16种的组合(取消勾选17-32),看看错误是否消失。

看起來可以運作。

2025-06-12T06:31:14 MCEBuddy.AppWrapper.Base → 正在將 CPU 親和性設定為 → 255

我们正在试图搞清楚发生了什么,是代码的问题,还是新 AMD 处理器对逻辑核心的处理方式不同。

请你试试这个:在“处理器管理”页面里,选中 CPU 1 到 17(即第一行的全部 16 个,再加上第二行的第 1 个)。然后运行一次转码,并把日志里看到的内容告诉我。谢谢。

我透過每次增加一顆 CPU 來進行了幾次測試。這是我看到的結果:

17 CPU affinity to → 131071
18 CPU Affinity to → 262143
19 CPU affinity to → 524287
20 CPU affinity to → 1048575
21 CPU affinity to → 2097151
22 CPU affinity to → 4194303
23 CPU affinity to → 8388607
24 CPU affinity to → 16777215
25 CPU affinity to → 33554431
26 CPU affinity to → 67108863
27 CPU affinity to → 134217727
28 CPU affinity to → 268435455
29 CPU affinity to → 536870911
30 CPU affinity to → 1073741823
31 CPU affinity to → 2147483647
32 必須移除對 1 的檢查,否則無法全選,然後我得到:
Setting CPU affinity to → -2
WARNING> 2025-06-12T16:18:56 MCEBuddy.AppWrapper.Base → Error trying process priority or setting CPU affinity to → -2

太好了。这非常有帮助。

我們這邊再次核對過,程式碼完全符合規格,但看起來 Windows 在處理您的第 32 個邏輯核心時出了問題。我們正在釐清這是 Windows 的錯誤,還是系統組態導致的問題。

請您協助確認以下幾點:

  1. 在 Windows 工作管理員中,是否顯示全部 32 個執行緒/邏輯處理器?
  2. 在 BIOS 設定中,是否已啟用全部 32 個?

我们有一个理论,但需要您的协助来测试。请您再试一次,这涉及手动编辑配置文件,因此步骤顺序很重要。

  1. 点击 MCEBuddy 中的“停止”按钮,确保引擎已停止(引擎停止后,只有“开始”按钮应可用)。
  2. 打开 mcebuddy.conf 文件,找到 CPUAffinity 这一行。
  3. 将其改为 CPUAffinity=-1
  4. 保存文件并关闭。
  5. 点击 MCEBuddy 中的“开始”按钮。
  6. 点击“添加”按钮并运行一次转换(无需完成,只需运行几步,大约 20–30 秒)。

如果方便,请重复上述步骤,但将值改为 CPUAffinity=-2147483648

检查日志文件,并将您看到的内容贴回来。

是的,它顯示 32,而且 BIOS 中所有項目都已啟用。

以下是结果:

将CPU亲和性设置为 → -1

2025-06-18T16:56:41 MCEBuddy.AppWrapper.Base → 将CPU亲和性设置为 → -2147483648
警告> 2025-06-18T16:56:41 MCEBuddy.AppWrapper.Base → 尝试设置进程优先级或CPU亲和性时出错 → -2147483648
System.ComponentModel.Win32Exception (0x80004005): 参数不正确
在 System.Diagnostics.Process.set_ProcessorAffinity(IntPtr value)
在 MCEBuddy.AppWrapper.Base.Run()

谢谢。看起来有两种可能的情况:

  1. Windows(软件 API)存在 bug,导致 MCEBuddy 无法启用/禁用第 32 个核心线程
  2. 系统/主板/BIOS 配置存在问题,导致 Windows 无法识别或管理第 32 个核心线程

目前第 1–31 个核心线程似乎运行正常。

你能在任务管理器里看到第 32 个核心线程吗?你能在任务管理器里单独为某个进程勾选第 32 个核心线程吗?

快速測試問題所在,只需幾個步驟:

  1. 啟動 MCEBuddy GUI(應用程式)並保持開啟
  2. 開啟命令提示字元:前往「執行」並輸入 cmd.exe
  3. 在命令列中輸入
    powershell.exe "Get-Process MCEBuddy.GUI | Select-Object ProcessorAffinity"
  4. 這會顯示預設的處理器遮罩,請告訴我結果
  5. 接著輸入
    powershell.exe "$proc = Get-Process MCEBuddy.GUI; $proc.ProcessorAffinity = 0x80000000"
  6. 這會強制將 MCEBuddy GUI 綁定到第 32 個核心執行緒。若成功,不會出現錯誤,表示第 32 個核心執行緒確實可用,且系統/主機板/BIOS 設定無誤。若出現錯誤(請告知錯誤內容),則可能是 Windows API 的問題。

不确定这是否有帮助,但我用 PowerShell 查看了亲和度,然后在任务管理器里关掉了第 32 个进程。结果如下:
全部 32 个:
PS E:\plex> .\get_proc.ps1
Processor Affinity for Notepad: 4294967295
前 31 个:
PS E:\plex> .\get_proc.ps1
Processor Affinity for Notepad: 2147483647
PS E:\plex>

這是個非常有用的腳本,不過我假設你執行的是 64 位元 Windows,所以測試的 notepad 是以 64 位元模式執行。問題在於 MCEBuddy 的某些元件為了相容性會以 32 位元(WOW64)執行,而問題似乎就是從這裡來的。

能否請你用自己的測試腳本,改以 WOW64 模式下的 32 位元程式再跑一次?

你可以從 %windir%\SysWOW64\notepad.exe 啟動 WOW64 的 32 位元 notepad。

若你在 32 位元 WOW64 環境下也能得到相同結果,就能確認問題的根本原因。

看起来那个版本的记事本在任务管理器中仍然显示为 x64。我确实使用了显示为 x86 的 MobaXterm,它显示的值相同:

PS E:\plex> .\get_proc.ps1
记事本的处理器亲和性:4294967295
PS E:\plex> .\get_proc.ps1
记事本的处理器亲和性:2147483647

完美,謝謝,這似乎是 Windows .NET API 的錯誤。讓我們看看能否找到解決方法。

好的,我們已經有了解決方案並修復了設定問題。請嘗試今天的 2.6.6 beta 版本。您需要回到設定中重新驗證您的處理器設定並重新儲存,變更才會生效。

在此版本中,您可以選擇最多 64 個邏輯核心/執行緒(64 位元系統為 64 個,32 位元系統為 32 個)。

請試著選擇第 32 個處理器(所有處理器或僅第 32 個),然後再試一次不選第 32 個,看看結果如何。

歡迎在此張貼日誌(成功或失敗的都可以),以便我們與預期結果進行比對。