3

私は2つの変数を持っています:

boost::array my_boost_array_variable_1<float, 3>;
boost::array my_boost_array_variable_2<float, 3>;

ここで、次のシグネチャを使用して C 関数を呼び出したいと思います。

int MPI_Allreduce ( void *sendbuf, void *recvbuf, ...);

my_boost_array_variable_1my and の特定の要素のアドレスをmy_boost_array_variable_2MPI_Allreduce の 1 番目と 2 番目のパラメーターとして渡したい:

MPI_Allreduce(&my_boost_array_variable_1[2],
              &my_boost_array_variable_2[2], ...

または私はむしろ行う必要があります:

MPI_Allreduce(my_boost_array_variable_1.c_array() + 2,
              my_boost_array_variable_2.c_array() + 2, ...

更新: C 関数は、void *sendbuf で始まるデータの連続チャンクを想定しています。この点に関して、これら 2 つの呼び出しが正しいかどうかは、ここでの質問です。&my_boost_array_variable_1[2] は my_boost_array_variable_1.c_array() + 2 と同じ場所を指していますか? これらの呼び出しは同等ですか?

4

3 に答える 3

2

私にとっては、最初のほうがより明確です。でも実際は平等だと思います。

于 2012-11-29T10:01:50.360 に答える
1

http://www.boost.org/doc/libs/1_52_0/doc/html/boost/array.htmlによると、どちらのバージョンもスローしません。(私の評判が悪いのでコメントできませんでした:-))

于 2012-11-30T00:42:07.363 に答える
0

どちらが速いかはシステムに依存します。アセンブリ コードを自分で確認できます。

最初の方法はより安全です。正当でないインデックスに対処しようとすると例外がスローされるからです。

逆参照が 1 つしかないため、通常は 2 番目の方法の方が高速です。

于 2012-11-29T10:53:08.310 に答える