我们如何使用 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 卡的内存有限,我们需要使用 Single/Int16/Int32 而不是 double。我试过了 :
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 ?