【发布时间】:2014-03-13 18:53:20
【问题描述】:
我正在尝试让在 Linux 上运行的代码也可以在我的 Windows 7 上运行。
当我重试相同的代码时,它因堆栈溢出而崩溃。然后我删除了所有我能找到的导致它崩溃的行,它给我留下了这个:
#include <stdio.h>
#include <stdlib.h>
#include <cuda_runtime.h>
/* 256k == 2^18 */
#define ARRAY_SIZE 262144
#define ARRAY_SIZE_IN_BYTES (sizeof(float) * (ARRAY_SIZE))
int main(void)
{
float a[ARRAY_SIZE] = { };
float result = 0;
printf("sum was: %f (should be around 1 300 000 with even random distribution)\n", result);
return 0;
}
如果我将 ARRAY_SIZE 更改为 256,代码运行良好。但是,对于当前值,float a[ARRAY_SIZE] 行会因堆栈溢出而导致运行时崩溃。无论我使用float a[ARRAY_SIZE]; 还是float a[ARRAY_SIZE] = { };,它们都以相同的方式崩溃。
有什么想法可能是错的吗?
使用 Visual Studio 2010 进行编译。
好的,堆栈大小似乎解释了here,说 1M 是 Windows 上的默认值。
显然,它可以在 VS 2010 中通过转到 Properties -> Linker -> System -> Stack Reserve Size 并给它更多一些来增加。我进行了测试,代码通过将堆栈提升到 8M 来工作。
从长远来看,我可能应该走 malloc 的方式。
【问题讨论】:
-
我的猜测是您的堆栈太小,无法容纳 256K
floats。 -
我认为这与 CUDA 无关。
-
是的,可能不是。我可以删除引用。