mpi - 将 MPI_TYPE_CREATE_SUBARRAY 用于类似大小的子数组但起始位置不同
问题描述
我想将 3d 数据块从一个处理器传输到另一个处理器,但它们在两个过程中的位置不同。如果我使用 MPI_TYPE_CREATE_SUBARRAY 那么我是否需要为发送和接收定义两个单独的数据类型,或者它们是否有任何方法可以在这个派生数据类型中放置一些偏移量?令人困惑的是,子数组派生数据类型的范围是整个数组,因此可以通过传递子数组的起始地址而不是传递主数组的起始地址来在发送和接收中使用此数据类型。
目前我正在为每个起始位置定义单独的数据类型,但我猜这似乎不是正确的方法。
integer :: sizes(1:3),subsizes(1:3),starts(1:3)
integer :: sxL,exL,syL,eyL,szL,ezL,gc
integer :: gtype(26)
sizes(1) = exL-sxL+2*gc+1
sizes(2) = eyL-syL+2*gc+1
sizes(3) = ezL-szL+2*gc+1
subsizes = gc
! Corner at i-1,j-1,k-1 (domain coordinates)
starts(1) = 0
starts(2) = 0
starts(3) = 0
call MPI_TYPE_CREATE_SUBARRAY(3,sizes,subsizes,starts,MPI_ORDER_FORTRAN,&
realtype,gtype(13),ierr)
call MPI_TYPE_COMMIT(gtype(13),ierr)
! Corner at i-1,j+1,k-1 (domain coordinates)
starts(1) = 0
starts(2) = eyL-syL+gc+1
starts(3) = 0
call MPI_TYPE_CREATE_SUBARRAY(3,sizes,subsizes,starts,MPI_ORDER_FORTRAN,&
realtype,gtype(11),ierr)
call MPI_TYPE_COMMIT(gtype(11),ierr)
解决方案
推荐阅读
- r - 如何使用 highchart() 和列表更正空白绘图区域
- wordpress - Woocommerce 产品的 WP_Query 中的 Orderby 价格
- discord.js - 如何禁止在某些角色上使用命令
- r - R包'TranslateR'不显示翻译结果(2)
- reactjs - 将 React、Material-UI 功能组件转换为类组件时出现问题
- angular - 在 ag-grid 中有没有办法让自定义单元格编辑器拥有多个组件?
- python-3.x - 数据框熊猫拆分 str
- javascript - 性能:监听所有表单元素的变化,将所有动态属性与新数据同步
- sql - 提取最后两个括号之间的右字符串
- scala - 在 Scala 中的功能步骤之间传递状态