C# 如何在共享内存中分配多个阵列

C# 如何在共享内存中分配多个阵列,c#,gpgpu,aleagpu,C#,Gpgpu,Aleagpu,我正在尝试将为Cudafy编写的内核转换为Alea。Cudafy允许您在共享内存中分配多个不同类型的数组。例如: int[,] paths = thread.AllocateShared<int>("path", 128, 9); float[] best = thread.AllocateShared<float>("best", 128); 在Alea中,您似乎只能在共享内存中分配单个数组。我只看到以下几点: var lp = new LaunchParam(128

我正在尝试将为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的共享内存中分配多个数组?

\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。它不能在内核之外使用。这里有一些例子:

谢谢你。那么,您的意思是,每次调用shared上的方法实际上都会创建一个新的分配?我想这可能会让人困惑,因为它需要在启动期间指定共享内存的数量。该2维的长度必须在编译时确定。当您谈论动态碎片内存时,它是在启动时分配的。需要另一个API共享的ExternArray;,这只支持一维线性内存。如果你需要做2D,你必须自己计算线性地址。请查看动态共享内存使用的示例。\uuuu shared\uuuuy2d实际上是定义一个内核固定大小的数组,它并不意味着任何运行时分配。如果需要外部共享数组,则需要在内核中通过_ushared.ExternArray声明它,然后在LaunchParam中指定共享数组的数量。