现在要把一个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的,能支持了,该如何修改编译参数呢?谢谢~
你好,这个帖子连接失效了。我也有同样的困惑,核函数中malloc的内存,也需要free吗;核函数中内存分配也同cpu上的堆区栈区同样理解吗;我程序在free的时候出现了too many resources requested for launch,很迷惑呢.