我目前正致力于通过药物贴片建模扩散过程,其中涉及使用数值方法求解PDE。我目前的问题是尝试动态地将内存分配给C中的多维数组。
我尝试分配内存的数组是:
double marray [1000] [1000] [1000];
是否可以动态地将内存分配给具有其他维度的数组?我在64位系统上编写代码,但是,我使用shell(Bitvise SSH客户端)编译代码,以便我可以在超级计算机上运行它(BlueShark?)。
double marray [1000] [1000] [1000] [1000];
我被赋予了使用MPI执行此任务的提示?
感谢您的关注和帮助!
答案 0 :(得分:0)
有多种方法可以制作多维数组。我举几个例子: 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;
一些评论:
看来你正在处理一个大矩阵,确保使用一个连续的数组。
如果您需要在流程之间进行通信,请确保尽可能使用集体沟通。
所有进程都会生成类似大小的数组,最有可能每个进程只使用这个数组的一大块,其余的只会占用你的内存。确保使用正确的尺寸,具体取决于工艺数量。