一个kernel里面可以定义多个动态的共享内存的数组吗?

一个kernel里面可以定义多个动态的共享内存的数组吗?

kernel里面不能直接动态分配shared memory,但是可以在调用kernel的时候通过指定shared memory大小来动态分配!在kernel内部可以用偏移的方式来确定每个数组在shared memory的大小,比如:
extern shared float a;
global void myKernel()
{
float *array0 = a;
float *array1 = a[128];
}

这样的话,array0就得到了128个大小的float,而array1则得到剩下的部分!

版主你好,我现在遇到同样的问题。但是有点不同的是我在kernel里面确定的数组大小是和输入的参数有关系的。比如我在内核里面需要6个大小为M的共享数组。我现在是直接动态申请的大小为6*M的数组,通过下标就行访问,但是感觉这样容易出错。想通过您说的方法来做,但是发现因为每个数组大小是不定的,而在kernel里面又不能直接动态分配,像这种情况应该怎么办?谢谢

您好:

请勿挖坟!

您有具体问题欢迎开新帖具体讨论。

关于kernel内部的动态大小的shared memory
1:在kernel内声明为 extern shared dog;
2:在启动kernel的时候通过<<<>>>中的参数指定大小。
3:只能申请一个这样的数组,但您可以灵活地分段使用。
4:shared memory是有限的,请注意使用量。

大致如此,供您参考。

此挖坟贴将被做下沉处理,请您不要再次顶贴。

如有进一步讨论兴趣,请发新帖具体叙述问题并讨论。

祝您好运~