我正在以下机器上实现一个 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% 大大低于99-100%
. 请注意,对于达到此大小的数据大小,每个线程都在R state CPU% ~100%
. 运行时间成为~100
顺序情况的数倍。
空闲内存似乎可用,swp
所有情况下的内存都是 0。
关于使用的数据结构,有 3 个共享数据结构大小 O(n),然后每个线程创建其私有链表,存储该链表以进一步合并步骤。我怀疑这是因为每个线程数据结构使用了额外的内存,但即使我将它注释掉,程序也会显示同样的问题。请让我知道我是否应该提供更多详细信息。
几个月前我才开始学习 OpenMP 和并行计算,所以请告诉我可能会出现什么问题?