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

0 ответов

Другие вопросы по тегам