我正在以下机器上实现一个OpenMP多线程程序。
x86_64, On-line CPU(s) list: 0-23
Thread(s) per core: 2
Core(s) per socket: 6
Socket(s): 2
这是一个多线程群集程序。它显示数据集大小达到2 mil rows
~ 250 MB data
的预期加速,但在对较大数据集进行测试时,htop
中的许多线程显示D state
且CPU%显着低于{{1 }}。请注意,对于大小达到此大小的数据,每个线程都在99-100%
中运行。运行时间比连续情况多R state CPU% ~100%
倍。
可用内存似乎可用,~100
内存为0。
关于使用的数据结构,有3个共享数据结构大小为O(n),然后每个线程创建其私有链表,该列表被存储用于进一步合并步骤。我怀疑它是因为每个线程数据结构使用了额外的内存,但即使我将其注释掉,程序显示同样的问题。如果我应该提供更多细节,请告诉我。
我几个月前才拿起OpenMP和并行计算,所以请让我知道可能出现的问题是什么?