【发布时间】:2014-05-13 16:16:40
【问题描述】:
在这个应用程序中,我有一组 N (POSIX) 线程。第一组开始,创建一个对象 A,然后结束。稍后,一个具有 N 个线程的新组启动,使用 A 创建一个类似的对象 B,然后结束。这种模式是重复的。该应用程序是高度内存密集型的(A 和 B 有大量 malloc'ed 数组)。我希望尽可能地在本地访问内存。我可以使用numactl --localalloc 来实现这一点,但为了让它工作,我还需要确保第一组和第二组中处理相同数据的线程绑定到同一个NUMA 节点。我研究了sched_setaffinity,但想知道是否存在更好的方法。
应用程序的逻辑使得没有单独线程组的解决方案会破坏程序逻辑。也就是说,单组线程管理第一个对象 A 和后来的对象 B(中间没有结束)的解决方案将是非常人为的,并且会消除代码的面向对象布局。
【问题讨论】:
标签: multithreading memory-management pthreads numactl