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.

Смотрите также

Похожие темы