如何在Cudafy GPU内核中声明固定大小的数组

How to declare a fixed size array in a Cudafy GPU kernel

本文关键字:数组 声明 Cudafy GPU 内核      更新时间:2023-10-16

我想在内核中这样做:

int count[8];

我几乎肯定你可以在CUDA GPU内核中声明固定大小的数组。那么,在使用Cudafy的时候,我该怎么做呢?这行不通:

[Cudafy]
public static void kernelFunction(int[] input, int[] output)
{
  int count[8];
  // ....other stuff
}

上面的代码导致c#错误:"数组大小不能在变量声明中指定(尝试使用'new'表达式初始化)。"

根据Cudafy。NET论坛和截至2014年3月20日,目前不支持。所以我添加了这个答案,以减轻未来的人从徒劳的寻找一个解决方案。上面所述的线程在这里。

请注意,线程中建议正确使用共享内存的人是错误的。你可以在GPU内核中声明固定大小的数组,Cudafy目前还不支持。共享内存用于增加变量的作用域,以便块内的所有线程都可以访问它们。当注册表存储已满时,它还充当变量存储的溢出位置。声明共享内存是数组声明的唯一位置是不正确的。

C#中,您可以这样做:

int[] count = new int[8];

或者如果你使用unsafe代码,你也可以创建固定大小的缓冲区:

fixed int count[8];