gpt4 book ai didi

delphi - 如何在 Delphi XE7 for windows 2012 R2 中以编程方式 SetProcessAffinityMask

转载 作者:行者123 更新时间:2023-12-03 15:32:10 26 4
gpt4 key购买 nike

我有一个工作站,其操作系统是 64 位 Windows Server 2012 R2。我使用的是 Delphi XE7 Update 1。工作站有 72 个核心,包括超线程。我希望所有应用程序都在每次运行应用程序时可用的所有内核上运行。我希望以编程方式执行此操作,而不是使用任务主控中的设置亲和性(一次仅适用于一组,我有两组 36 个 cpu,我想同时使用它们)或从 msconfig 提前设置启动选项。

我意识到该问题类似于或包含 Stackoverflow 上已提出的以下问题

Delphi TParallel not using all available cpu

Strange behaviour of TParallel.For default ThreadPool

SetProcessAffinityMask - Select more than one processor? .

我也查看了建议 edn.embarcadero.com/article/27267。

但是我的 SetProcessAffinityMask 问题涉及使用 64 位操作系统的 64 个以上内核,并且不限于使用 TParallel。

我尝试过的解决方案是对 Marco van de Voort 提供的解决方案的改编

   var 
cpuset : set of 0..71;
i: integer;
begin
cpuset:=[];
for i:=0 to 71 do
cpuset:=cpuset+[i];

SetProcessAffinityMask(ProcInfo.hProcess, dword(cpuset));

end;

但是没有成功。

如果有任何建议,我将不胜感激。

最佳答案

正如评论中所讨论的,关联掩码在 32 位代码中为 32 位,在 64 位代码中为 64 位。您正在尝试设置 72 位掩码。显然这是行不通的。

您将需要了解处理器组,MSDN 上有详细介绍:Processor Groups ,包括此链接到 Supporting Systems That Have More Than 64 Processors .

由于您有 72 个处理器,因此您将拥有多个处理器组。您需要使用多个进程来访问所有组,或者使用多进程组。来自文档:

After the thread is created, its affinity can be changed by calling SetThreadAffinityMask or SetThreadGroupAffinity. If a thread is assigned to a different group than the process, the process's affinity is updated to include the thread's affinity and the process becomes a multi-group process. Further affinity changes must be made for individual threads; a multi-group process's affinity cannot be modified using SetProcessAffinityMask.

这是非常粗糙的东西。如果您可以控制线程,那么您应该能够使用 SetThreadGroupAffinity 执行您需要的操作。如果您使用 Delphi 线程库,那么您无法控制线程。这可能会使单一流程解决方案站不住脚。

另一个需要考虑的问题是内存局部性。如果机器使用 NUMA 内存,那么据我所知,没有任何 Delphi 内存管理器可以与 NUMA 内存一起良好地运行。在 NUMA 环境中,如果性能对您很重要,您可能需要每个线程在线程的 NUMA 节点上分配内存。

这里的底线是,没有简单的快速修复来生成有效使用该机器的所有资源的代码。从我上面链接的文档开始,进行一些试验,以确保您了解处理器组和 NUMA 的所有含义。

关于delphi - 如何在 Delphi XE7 for windows 2012 R2 中以编程方式 SetProcessAffinityMask,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31494401/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com