我正在使用 4D 矩阵(使用 STL 向量)。通常,维度是不同的。例如,我正在读取一个维度为 192x256x128x96 的矩阵,下面的代码以 0 到更大的维度(在这种情况下为 256)。
while(matriz.size() < width) //width es el tamaño de N
{
vector<vector<vector<short>>> aux;
matriz.push_back(aux);
}
for(auto i = 0; i < matriz.size(); i++)
{
while(matriz[i].size() < width)
{
vector<vector<short>> aux;
matriz[i].push_back(aux);
}
}
for(auto i = 0; i < matriz.size(); i++)
for(auto j = 0; j < matriz[i].size(); j++)
while(matriz[i][j].size() < width)
{
vector<short> aux;
matriz[i][j].push_back(aux);
}
for(auto i = 0; i < matriz.size(); i++)
for(auto j = 0; j < matriz[i].size(); j++)
for(auto k = 0; k < matriz[i][j].size(); k++)
while(matriz[i][j][k].size() < width)
{
matriz[i][j][k].push_back(0);
}
Run Code Online (Sandbox Code Playgroud)
该代码适用于中小型 4D 矩阵,我已经尝试过使用 200x200x200x200 并且它确实有效,但是我需要将它与 256x256x256x256 矩阵一起使用,当我运行它时,我的计算机没有响应。
不知道是不是内存问题。我的电脑有 12GB RAM,如果我没记错的话,矩阵的大小是 8GB。
知道如何解决这个问题吗?
编辑
200x200x200x200 矩阵的内存使用率为 56.7%
让我们看看我是否有这个权利。
您正在生产:
我不知道每个向量本身的整个大小,但可能远低于 1k,因此您使用的内存不到 10 g。
然而,这有很多事情要做。它真的挂了,还是只需要很长很长时间。
一些定期的调试输出将有助于回答这个问题。
一些提示(来自评论):
\n运行优化构建 ( -O3),这应该会加快处理速度。
不要使用循环中push_back()的空,而是使用. 这将防止代价高昂的重新分配。vectorresize()
例如,替换
\n while(matriz.size() < width) //width es el tama\xc3\xb1o de N\n {\n vector<vector<vector<short>>> aux;\n matriz.push_back(aux);\n }\nRun Code Online (Sandbox Code Playgroud)\n和
\n matriz.resize(width);\nRun Code Online (Sandbox Code Playgroud)\n如果确实需要push_back()循环使用,至少要reserve()提前考虑一下容量。这可以再次防止代价高昂的重新分配。重新分配向量可以短暂地将其通常使用的内存量增加一倍。
使用诸如top实时观察机器上的内存和交换使用情况之类的工具。如果您发现使用的交换空间增加,则意味着计算机内存不足。
| 归档时间: |
|
| 查看次数: |
155 次 |
| 最近记录: |