Что заставляет программу openmp запускать некоторые потоки в состоянии D для большого размера набора данных?
Я реализую многопоточную программу 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 и параллельные вычисления несколько месяцев назад, поэтому, пожалуйста, дайте мне знать, в чем могут быть возможные проблемы?