Запуск приложений мультипроцесса от MATLAB

Я записал multitprocess приложение в VC ++ и попытался выполнить его с параметрами командной строки с system команда от MATLAB. Это работает, но только на одном ядре---какие-либо предложения?

Факт Update:In, это даже не видит второе ядро. Я использовал OpenMP и использовал omp_get_max_threads() и omp_get_thread_num() проверять и omp_get_max_threads() кажется, 1 когда я выполняю приложение от MATLAB, но это 2 (как ожидается), если я выполню его из командного окна.

Диспетчер задач Question:My сообщает, что использование ЦП близко к 100%---, это могло означать, что вышеупомянутый API неправильно функционирует, это все еще работает как приложение мультипроцесса?

Подтверждение:

Я использовал Проводник Процесса, чтобы проверить, были ли какие-либо различия в количестве потоков.

Когда я называю приложение из командного окна, 1 поток переходит в cmd.exe и 2 перейдите к моему приложению.

Когда я называю его от MATLAB, 26 потоки для MATLAB.exe, 1 для cmd.exe и 1 для моего приложения.

Какие-либо идеи?

5
задан Jacob 13 April 2010 в 14:26
поделиться

3 ответа

Вопрос в том, как Matlab влияет на поведение вашего приложения, поскольку это отдельный процесс. Я подозреваю, что Matlab изменяет переменные среды таким образом, чтобы это влияло на OMP, возможно, потому, что он использует OMP внутри, а процесс, который вы порождаете из Matlab, наследует эту измененную среду.

Сделайте «set> plain.txt» из командного окна, в котором вы запускаете приложение, и «system ('set> from_matlab.txt')» из Matlab, и сравните результаты. Это покажет вам различия в переменных среды, которые вводит Matlab. Когда я это делаю, это появляется в среде, унаследованной от Matlab, но не в среде простого командного окна.

OMP_NUM_THREADS=1 

Похоже, настройка OpenMP связана с вызовами функций в вашем вопросе. Готов поспорить, ваше созданное приложение это видит и уважает.

Я не знаю, почему Matlab это устанавливает. Но в качестве обходного пути, когда вы запускаете приложение из Matlab, вместо того, чтобы вызывать его напрямую, вызовите файл оболочки .bat, который очищает переменную среды OMP_NUM_THREADS или устанавливает для нее более высокое число.

7
ответ дан 14 December 2019 в 04:33
поделиться

Запустите команду вне Matlab и посмотрите, сколько ядер она использует. Не должно быть никакой разницы, запускать его из Matlab, потому что это просто вызов операционной системы. IE. эквивалент из командной строки.

РЕДАКТИРОВАТЬ

Хорошо, странно, что вы получаете, когда вызываете функцию ('NumCores') ? Какую версию Matlab вы используете?

Это помогает?

Hosted by imgur.com

1
ответ дан 14 December 2019 в 04:33
поделиться

вы должны выполнить в командной строке MATLAB:

setenv OMP_NUM_THREADS 4

, если вы хотите использовать 4 потока.

0
ответ дан 14 December 2019 в 04:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: