2017-09-18 18 views
0

MPIのドキュメントでは、MPI_Type_vectorMPI_Type_contiguosの違いは、最初に配列の要素間のストライプギャップを指定できることです。ストライドギャップを指定するのに `MPI_Type_vector`を使うのはなぜですか?

なぜ、単にMPI_Type_contiguousを使用するのではなく、そうすることに興味があるのですか?

+0

、あなたの投稿を編集して修正してくださいすることができますされることに注意してください'MPI_Type_contiguos()'のタイプミス? –

+0

ギャップ(ストライド)を有する繰り返しパターンを有するデータ型を有することにより、サブマトリクス、より高次元のマトリクスからのスライスなど、アレイの一部との間で送受信を行うことができる。 –

答えて

0

の特別なケースとして、MPI_Type_contiguous()が表示されます。

たとえば、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) 

しかし、唯一で得ることができます行を記述する方法は経由です

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) 
関連する問題