c++ - CUDA 全局内存

标签 c++ cuda

这是我的代码

 #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;

它不起作用。请给出一些代码示例..

最佳答案

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

// 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 );

希望这对您有所帮助。

关于c++ - CUDA 全局内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6465575/

相关文章:

c++ - 使用 Qt 时如何打印到控制台

c++ - GPU 设备函数如何访问主机函数中定义的类对象?

c++ - 使用 CUDA 的 Thrust 库进行数组缩减

java - 在 Java 中运行工作 CUDA 代码的最简单方法是什么?

c++ - 如何在不使用原子的情况下同步 CUDA 中的线程

c++ - 虚拟表内存位置

c++ - 关于调试,多线程的面试题

cuda - OpenCL:NVIDIA GPU 上的 clAmdFft(来自 AMD 的 OpenCL FFT 库)

c++ - 将数组传递给 Cuda

c++ - gmock 多个模拟实例,但只有一个有效