В моем проекте у меня много функций MATLAB. Для каждой функции я вызываю функцию Initialize при запуске приложения. Я попытался вызвать эту функцию с помощью parallel_invoke. Я пробовал это несколько раз, и все это занимает больше времени, этот код без этого. Может кто-нибудь объяснить это?
Есть ли что-то конкретное в функциях MATLAB или Initialize?
Matlab Runtime имеет только один поток интерпретатора, поэтому параллельный вызов функций Matlab ничего не дает: когда вызывается первая функция A, MCR получает блокировку и снимает ее только при выходе из этой функции. Вызов другой функции B в течение этого периода приводит к попытке установить блокировку, которая, очевидно, просто блокируется, пока не завершится A. Причина, по которой вы видите, что это занимает больше времени, вероятно, из-за накладных расходов блокировки / parallel_invoke.
Я не уверен, что вы имеете в виду для каждой функции я вызываю функцию Initialize: если вы не используете несколько dll-файлов Matlab (которые на самом деле будут менее производительными, чем наличие одной dll), вам нужно будет только назвать их Initalize / Terminate один раз.
Других решений пока нет …