1

AleaGpu を使用して配列の GPU メモリを解放するにはどうすればよいですか? (GPU カード上)

関数/サブ内で、配列 dOutputs、dInputs の GPU メモリを解放したい場合、どうすればよいですか?

1/ 「dOutputs.Dispose (); dInputs.Dispose ( ) ;」GPUメモリを解放しますか?

2/ GPU 用の「GC.Collect()」は存在しますか? それは必要ですか ?

3/ AleaGpu では、GPU メモリを完全に解放するコマンドはありますか?

    private void button3_Click(object sender, EventArgs e)
    {
        textBox3.Text = "";
        var worker = Worker.Default;
        const int rows = 10;
        const int cols = 5;
        var rng = new Random();
        var inputs = new double[rows, cols];
        for (var row = 0; row < rows; ++row)
        {
            for (var col = 0; col < cols; ++col)
            {
                inputs[row, col] = rng.Next(1, 100);
            }
        }
        var dInputs = worker.Malloc(inputs);
        var dOutputs = worker.Malloc<double>(rows, cols);
        var lp = new LaunchParam(1, 1);
        worker.Launch(Kernel, lp, dOutputs.Ptr, dInputs.Ptr, rows, cols);
        var outputs = new double[rows, cols];
        dOutputs.Gather(outputs);
        Assert.AreEqual(inputs, outputs);
        dOutputs.Dispose();
        dInputs.Dispose();" 
    }

3/ GPU カードのメモリは限られているため、double の代わりに Single/Int16/Int32 を使用する必要があります。私は試した :

       var inputs = new Single[rows, cols];
       var dOutputs = worker.Malloc<Single>(rows, cols);
       var inputs2 = new Int16[rows, cols];

しかし

       worker.Launch(Kernel, lp, dOutputs.Ptr, dInputs.Ptr, rows, cols);

取らないでください。「無効な引数があります」というエラーが表示されます。

worker.Launch(Kernel, lp, ...) に Int16,Int32 と single を持たせるにはどうすればよいですか?

4

2 に答える 2

0

GPU で定義をオーバーロードできます。これは素晴らしいです。CPU 上の通常のコードと同様に、GPU 上の同じ関数に対して複数の定義を持つことができます。

"using" でループをコーディングすることで、ループから抜けた時点で GPU 上のメモリを解放しています。優秀な !!!!!

ありがとうございました

于 2015-10-22T11:20:48.127 に答える