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



我正在NUMA计算机中进行并行编程(我还没有计算机,计划很快到达™).

我在每个NUMA节点上都有一个工作线程池(带有处理器关联集),还有一个均衡器,它在池/节点之间均匀地分配工作。这是为了确保所有内存分配都在本地内存上。这一切都很好。

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

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

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

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

我的谷歌男孩想出了这个:分配线程';s堆栈在一个特定的NUMA内存上,这正是我想要做的,但它是pthreads,我需要一个windows解决方案。

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

在这种情况下,即使跨节点内存访问也比说的更快。。。交换到磁盘。更重要的是,由于内存到活动页面的物理映射与windows上的内存空间(纯虚拟内存空间)没有关系,内核可能会根据相关性重新映射每个线程的堆栈页面。

我真的不认为这会影响你,如果会的话,就会有一个公开的解决方案,因为SQL Server团队早就遇到了它。

最新更新