1

私は mex 関数を書き、それを実行するたびに、以前の結果を毎回上書きしているにもかかわらず、GPU からますます多くのメモリが失われることに気付きました。問題の原因を突き止めようとして、次のコードを書きました (ファイル名はMexMemoryTrack):

#include "mex.h"
#include "gpu/mxGPUArray.h"

void mexFunction(int nlhs, mxArray *plhs[],
                 int nrhs, mxArray const *prhs[])
{
    mxInitGPU();

    const mxGPUArray * inp=mxGPUCreateFromMxArray(prhs[0]);
    const mxGPUArray * ms=mxGPUCreateFromMxArray(prhs[1]);
    const double * inpPtr=(const double*) mxGPUGetDataReadOnly(inp);
    const double * masksPtr=(const double*) mxGPUGetDataReadOnly(ms);
    mxGPUArray * out=mxGPUCopyFromMxArray(prhs[2]);
    double * outPtr=(double* ) mxGPUGetData(out);
    plhs[0] = mxGPUCreateMxArrayOnGPU(out);
    mxGPUDestroyGPUArray(inp);
    mxGPUDestroyGPUArray(ms);
    mxGPUDestroyGPUArray(out);
}

私はそれを使用して実行します:

foo=gpuArray.zeros([3 3 10000 18]);
foo2=gpuArray.randn([7 7 10000 20]);
foo3=gpuArray.randn([5 5 18 20]);
dumdum=MexMemoryTrack(foo2,foo3,foo);

このコードをループに入れると、すべてのメモリが消えてしまい、「メモリ不足」エラーが発生します。とても簡単です。メモリを割り当て、作成したメモリを破棄します plhs[0] = mxGPUCreateMxArrayOnGPU(out);、そうでないものは破棄すべきではありません。私は上書きしているのでdumdum(唯一のlhs引数)、Matlabは値を上書きするか、値を解放してスペースを再割り当てするのに十分賢いと思いますdumdum. を使用clear dumdumしても機能しません(それが解決策である場合、情報が返されないようにする方法が心配です...)。

何か不足していますか?

コンパイラが問題の原因である可能性はありますか (Visual Studio 2010)? たぶん、Matlab (私は Matlab 2013a を使用しています) ではうまく動作しませんか?

4

2 に答える 2

1

多くのグーグル検索の後、私は最終的に(可能な)解決策にたどり着きました。

これによると、lhs は上書きされないため、コードを複数回呼び出すと、以前の結果のコピーがメモリに残ります。そのためlhs[0]、コードの最初で破棄する必要があります (ただし、最初に何かがあるかどうかを確認する必要があります)。まだ割り当てられていない可能性があるため、破棄します)

現在、MATLAB とグラフィックス カードを搭載したコンピューターにアクセスできないため、これで問題が実際に解決されるかどうかを確認できません。基本的に、(考えられる) 問題は、lhs が上書きされずに再割り当てされることです (実際には驚くことではありませんが、MATLAB によるデータの処理方法を正確に理解していないため、それを推測することはできませんでした) )。

誰かがたまたまこの理論を試してみたら、わかったことを教えてください。

于 2013-08-15T17:36:39.607 に答える
0

いくつかの投稿で

並列計算ツールボックス 2013a で gpuArray を使用する際のメモリ リーク

Matlab 2013a GPU メモリ リーク

次のことが認識されました。

gpuArrayのデータを使用して関数を呼び出すとMATLAB R2013a、MATLAB のメモリ使用量が増加する可能性があります。非常に多数の GPU 関数呼び出しにより、使用可能なメモリが使い果たされ、Out of Memoryまたはが発生する可能性がありますJava heap space error

このバグ レポート ページには、この問題を解決できるパッチが公開されています。このバグは の時点で修正されていMATLAB R2013bます。

于 2013-10-08T21:05:37.420 に答える