在窗口中移动或指定线程堆栈空间

时间:2013-07-05 16:48:37

标签: c++ windows stack numa multiprocessor

我正在NUMA计算机上进行并行编程(我还没有计算机,它计划很快到达)。

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

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

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

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

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

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

1 个答案:

答案 0 :(得分:1)

在MSDN上有关于此的信息非常缺乏,但鉴于我所听到的Mark Russinovich在谈到Windows内存内部时所描述的,我不会担心它,除非我开始看到明显的减速。

在方案中甚至交叉节点内存访问仍然比说...交换到磁盘更快。更重要的是因为内存到活动页面的物理映射与Windows上的内存空间(纯虚拟内存空间)没有关系,内核可能会根据关联性重新映射每个线程的堆栈页面。

我真的不认为这会影响你,如果它已经存在暴露的解决方案,因为很久以前SQL Server团队会遇到它。