为什么使用`MPI_Type_vector`来指定步幅间隙?

时间:2017-09-18 01:26:58

标签: mpi stride

在MPI文档中,我读到MPI_Type_vectorMPI_Type_contiguos之间的区别在于第一个允许指定数组元素之间的跨距。

为什么人们应该对此感兴趣而不是简单地使用MPI_Type_contiguous

1 个答案:

答案 0 :(得分:1)

您可以将MPI_Type_contiguous()视为MPI_Type_vector()的特殊情况而不会有任何进展。

例如,在Fortran中,数组是列主要的。所以如果你考虑以下数组

integer :: A(n,m)

可以使用

获取列的派生数据类型
CALL MPI_Type_contiguous(n, MPI_INTEGER, newtype, ierr)

CALL MPI_Type_vector(n, 1, 1, MPI_INTEGER, newtype, ierr)

CALL MPI_Type_vector(1, n, n, MPI_INTEGER, newtype, ierr)

但描述行的唯一方法是通过MPI_Type_vector()

CALL MPI_Type_vector(m, 1, n, MPI_INTEGER, newtype, ierr)

请注意,如果要一次发送/接收多个行,则需要调整数据类型的大小,因此完整的序列将是

CALL MPI_Type_vector(m, 1, n, MPI_INTEGER, tmptype, ierr)
CALL MPI_Type_size(MPI_INTEGER, integer_size, ierr)
CALL MPI_Type_create_resized(tmptype, 0, integer_size, newtype, ierr)
CALL MPI_Type_free(tmptype, ierr)