【问题标题】:CUDA global memoryCUDA 全局内存
【发布时间】:2011-06-24 08:57:35
【问题描述】:

这是我的代码

 #include "stdafx.h"
  #include <iostream>
   using namespace std;

  #define n 10
  __device__ int glMem[n];

  __global__ void initVals()
  {
for(int i=0;i<n;i++)
    glMem[i] = 0;
 }

 __global__ void test(int *out)
{
for(int i=0;i<n;i++)
    out[i] = 10;
}

int main()
{
const size_t sz = size_t(n)*sizeof(int);
initVals<<<1,1>>>();
int *devMem;
cudaMalloc((void **)&devMem, sz);
test<<<1, 1>>>(devMem);
int *hoMem=new int[n];
cudaMemcpy(hoMem, devMem,sz, cudaMemcpyDeviceToHost);

//print
for(int i=0;i<n;i++)
    cout<<hoMem[i]<<endl;
return 0;
}

在这段代码中我定义了

glMem

大小为 n。如果我不知道之前的尺寸,我可以定义吗? 例如我需要这样定义。

__device__ int *glMem;

它不起作用。请提供一些代码示例..

【问题讨论】:

  • 请详细说明您的配置:设备生成和CUDA框架版本

标签: c++ cuda


【解决方案1】:

在这种情况下,您需要将内存分配到设备中。

// size of data
unsigned int size_of_glMem = n * sizeof(int);
// allocate device memory for result
int* glMem = NULL;
cudaMalloc( (void**) &glMem, size_of_glMem );

希望对您有所帮助。

【讨论】:

  • 感谢您的回复。我试过了,但它不起作用..当我调用函数测试时,它会给出一些随机数。
  • 随机值是什么意思?您的代码作为例外工作。它打印数字“10”十次。
  • 是的,我的代码工作正常,但是当我定义像 device 这样的数组时 int *glMem;并分配它不起作用的内存。给出错误的结果..
  • Ops,你不能动态分配设备内存。您需要定义您的设备指针 int *glMem 并在 CPU 中为其分配内存。是这样吗?
猜你喜欢
  • 2012-06-05
  • 1970-01-01
  • 2020-08-17
  • 2013-11-09
  • 1970-01-01
  • 2012-06-26
  • 2014-01-10
相关资源
最近更新 更多