exponenta event banner

MEX, генерируемый на платформе macOS, остается загруженным в память

Проблема

При генерации кода MEX на платформе macOS появляется одно из следующих сообщений:

  • Предупреждающее сообщение:

    The generated code contains usage of OpenMP thread private variable.
    This can cause the MEX to remain loaded in the memory.
  • Сообщение об ошибке:

    The MEX file 'foo_mex' is still loaded in memory. 
    To clear the MEX file from memory, close the MATLAB session.

Причина

Код MATLAB ® содержит глобальные или постоянные переменные, доступные из тела parfor-луп. Вот пример функции MATLAB, которая содержит этот шаблон кода.

function y = foo(x)
y = coder.nullcopy(x);
parfor i = 1:numel(x)
    y(i) = x(i) + sub;
end

function y = sub
persistent t;
if isempty(t)
    t = 2;
end
y = t;

При создании функции MEX для foo впервые можно получить предупреждающее сообщение.

При попытке перезаписи созданного MEX путем создания кода для foo снова можно получить сообщение об ошибке.

Решение

При получении предупреждающего сообщения можно использовать сгенерированную функцию MEX.

При получении сообщения об ошибке закройте текущий сеанс MATLAB для сброса функции MEX. foo_mex из памяти. Для перезаписи ранее созданной функции MEX откройте новый сеанс MATLAB и создайте код MEX для foo.

См. также

Связанные темы