核函数中能否申请动态数组?

现在要把一个CPU端的图像滤波方法改为GPU端,算法中间有个步骤需要申请一个动态数组,请问在核函数中能否申请动态内存?(感觉每个线程都同时申请的话显存空间可能不够)

楼主您好,

在kernel中可以使用malloc()动态的分配普通的静态数组。

感谢来访。

版主你好!静态的意思是 如果数组的大小是我在核函数中计算出来的值就不行么?

稍微补充一下2#玫瑰斑竹

1:在kernel中申请动态内存需要2.0或者更高的计算能力的 GPU支持。

2:默认申请的大小是有限值的,该限值可以更改。

3:您需要自行保证您的显存是够用的,以及您可以限制其中的部分线程执行此操作。

大致补充如此,祝您好运~

LZ您好:

那个是玫瑰斑竹笔误了,是动态数组的,动态数组的大小可以是您现场算出来的某个值。
用法和C中的malloc()基本一致,其他限制详见programming guide。

给您带来误解深表歉意。

祝您编码顺利~

版主你好!我在核函数中使用了malloc,编译的时候报错:
error : calling a host function(“malloc”) from a global function(“filterKernel”) is not allowed
这是为什么呢?

您需要修改编译参数设置,因为该能力仅在2.0或者更高的计算能力版本的的GPU上提供。

祝您好运~

我的卡是2.1的,能支持了,该如何修改编译参数呢?谢谢~

LZ您好:

请参阅如下帖子:

http://cudazone.nvidia.cn/forum/forum.php?mod=viewthread&tid=6658

你好,这个帖子连接失效了。我也有同样的困惑,核函数中malloc的内存,也需要free吗;核函数中内存分配也同cpu上的堆区栈区同样理解吗;我程序在free的时候出现了too many resources requested for launch,很迷惑呢.