我目前正致力于通过药物贴片对扩散过程进行建模,这涉及使用数值方法求解 PDE。我当前的问题是尝试将内存动态分配给 C 中的多维数组。
我试图分配内存的数组是:
双马里[1000][1000][1000];
还有可能动态分配内存给另一个维度的数组吗?我正在 64 位系统上编写代码,但是,我正在使用 shell(Bitvise SSH 客户端)来编译代码,以便我可以在 super 计算机(BlueShark?)上运行它。
双马里[1000][1000][1000][1000];
有人提示我使用 MPI 来完成这项任务吗?
感谢您的关注和帮助!
最佳答案
有几种方法可以制作多维数组。我举几个例子: 1: 让 l, m, n, o,.. 成为您在不同维度上的大小。
double ****MyArr(int l, int m, int n, int o) {
double ****array = new double ***[l];
for (int i = 0; i<l; i++) {
array[i] = new double **[m];
for (int j = 0; j<m; j++) {
array[i][j] = new double *[n];
for (int k = 0; k < n; k++)
{
array[i][j][k] = new double [o];
}
}
}
return array;
}
2:
改为创建一维指针
double *myArr new double [l*m*n*o];
//access to [a][b][c][d]
myArr[a*m*n*o + b*n*o + c*o + d]=0.0;
一些评论:
看来您正在处理一个大矩阵,请确保使用的是连续数组。
如果您需要在进程之间进行通信,请确保尽可能多地使用集体通信。
所有进程都会生成相似大小的数组,很可能每个进程只会使用这个数组的一部分,其余的将白白占用你的内存。确保根据进程数使用正确的大小。
关于c - 使用 MPI 为多维数组动态分配内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49869219/