我想在内核中执行此操作:
int count[8];
我几乎肯定你可以在CUDA GPU内核中声明固定大小的数组。那么在使用Cudafy时我该怎么做呢?这不起作用:
[Cudafy]
public static void kernelFunction(int[] input, int[] output)
{
int count[8];
// ....other stuff
}
上面的代码导致C#错误:“无法在变量声明中指定数组大小(尝试使用'new'表达式初始化)。”
答案 0 :(得分:2)
根据Cudafy.NET论坛和截至2014年3月20日,目前尚不支持此功能。所以我添加了这个答案,以减轻未来人们徒劳寻找解决方案的麻烦。说明上述内容的主题是here。
请注意,线程中建议正确方法的人是使用共享内存是错误的。你可以在GPU内核中声明固定大小的数组,Cudafy目前不支持它。共享内存用于增加变量的范围,使得块中的所有线程都可以访问它们。当注册表存储空间已满时,它还可充当变量存储的溢出位置。声明共享内存是数组声明的唯一位置是不正确的。
答案 1 :(得分:0)
在C#
中,您可以执行以下操作:
int[] count = new int[8];
如果您使用的是unsafe
代码,您还可以创建fixed size buffers:
fixed int count[8];