我是新手,对于高性能计算
一窍不通。这是我在这个论坛上的第一个问题,虽然我已经是读者很长时间了。
基本上,我需要对非常大的数组进行算术运算,例如:
double variable [9][4][300][300][300] (uninitialized)
情况 1:如果我将上面的数组声明为局部/自动变量
,并且像"g++ file.cpp
"一样没有进行优化,那么运行时会出现错误(错误是分段故障--堆栈溢出?)。
情况 2:在与上述情况相同的情况下,如果我编译优化,则代码按预期运行。"g++ -O2 file.cp
p"(array
现在在中吗?)。
情况 3:如果我将变量设为全局/静态
,则编译可以通过,但仍然无法运行,并在终端上显示一个"killed
"消息后终止。实际上并没有问题,但我很好奇,想知道当声明极大的数组时会发生什么,取决于它们的数据类型它们存储在内存中的位置。
我也知道使用malloc或new在运行时生成这些数组的方法。然后,它将位于堆上。
因此,对我来说最重要的问题是->在使用
g++
编译并在Linux集群
上运行时,处理大型数组的最有效方法(即内存计算期间运行时间最短)是什么。感谢您的耐心阅读。