1

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

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

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

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

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

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

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

4

1 回答 1

1

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

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

我真的不认为这会影响你,如果它已经有一个公开的解决方案,因为 SQL Server 团队很久以前就会遇到它。

于 2013-07-05T17:06:15.533 回答