【问题标题】:How to allocate multiple arrays in shared memory如何在共享内存中分配多个数组
【发布时间】:2015-11-05 17:45:32
【问题描述】:

我正在尝试将为 Cudafy 编写的内核转换为 Alea。 Cudafy 允许您在共享内存中分配多个不同类型的数组。示例:

int[,] paths = thread.AllocateShared<int>("path", 128, 9);
float[] best = thread.AllocateShared<float>("best", 128);

似乎在 Alea 中,您只能在共享内存中分配一个数组。我只看到以下内容:

var lp = new LaunchParam(128, 128, 1024);
...
int[,] paths = __shared__.Array2D<int>(128, 9);

我错过了什么吗?有没有办法在 Alea 的共享内存中分配多个数组?

【问题讨论】:

    标签: c# gpgpu aleagpu


    【解决方案1】:

    __shared__.Array2D 在内核中用于定义编译时固定大小的二维数组。它不能在内核之外使用。以下是一些示例:https://github.com/quantalea/AleaGPUTutorial/blob/master/src/csharp/examples/matrix_multiplication/MatrixMult.cs#L52

    【讨论】:

    • 谢谢翔。那么,您的意思是在 shared 上调用方法实际上每次都会创建一个新的分配?我想这很令人困惑,因为它需要在启动期间指定共享内存量。
    • __shared__.Array2D 用于创建编译时固定大小的数组。该二维的长度必须在编译时确定。当您谈论动态分片内存时,它是在启动时分配的。这需要另一个 API __shared__.ExternArray&lt;T&gt;();,并且只支持一维线性内存。如果你需要做2D,你必须自己计算线性地址。请查看here 获取动态共享内存使用示例。
    • __shared__.Array2D 实际上是定义一个内核固定大小的数组,并不意味着任何运行时分配。如果您需要外部共享数组,您需要通过__shared__.ExternArray 在内核中声明它,然后在LaunchParam 中指定共享数组的数量。
    猜你喜欢
    • 1970-01-01
    • 2019-09-21
    • 2015-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-09
    • 2013-05-26
    相关资源
    最近更新 更多