0

私は画像処理プログラムを書いており、OpenCLTemplate を使用して gpgpu と opencl を実装しようとしています。チュートリアルを実行した後、コードを実行する方法を理解しましたが、大きな画像で問題が発生しています。画像をチャンクに分割してコードで実行することでこれを修正しましたが、分割するチャンクの量を設定する代わりに、必要なメモリの最大量を決定し、画像を分割するようにしたいと考えています。コードを実行するための多くの部分。

私が遭遇した問題は、GPUでどれだけのメモリがスローされているか、そしてそれをどのように把握するかが正確にわからないことです。以下は私が使用しているコードです。ここでメモリがどのように処理されているかを説明したり、どこを見ればよいかアドバイスしたりできますか?

私はopencltemplateのドキュメントを調べましたが、役に立たず、どこを見ればよいかわかりません。

CLCalc.Program.Compile(openCLInvert);
CLCalc.Program.Kernel kernel = new CLCalc.Program.Kernel("Filter");
CLCalc.Program.Variable CLData = new CLCalc.Program.Variable(Data);

float[] imgProcessed = new float[Data.Length];

CLCalc.Program.Variable CLFiltered = new CLCalc.Program.Variable(imgProcessed);
CLCalc.Program.Variable[] args = 
    new CLCalc.Program.Variable[] { CLData, CLFiltered };

int[] test = new int[] { imageData.Width, imageData.Height };

float size = 0;
for (int x = 0; x <= 1; x++)
{
    size += args[x].Size;
}

kernel.Execute(args, test);
CLCalc.Program.Sync();

上記のように、引数として使用されているサイズの量を見つけることができますが、合計メモリ使用量はまだわかりません。

4

1 に答える 1

0

アプリケーションで使用されているメモリの量は、Data変数のサイズに変数のサイズを加えたものになりimgProcessedます。

したがって、アプリケーションで使用されるデータの量は次のようになります。

sizeof(float) * imgProcessed.length + sizeof(typeof(Data)) * Data.length

これは、次のような電話をかけると、すべてのデータがデバイスに割り当てられるためです。

CLCalc.Program.Variable CLData = new CLCalc.Program.Variable(Data);

この場合、データ配列全体がデバイスメモリに書き込まれています。

于 2012-10-09T17:29:33.363 に答える