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