Scilab Home page | Wiki | Bug tracker | Forge | Mailing list archives | ATOMS | File exchange
Please login or create an account
Change language to: English - Français - Português - Русский

Please note that the recommended version of Scilab is 6.0.2. This page might be outdated.
However, this page did not exist in the previous stable version.

Scilabヘルプ >> Scilab MPI > MPI implementation

MPI implementation

実装に関する技術的詳細

データの送信および受信

スクリプト言語によるMPI実装の主な問題は,ネーティブな特徴に起因します. つまり,スクリプト言語は,もともと, 種々のおよび大きさの動的な変数を用いているのです.

ScilabにおけるMPIの実装はMPIデータ型MPI_INTへの内部的なシリアル化および 非シリアル化処理を用いています. 送信関数(MPI_Send, MPI_Isend, MPI_BCast, など)は 全てのサポートされるデータ型を MPI_INTに変換し,一方, 受信関数(MPI_Recv, MPI_Irecv, など) は元の変数を 回復 します.

5系列におけるメモリ表現と同様に,変数は以下のようにシリアル化されます:

Double, Boolean, 文字列(?)

行数

列数

複素数 (関係する場合)

データ

整数

行数

列数

精度

データ

疎行列 (double または boolean)

行数

列数

複素数

要素数

データ

他の解を検討しましたが,種々の理由により棄却されました:

  • MPIに基づく新規データ型事前に変数の大きさを知る必要があります.
  • メタデータ(大きさ, 型)が送信されたり, データが送信されたりします. 性能は低下し,コードはかなり複雑化します.

非同期通信

MPI_Irecv とMPI_Isendの標準的な動作はScilab言語で共通する方法とは実際には 異なり、MPI_WairがScilab MPIバインディングに値を返します.

リクエストのリストとMPI_Irecv/MPI_Waitで想定されるMPI変数を保存するために, 最大 10 000 要素を有する静的C構造体が使用されます. これらは,非同期通信で使用される種々のMPIリクエストと MPI_Irecvから期待される変数へのリファレンスを保存する際に使用されます. 受信された値はMPI_Waitにより取得されます.

以下の例では, "42"という名前のリクエストがこのデータ構造体に保存されます.

MPI_Init();
rnk =    MPI_Comm_rank();
sizeNodes =    MPI_Comm_size();
SLV = rnk;
Master = ~ SLV;
assert_checkequal(MPI_Comm_size(), 2);
if Master
   for slaveId = 1:sizeNodes-1
     value = slaveId*2
     MPI_Isend(value, slaveId, 42);
   end
else
    rankSource=0;
    tag=0;
    MPI_Irecv(rankSource, tag, 42); // MPI_Irecv は値を返しません
    value=MPI_Wait(42) // 値は MPI_Waitにより返されます
    assert_checkequal(value,2);
end
MPI_Finalize();
exit()

参照

Scilab Enterprises
Copyright (c) 2011-2017 (Scilab Enterprises)
Copyright (c) 1989-2012 (INRIA)
Copyright (c) 1989-2007 (ENPC)
with contributors
Last updated:
Thu Oct 02 13:58:35 CEST 2014