我的问题是:
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是块数.真的吗?
我有几个问题:
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"命令并且没有编译"删除"命令,是否会出现内存泄漏?