1

В моем проекте у меня много функций MATLAB. Для каждой функции я вызываю функцию Initialize, когда приложение запускается. Я попытался вызвать эти функции, используя parallel_invoke. Я пробовал это несколько раз, и все это требует больше времени, этот код без этого. Может ли кто-нибудь объяснить это? Есть ли что-то конкретное в функциях MATLAB или Initialize?Функции Matlab и parallel_invoke

+0

Ваш вопрос непонятен. Вы работаете с библиотекой Intel TBB на C++? как вы интегрируетесь с MATLAB? – Amro

+0

Какой parallel_invoke? МИЗ? TBB? Некоторый код может помочь. – doctorlove

ответ

1

В Matlab Runtime имеется только один поток интерпретатора, поэтому параллельное использование функций Matlab не приносит вам ничего: когда вызывается первая функция A, MCR получает блокировку и освобождает ее только после выхода этой функции. Вызов другой функции B в течение этого периода приводит к попытке получить блокировку, которая затем, очевидно, просто блокируется до тех пор, пока не закончится A. Причина, по которой вы видите, что она занимает больше времени, вероятно, связана с накладными расходами на блокировку/parallel_invoke.

Я не уверен, что вы имеете в виду с для каждой функции я вызываю функцию Инициализировать: если вы не используете несколько библиотек в Matlab (который будет AFAIK менее производительным, чем с одного DLL) вам нужно только позвонить его инициализировать/Завершить один раз.

+1

+1 имеет смысл теперь, что означало OP под «инициализацией функций». Вот какой контекст для других, не знакомых с компилятором MATLAB: http://blogs.mathworks.com/loren/2011/02/03/creating-c-shared-libraries-and-dlls/ и [комментарий] (http: //blogs.mathworks.com/loren/2011/02/03/creating-c-shared-libraries-and-dlls/#comment-32017) от Питера Вебба, подтверждающего этот факт об использовании семафоров для блокировки. – Amro

+0

Я использую C++ в Visual Studio 2010 – user1913557

Смежные вопросы