2

次の構造体を検討してください

    typedef struct{
       void *data;
       int len;
    }item_t;

item_t と関数ポインターを受け入れる map_functions (item_t dt , item_t (*f_ptr)(item_t) )という関数にitem_tを渡すことができます。

map_functions()は、 item_tを渡すことによって、引数として渡された関数を呼び出します。それぞれ item_t の異なる内容でmap_functions ()を呼び出し、呼び出したい対応する関数を渡すさまざまな関数があることに注意してください。

このことはすべて、私にとってはかなりうまく機能します。

今度は、MPI を使用してこれと同じことを行いたいと思います。最初に頭に浮かぶのは次のことです。

ユーザー定義の MPI_Datatype (具体的には MPI_Type_struct) を定義するにはどうすればいいですか? void* データなどの汎用ポインターが構造体に含まれている場合 つまり、上記の構造体をユーザー定義の MPI データ型に変換します。

ありがとう、

4

1 に答える 1

2

プロセス間でポインターを渡すことはできません。プロセスはメモリを共有しません。

実際の情報を渡すか、何も渡さなければなりません。ポインターは、プロセスに対してのみ相対的です。

于 2012-09-19T00:36:35.320 に答える