仅在根进程上声明的数组

2023-12-03

特别是在 Fortran 的 MPI 中,仅在根进程上定义数组是否可能并且是一个不错的选择?例如这样的事情:

program test
implicit none

include 'mpif.h'

all mpi_init(ierr)

call mpi_comm_rank(mpi_comm_world,myid,ierr)
call mpi_comm_size(mpi_comm_world,numproc,ierr) 

if (myid .eq. 0) then
    complex(8), dimension(:,:), allocatable :: array
end if

   ...

if (myid .eq. 0) then
    allocate(array(2,2))
end if

   ...

end program

你可以猜到,我已经尝试过这个,但它不起作用,因为在 Fortran 中声明需要位于顶部。但我希望有办法解决这个问题?

这样,数组也不会占用我的“虚拟”内存,对吗?或者我误解了什么?


正如您所指出的,您不能在中包含声明语句IF-块或过程的声明块之后的任何位置。但是,将数组声明为ALLOCATABLE在所有进程上,并且仅在某些进程上分配是允许的,在我看来,这是一个不错的选择。

! Declare as allocatable on all processes
complex(8), dimension(:,:), allocatable :: array

   ...

! Allocate only on some
if (myid .eq. 0) then
    allocate(array(2,2))
end if

这样,程序就不会消耗其他进程的任何额外内存。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

仅在根进程上声明的数组 的相关文章

  • 如何在 JavaScript 中将数组拆分为数组对?

    我想将一个数组拆分为数组对 var arr 2 3 4 5 6 4 3 5 5 would be var newarr 2 3 4 5 6 4 3 5 5 你可以使用jsreduce https developer mozilla org
  • NumPy 中按列增长矩阵

    在纯Python中 你可以很容易地逐列增长矩阵 data for i in something newColumn getColumnDataAsList i data append newColumn NumPy http en wiki
  • 字符串插值搜索

    对于那些不熟悉插值搜索的人来说 这是一种在排序数组中搜索值的方法 可能比二分搜索更快 您查看第一个和最后一个元素 并 假设数组的内容均匀分布 线性插值以预测位置 例如 我们有一个长度为 100 的数组 其中 array 0 0 和 arra
  • C# LINQ 方法确定数组是否是另一个数组的子集(包括重复项)?

    考虑两个数组 int a1 new int 1 1 1 2 3 4 5 6 7 8 9 10 10 int a2 new int 1 3 4 7 5 10 1 我希望能够确定 a2 是否是 a1 的子集 考虑重复项目的数量 换句话说 如果a
  • Java的数组indexOf在哪里?

    我一定错过了一些非常明显的东西 但我已经搜索遍了 但找不到这个方法 有几种方法可以使用Arrays http download oracle com javase 1 5 0 docs api java util Arrays html实用
  • Java控制台显示对象的地址而不是实际值[重复]

    这个问题在这里已经有答案了 好的 我正在用 Java 处理一个简单的数组 问题是 当我运行程序时 我得到的是对象的地址而不是实际值 我还发现循环 数组有问题 它应该显示房屋 3 5 和 7 但底部显示的是 3 4 和 5 我哪里出错了 请参
  • 使用无效数据调用函数 FieldValue.arrayUnion()。 FieldValue.serverTimestamp() 只能与 update() 和 set() 一起使用

    addDeposit account deposit let depositsDoc this db collection accounts doc account id collection deposits doc deposits r
  • JSON 为 foreach() 提供的参数无效

    我在从 JSON 检索数据时遇到一些问题 它总是说为 foreach 提供的参数无效 这是 url php 中的 JSON nama IT SERVICE SOLUTION nilai 0 periode 11 tahun 2014 nam
  • 如何从 Fortran 调用 R 函数?

    根据http gallery rcpp org articles r function from c http gallery rcpp org articles r function from c Rcpp 允许用户从 C 调用 R 函数
  • 查找所有数组的长度多维数组,Java

    我想使用多维数组来存储数据网格 但是 我还没有找到一种简单的方法来查找长度2nd数组的一部分 例如 boolean array new boolean 3 5 System out println array length 只会输出3 是否
  • 是否有一种算法可以在线性时间内计算数组反转?

    我知道有多少倒转 en wikipedia org wiki Inversion 28discrete mathematics 29 in an n 元素数组可以在 O n log n 操作使用增强型归并排序 http www geeksf
  • char* argv[] 在 c/c++ 中如何工作? [复制]

    这个问题在这里已经有答案了 我知道它用于使用命令行中的参数 但我没有得到声明 字符 argv 它是否意味着指向 char 数组的指针 如果是的话为什么没有大小 如果不是动态数组 就不需要有大小吗 我做了一些研究 发现有人说它会衰减为 cha
  • 使用 javascript Array reduce() 方法有什么真正的好处吗?

    reduce 方法的大多数用例都可以使用 for 循环轻松重写 对 JSPerf 的测试表明 reduce 通常会慢 60 75 具体取决于每次迭代内执行的操作 除了能够以 函数式风格 编写代码之外 还有什么真正的理由使用reduce 吗
  • 调整巨大数组的大小

    我正在我的应用程序中处理巨大的数组 需要调整它们的大小 假设您有一个 2Gb 的阵列 并且想要将其大小调整为 3Gb 有没有办法在暂时不需要 5Gb 的情况下调整它的大小 例如 给定一个 1Gb 堆 使用 Xmx1G flag public
  • 按第一列排序二维数组,然后按第二列排序

    int arrs 1 100 11 22 1 11 2 12 Arrays sort arrs a b gt a 0 b 0 上面的数组已排序为 1 100 1 11 2 12 11 22 我希望它们按以下方式排序a 0 b 0 首先 如果
  • “实际或正式的参数列表长度不同”

    当我尝试将某些内容放入 括号中时Friends f new Friends friendsName friendsAge 它出现错误 Friends 类中的构造函数 Friends 不能应用于给定类型 必需 无参数 发现 字符串 整数 原因
  • $0 和 $1 在 Swift 闭包中意味着什么?

    let sortedNumbers numbers sort 0 gt 1 print sortedNumbers 谁能解释一下什么 0 and 1在斯威夫特中意味着什么 另一个样本 array forEach actions append
  • MPI 中可变大小的消息

    是否有库调用允许使用 MPI 发送 接收可变大小的消息 解决方法是在第一条消息中发送数据大小 并在其后面加上实际的有效负载 但我想知道是否有一个约定来组合这两个单独的消息 提供给 MPI Recv 的计数只是一个上限 MPI Get cou
  • 字符串数组文本格式化

    我有这个字符串 String text Address 1 Street nr 45 Address 2 Street nr 67 Address 3 Street nr 56 n Phone number 000000000 稍后将被使用
  • 使用日期 Swift 3 对字典数组进行排序

    我有一个名为 myArray 的数组 其中添加了字典 我希望该字典按时间排序 这是字典中的键 那个时间是在 String 中 时间的日期格式为 yyyy MM dd HH mm ss 我尝试使用下面的代码解决方案 但给出了 从 字符串转换

随机推荐