17.2.7. MPI_Aint_add

MPI_Aint_add, MPI_Aint_diff - 用于MPI_Aint值运算的可移植函数。

17.2.7.1. 语法

17.2.7.1.1. C语法

#include <mpi.h>

MPI_Aint MPI_Aint_add(MPI_Aint base, MPI_Aint disp)

MPI_Aint MPI_Aint_diff(MPI_Aint addr1, MPI_Aint addr2)

17.2.7.1.2. Fortran 语法

USE MPI
! or the older form: INCLUDE 'mpif.h'
INTEGER(KIND=MPI_ADDRESS_KIND) MPI_AINT_ADD(BASE, DISP)
        INTEGER(KIND=MPI_ADDRESS_KIND) BASE, DISP

INTEGER(KIND=MPI_ADDRESS_KIND) MPI_AINT_DIFF(ADDR1, ADDR2)
        INTEGER(KIND=MPI_ADDRESS_KIND) ADDR1, ADDR2

17.2.7.1.3. Fortran 2008 语法

USE mpi_f08
INTEGER(KIND=MPI_ADDRESS_KIND) MPI_AINT_ADD(BASE, DISP)
        INTEGER(KIND=MPI_ADDRESS_KIND) BASE, DISP

INTEGER(KIND=MPI_ADDRESS_KIND) MPI_AINT_DIFF(ADDR1, ADDR2)
        INTEGER(KIND=MPI_ADDRESS_KIND) ADDR1, ADDR2

17.2.7.2. 输入参数

  • base: 基地址(整数)。

  • disp: 位移量(整数)。

  • addr1: 被减数地址(整数)。

  • addr2: 被减数地址(整数)。

17.2.7.3. 描述

MPI_Aint_add 生成一个新的MPI_Aint值,该值等于basedisp参数之和,其中base表示通过调用MPI_Get_address返回的基地址,disp表示一个有符号整数位移。结果地址仅在生成base的进程中有效,并且必须对应于base所引用同一对象中的位置,如MPI-3.1第4.1.12节所述。该加法运算以能正确表示输出地址的MPI_Aint形式执行,就好像最初生成base的进程调用了以下操作:

MPI_Get_address ((char *) base + disp, &result);

MPI_Aint_diff 生成一个新的MPI_Aint值,该值等同于参数addr1addr2之间的地址差,其中addr1addr2是通过调用MPI_Get_address返回的地址。生成的地址仅在产生addr1addr2的进程中有效,且addr1addr2必须对应于同一进程中同一对象内的位置,如MPI-3.1标准第4.1.12节所述。该差值计算方式会产生从addr1addr2的有符号差值,效果等同于最初生成这些地址的进程对最初传递给MPI_Get_address的地址执行了(char *) addr1 - (char *) addr2运算。

另请参阅