用户
 找回密码
 立即注册
cobralw 该用户已被删除
发表于 2013-9-16 13:39:17
228559
现在要把一个CPU端的图像滤波方法改为GPU端,算法中间有个步骤需要申请一个动态数组,请问在核函数中能否申请动态内存?(感觉每个线程都同时申请的话显存空间可能不够)
使用道具 举报 回复
发表于 2013-9-16 13:51:05
楼主您好,

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

感谢来访。
使用道具 举报 回复 支持 反对
发表于 2013-9-16 13:59:56
玫瑰幻想 发表于 2013-9-16 13:51
楼主您好,

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

版主你好!静态的意思是 如果数组的大小是我在核函数中计算出来的值就不行么?
使用道具 举报 回复 支持 反对
发表于 2013-9-16 14:05:13
稍微补充一下2#玫瑰斑竹

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

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

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

大致补充如此,祝您好运~
使用道具 举报 回复 支持 反对
发表于 2013-9-16 14:26:35
cobralw 发表于 2013-9-16 13:59
版主你好!静态的意思是 如果数组的大小是我在核函数中计算出来的值就不行么? ...

LZ您好:

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

给您带来误解深表歉意。

祝您编码顺利~
使用道具 举报 回复 支持 反对
发表于 2013-9-16 16:11:25
ice 发表于 2013-9-16 14:26
LZ您好:

那个是玫瑰斑竹笔误了,是动态数组的,动态数组的大小可以是您现场算出来的某个值。

版主你好!我在核函数中使用了malloc,编译的时候报错:
error : calling a __host__ function("malloc") from a __global__ function("filterKernel") is not allowed
这是为什么呢?
使用道具 举报 回复 支持 反对
发表于 2013-9-16 16:13:58
cobralw 发表于 2013-9-16 16:11
版主你好!我在核函数中使用了malloc,编译的时候报错:
error : calling a __host__ function("malloc") ...

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

祝您好运~
使用道具 举报 回复 支持 反对
发表于 2013-9-16 16:25:07
ice 发表于 2013-9-16 16:13
您需要修改编译参数设置,因为该能力仅在2.0或者更高的计算能力版本的的GPU上提供。

祝您好运~ ...

我的卡是2.1的,能支持了,该如何修改编译参数呢?谢谢~
使用道具 举报 回复 支持 反对
发表于 2013-9-16 16:45:14
cobralw 发表于 2013-9-16 16:25
我的卡是2.1的,能支持了,该如何修改编译参数呢?谢谢~

LZ您好:

请参阅如下帖子:

http://cudazone.nvidia.cn/forum/ ... thread&tid=6658

使用道具 举报 回复 支持 反对
发表于 2021-3-4 09:56:56
ice 发表于 2013-9-16 16:45
LZ您好:

请参阅如下帖子:

你好,这个帖子连接失效了。我也有同样的困惑,核函数中malloc的内存,也需要free吗;核函数中内存分配也同cpu上的堆区栈区同样理解吗;我程序在free的时候出现了too many resources requested for launch,很迷惑呢.
使用道具 举报 回复 支持 反对
发新帖
您需要登录后才可以回帖 登录 | 立即注册