【问题标题】:How can we use array of 10000 rows and 10000 cols with AleaGpu?我们如何在 AleaGpu 中使用 10000 行和 10000 列的数组?
【发布时间】:2015-10-20 22:30:27
【问题描述】:

我们如何在 AleaGpu 中使用 10000 行和 10000 列(而不是行 =10 和行 =5)的数组?

private void button3_Click(object sender, EventArgs e)
{
    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);
}

如果我使用 rows = 10000 和 cols = 10000(而不是 rows =10 和 rows =5):

我在函数中收到错误“Alea.CUDA.dll 中发生类型为 'Alea.CUDA.CUDAInterop.CUDAException' 的未处理异常”:public static void Gather(this DeviceMemory dmem, T[,] array2D):

    dmem.Worker.EvalAction(() =>
        {
            CUDAInterop.cuSafeCall(CUDAInterop.cuMemcpyDtoH(hostPtr, devicePtr,
                new IntPtr(Intrinsic.__sizeof<T>() * rows * cols)));
        });  

如何消除此错误?

【问题讨论】:

    标签: c# gpgpu aleagpu


    【解决方案1】:

    首先,CUDAException 中有一个枚举字段,因此您可以更好地调试以了解它是什么 CUDA 错误。如以下代码:

            catch (CUDAInterop.CUDAException x)
            {
                var code = x.Data0;
                Console.WriteLine("ErrorCode = {0}", code);
                Assert.Fail();
            }
    

    现在,我用 10000x10000 矩阵运行它,我得到错误:CUDA_ERROR_LAUNCH_FAILED。原因是内核无法执行,因为您正在一个线程中迭代一个大矩阵。我创建这个测试只是为了简单地展示如何使用 2d 数组,但如果你正在做一些真正的大事,请避免使用如此简单的内核,并在 1 个线程中执行它!这会导致内核运行时间过长,最后CUDA驱动发现运行时间过长,驱动会杀掉这个内核执行。所以设计一个新的真正的并行内核来迭代大矩阵。

    【讨论】:

    • 非常感谢您的回答,我遇到了同样的问题,增加并行性确实为我解决了问题!
    猜你喜欢
    • 2020-02-09
    • 2014-09-22
    • 2019-01-26
    • 2021-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-09
    • 1970-01-01
    相关资源
    最近更新 更多