求助如何在__DEVICE__函数中动态分配设备内存?

求助如何在__DEVICE__函数中动态分配设备内存?有大神说Programming Guide里面有,能否告知具体在哪一章节?或者谁有中文版的编程手册求发一份到邮箱,感激不尽!!!

使用很简单:楼主可以直接在device code中使用malloc()即可。

这个需要2.0+的计算能力的支持。

但此函数具体在手册的第几章第几节我记不住了,楼主可以从置顶或者“资源下载”板块获取下载信息。

楼主您好,经过翻看,相关信息在5.0的Programming Guide的B.17章节的115页。请翻看。

好的~已找到~多谢指点,十分感谢!!!

楼主客气了。服务您是我们的荣幸。

再次请教下:我的GPU的计算能力是2.1,为什么会出现如下的错误: error : calling a host function(“malloc”) from a global function(“mallocTest”) is not allowed;是还需要什么设置么还是有什么特别的要注意的?

__host__描述的是主机端(cpu)函数,不能在__global__描述的(设备端)函数中调用。
global__可以调用__device__描述的(设备端子函数)函数。
按照你原来帖子的意图,你应该用__device__替换__host

那个错误的意思是说malloc()是主机端函数,从而不能在设备端函数中调用。我的程序就是编程指导中的例程。

#include<stdlib.h>
#include<stdio.h>

__global__ void mallocTest()
{
  size_t size=123;
  char* ptr = (char*)malloc(size);
  memset(ptr,0,size);
  printf("Thread %d got pointer: %p\n",threadIdx.x,ptr);
  free(ptr);
}

int main()
{
	cudaDeviceSetLimit(cudaLimitMallocHeapSize,128*1024*1024);
	mallocTest<<<1,5>>>();
	cudaDeviceSynchronize();
	return 0;
}

楼主您好,您需要配置您的项目属性为compute_20,sm_21,方可在您的代码里使用它。

而配置方法则如下:
(1)右键点击贵project, 选择属性
(2)在弹出的窗口中,选择CUDA C/C++
(3)选择device
(4)在code generation里改成:compute_20,sm_21
(5)rebuild

请参考如上方式即可轻松使用。

按照您的方法在vs2010中已运行成功,但是我的最终目的是需要将.cu文件编译生成mex文件在matlab中使用,在matlab中编译.cu文件(在设备端函数中运用过malloc())时还是会出现上述的错误,不知该如何解决?

抱歉,我无法对mex/matlab提供支持。目前仅能为普通CUDA项目提供支持。

我建议您咨询其他会员/其他版主/NVIDIA官方代表/总版主。

哦~好的~还是十分谢谢您!