用于 HPC 的 C++ std::vector?

标签 c++ vector hpc numerical-computing

我正在将执行数值模拟的程序从 FORTRAN 翻译成 C++。

我必须处理 800MB 大小的两倍的大矩阵。 这个

double M[100][100][100][100];

给出段错误,因为堆栈不是那么大。 使用 new、delete 很尴尬,因为我需要四个 for 循环来分配我的数组甚至取消分配它。

std::array 在栈中所以不好。 std::vector 是个不错的选择,所以

第一个问题 std::vector 适合快速模拟还是

vector<vector<vector<vector<int,100>,100>,100>,100> 

会携带大量无用且繁重的数据吗?

第二个问题 您知道我可以使用的其他数据结构吗?也许有一些来自 boost 的东西。

目前我只是使用这个解决方案:

double * M = new double [100000000];

我正在手动访问我需要的条目。 如果我找不到任何其他高效的解决方案,我将编写一个自动管理最后一个方法的类。

第三个问题您认为这会显着降低性能吗?

最佳答案

您可能需要考虑 std::valarray,它旨在与 FORTRAN 竞争。它将元素存储为平面数组并支持数学运算,以及切片和间接访问的操作。

无论如何,这听起来像是您的计划。虽然即使是manpage建议可能有更灵活的选择。

关于用于 HPC 的 C++ std::vector?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39546874/

相关文章:

c++ - Eigen,如何访问 MatrixBase<Derived> 的底层数组

r - R填充向量

linux - 在 linux HPC 上显示命令历史记录

在返回时调用 C++ 复制构造函数

c++ - 将 "policy"附加到函数参数

C++ 在结构 vector 上使用 std::transform

c++ - 如何在C++中初始化结构中的 vector

linux - 来自 PC 生态系统的强大计算能力

r - 从 R 脚本中向从节点提交作业?

c++ - uint8_t VS uint32_t 不同的行为