首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在AleaGpu中使用10000行和10000 cols的数组?

如何在AleaGpu中使用10000行和10000 cols的数组?
EN

Stack Overflow用户
提问于 2015-10-20 22:30:27
回答 1查看 323关注 0票数 0

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

代码语言:javascript
复制
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);
}

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

我在函数中得到了一个错误:“Alea.CUDA.CUDAInterop.CUDAException类型的未处理异常发生在Alea.CUDA.dll中”:公共静态空集( DeviceMemory dmem,T,array2D):

代码语言:javascript
复制
    dmem.Worker.EvalAction(() =>
        {
            CUDAInterop.cuSafeCall(CUDAInterop.cuMemcpyDtoH(hostPtr, devicePtr,
                new IntPtr(Intrinsic.__sizeof<T>() * rows * cols)));
        });  

如何删除此错误?

EN

回答 1

Stack Overflow用户

发布于 2015-10-21 12:39:39

首先,在CUDAException中有一个枚举字段,所以您可以更好地进行调试以获得CUDA错误。例如,以下代码:

代码语言:javascript
复制
        catch (CUDAInterop.CUDAException x)
        {
            var code = x.Data0;
            Console.WriteLine("ErrorCode = {0}", code);
            Assert.Fail();
        }

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33247936

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档