Main Content

macOS プラットフォームで生成された MEX がメモリに読み込まれたままの状態になる

問題

macOS プラットフォームで MEX コードを生成するときに、次のいずれかのメッセージを受け取ります。

  • 警告メッセージ:

    生成コード内の OpenMP スレッドがプライベート変数を使用しています。
    これにより、MEX がメモリに読み込まれたままになる可能性があります。
  • エラー メッセージ:

    MEX ファイル 'foo_mex' はまだメモリに読み込まれています。 
    MEX ファイルをメモリからクリアするには、MATLAB セッションを閉じてください。

原因

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;

foo の MEX 関数をはじめて生成する際に、警告メッセージを受信する可能性があります。

foo のコードを再度生成することで生成した MEX を上書きしようとすると、エラー メッセージを受信する可能性があります。

解決法

警告メッセージを受信しても、生成された MEX 関数を使用できます。

エラー メッセージを受信した場合、現在の MATLAB セッションを閉じることで MEX 関数 foo_mex をメモリからクリアします。以前に生成した MEX 関数を上書きするには、新しい MATLAB セッションを開いて、foo の MEX コードを生成します。

参考

関連するトピック