c++ - 在 Windows 中移动或指定线程堆栈空间

标签 c++ windows stack numa multiprocessor

我正在 NUMA 计算机上进行并行编程(我还没有计算机,预计很快就会到货™)。

我在每个 NUMA 节点上都有一个工作线程池(设置了处理器亲和性)和一个在池/节点之间平均分配工作的平衡器。这是为了确保所有内存分配都在本地内存上。这一切都很好,花花公子。

在启动期间,池工作线程是从主线程创建的,它们必须先进行一些初始设置,然后才能设置自己的亲和性(第三方库要求,对此我无能为力)。

我担心会有隐藏的性能损失,因为工作线程的堆栈帧被分配到错误的节点上,导致外部内存访问。

这是一个真正的问题吗?不知怎的,我相信它已经解决了......

无论如何,我正在寻找一种方法来确保每个线程的堆栈都分配到正确的 NUMA 节点上。

我敬业的谷歌男孩想出了这个:Allocating a Thread's Stack on a specific NUMA memory这是我想做的事情,但它是 pthreads,我需要一个 Windows 解决方案。

最佳答案

MSDN 上明显缺乏这方面的信息,但考虑到我听到 Mark Russinovich 在谈论 Windows 内存内部结构时所描述的内容,除非我开始看到明显的减速,否则我不会担心它。

在事物的方案中,即使是跨节点内存访问仍然比说...交换到磁盘更快。更重要的是,由于内存到事件页面的物理映射与windows上的内存空间(纯虚拟内存空间)没有关系,内核很可能会根据亲和性为每个线程重新映射堆栈页面。

我真的不认为这会影响你,如果它已经有一个暴露的解决方案,因为 SQL Server 团队早就遇到过它。

关于c++ - 在 Windows 中移动或指定线程堆栈空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17493576/

相关文章:

c++ - Windows 中的 log4cpp 入门

windows - Windows命令提示符中纯文本密码的安全性

C++ : What's the easiest library to open video file

c++ - 堆栈与整数

c++ - 调用了错误版本的 vcbuild.exe

C++递归实例讲解

PHP日期计算

c - 在堆栈中插入元素

c - 哪个是初始堆栈指针的正确值?

c++ - 为什么叫iota?