小编Mih*_*hon的帖子

全局内核中的CUDA变量

我的问题是:

1)我理解正确,当你在全局内核中声明一个变量时,每个线程都会有不同的变量副本.这允许您为每个线程在此变量中存储一些中间结果.示例:vector c = a + b:

__global__ void addKernel(int *c, const int *a, const int *b)
{
   int i = threadIdx.x;
   int p;
   p = a[i] + b[i];
   c[i] = p;
} 
Run Code Online (Sandbox Code Playgroud)

这里我们声明中间变量p.但实际上这个变量有N个副本,每个副本用于每个线程.

2)是否为真,如果我将声明数组,将为每个线程创建此数组的N个副本?只要全局内核中的所有内容都发生在gpu内存上,对于声明的任何变量,你需要在gpu上多花费n倍的内存,其中N是你的线程数.

3)在我当前的程序中,我有35*48 = 1680个块,每个块包括32*32 = 1024个线程.这是否意味着,在全局内核中声明的任何变量将花费我N = 1024*1680 = 1 720 320倍于内核之外?

4)为了使用共享内存,我需要比每个变量多M倍的内存.这里M是数.真的吗?

c++ memory cuda

2
推荐指数
1
解决办法
1745
查看次数

Cpp中的内存问题

我有几个问题:

1)当我静态分配1 000 000 int的数组时,我得到了堆栈溢出错误:

int temp1[48][48];
int im2 [1000000];
int step = 8;
int lcol, lrow;
....
Run Code Online (Sandbox Code Playgroud)

虽然,1000000*sizeof(int)=4 000 000<4 Mb.我有大约8 GB的RAM.

2)当我使用动态分配(new和Malloc函数)并忘记删除我的内存时会发生什么?我未来的编辑是否会受到过去汇编中内存泄漏的影响?

3)如果是,我该如何解决?我应该关闭并打开visual studio,还是我必须重启我的电脑?

4)如果我正确地使用动态分配和相应的删除操作,但我在调试模式下工作(逐步编译)并且我编译了"new"命令并且没有编译"删除"命令,是否会出现内存泄漏?

c++ memory

1
推荐指数
1
解决办法
74
查看次数

标签 统计

c++ ×2

memory ×2

cuda ×1