万能的Openhero,请教一个问题,呵呵

vbskj
博客专家认证
2008-12-10 07:34:16
定义一个结构
typedef struct{
float *a;
float *b;
}PARADATA;

1)在host上申请内存
PARADATA *pData = new PARADATA;
2)为pData中的指针成员申请device上的global memory
CUDA_SAFE_CALL(cudaMalloc((void**)&(pData->a),sizeof(float)*4));
CUDA_SAFE_CALL(cudaMalloc((void**)&(pData->b),sizeof(float)*4));
可以成功通过,没问题
3)写一个简单的test
__global__ void test(float *pData,int N)
{
int i = threadIdx.x;
if(i<N)
pData[i]=10.0;

}
4) 启动test
test<<<1,1>>>(a,4);
此时出错,不能实现device内存的写操作

P.S.:本来意图是用host上的结构来管理device上的内存,但是发现申请device内存没问题,但是到了内存使用时就出错。
P.S.: Openhero,你说的cufft是利用device api实现的,但是没看到接口函数啊,这样不还是不能在device上使用么?
...全文
139 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
hhjj881226 2011-01-05
  • 打赏
  • 举报
回复
能不能问一下,为什么这里分配内存需要sizeof(float)*4?
CUDA_SAFE_CALL(cudaMalloc((void**)&(pData->a),sizeof(float)*4));
a和b不都是float类型指针,存的话只要sizeof(float)不久可以了吗?
OpenHero 2008-12-10
  • 打赏
  • 举报
回复
1,2 都没有问题
3,4.那个地方传入的是host的指针,当然就有错了,这里应该传入pData->a;pData->b
cufft的库,你看看,里面有几个库,都是用cuda来实现的,仔细看他的使用手册:)

579

社区成员

发帖
与我相关
我的任务
社区描述
CUDA™是一种由NVIDIA推出的通用并行计算架构,该架构使GPU能够解决复杂的计算问题。 它包含了CUDA指令集架构(ISA)以及GPU内部的并行计算引擎。
社区管理员
  • CUDA编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧