c - 使用 MPI 为多维数组动态分配内存

标签 c multidimensional-array mpi dynamic-memory-allocation

我目前正致力于通过药物贴片对扩散过程进行建模,这涉及使用数值方法求解 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/

相关文章:

c - 为什么程序没有运行 flex 和 bison 编译的 C 程序的主要功能

javascript - 如何在 json 中创建以下内容并在 javascript 中作为数组获取并搜索特定值?

c - C中相邻位置二维数组中的相等元素

c - MPI_Finalize 和断言?

c++ - MPI 发送矩阵列 (C++)

c - MPI 奇偶排序如何工作?

c - *p1->p2 和 *p1.a 在 c 语言中是如何解释的?

c - 为什么插入printf语句会使我的函数正常工作?

c - if 语句不适用于某些测试用例

javascript - 根据表单选择值查找数组的值