Matlab порождает слишком много потоков

Итак, я работаю в кластере Linux с большим количеством вычислительных узлов на выбор. Я получаю эксклюзивное право на использование узла. Пакетные подачи. Я сталкиваюсь с проблемами, ограничивающими количество потоков. Я должен упомянуть, что у меня есть петля parfor. Когда я запускаю Matlab с параметром -singleCompThread, похоже, он не работает.

Я отправил узел с 2 ядрами, использовал упомянутую опцию одного потока, и когда я проверяю отправленное задание, оно начинает работать с 32 потоками. Как только он попадает в цикл parfor, он имеет более 600 потоков.

Я также хочу работать с определенным количеством нескольких потоков, а не с одним потоком. Итак, я использую функцию maxNumCompThreads(32); ограничить до 32 потоков. Я поместил эту функцию в начало файла, а также прямо внутри цикла parfor. Затем я отправляю задание на узел с 32 ядрами. Он использует более 32 потоков.

Любое руководство? Понятия не имею.


person whoami    schedule 02.02.2021    source источник
comment
«так много потоков все еще порождается и вызывает перегрузку» Перегрузка вызвана чрезмерным использованием памяти, а не чрезмерным использованием потоков. Потоки разделяют память. Возможно, вы говорите о процессах MATLAB, а не о потоках? Вы создаете рабочих MATLAB в своем цикле parfor? Или вы настраиваете его для многопоточности?   -  person Cris Luengo    schedule 02.02.2021
comment
Вы правы, без рывков. Я настраиваю его для многопоточности, я не создаю рабочих внутри parfor.   -  person whoami    schedule 02.02.2021
comment
И вы настроили его на выполнение 32 потоков, когда у вас всего два ядра?   -  person Cris Luengo    schedule 02.02.2021
comment
О нет, в таком случае я поставил его на ноду с 32 ядрами. Хорошо, я сейчас в интерактивном сеансе, матлаб работает, подтянул htop. Я нахожусь на 16-ядерной машине, настроил matlab на использование maxCompThreads (16) и настроил parfor на использование максимум 16 потоков. Узел говорит, что работает только один поток. Но я вижу гораздо больше, чем 16 процессов Matlab в htop, и только 1 поток работает, иногда   -  person whoami    schedule 03.02.2021
comment
Более 16 процессов MATLAB? Я вижу только один на своей машине, и, насколько мне известно, больше не должно быть (хотя я могу устареть в этой концепции?). Если вы видите несколько процессов, возможно, вы либо (1) запускаете много заданий MATLAB одновременно, либо (2) настраиваете свой параллельный пул на такое количество рабочих процессов.   -  person Cris Luengo    schedule 03.02.2021
comment
Журнал Matlab требует 12 рабочих. Пожимайте плечами. Это кажется чем-то вроде тупика, поэтому я собираюсь продолжать устранять неполадки в одиночку. Я очень ценю ваш вклад. Это помогло.   -  person whoami    schedule 03.02.2021


Ответы (1)


Вполне может быть, что вы видите не вычислительные потоки, используемые MATLAB. Вы можете попробовать запустить MATLAB в режиме -nojvm — это еще больше уменьшит количество запускаемых потоков, не связанных с вычислениями. К сожалению, этот режим несовместим с parfor. Кроме того, какую версию MATLAB вы используете? (Раньше были проблемы со старыми выпусками, порождающими множество потоков сборки мусора JVM на машинах с большим количеством ядер)

person Edric    schedule 02.02.2021
comment
2018б. Хорошо, спасибо, через некоторое время мне нужно будет перейти к интерактивному узлу и посмотреть на количество потоков там. - person whoami; 02.02.2021
comment
Хорошо, я сейчас в интерактивном сеансе, матлаб работает, подтянул htop. Я нахожусь на 16-ядерной машине, настроил matlab на использование maxCompThreads (16) и настроил parfor на использование максимум 16 потоков. Узел говорит, что работает только один поток (так что вы были правы, многие потоки просто не используются). Но я вижу гораздо больше, чем 16 процессов Matlab в htop и только 1 поток. - person whoami; 03.02.2021
comment
В этом сценарии у вас должно быть 16 вычислительных потоков, связанных с основным процессом MATLAB, и по одному вычислительному потоку для каждого из 16 рабочих MATLABS (если только вы не изменили настройки, чтобы эти рабочие процессы выполнялись в многопоточном режиме). Это должно дать вам 17 полных процессов MATLAB, как сообщает ps -C MATLAB. - person Edric; 03.02.2021