5

私は OpenMP を使用して自分のプログラムを並列化しようとしていますが、行き止まりになっていると感じることがあります。

クラスで定義(および初期化)した関数メンバーで変数を共有したいと思います。私の理解が正しければ、クラス#pragma omp parallel shared(foo)のデータ メンバー ( intboost::multi_arrayおよび など) を実行することはできません。std::vector例: クラスのベクター データ メンバーで push_back() を使用します。a の値を更新しますboost::multi_array

私の質問は、OpenMP が適切なツールであるかどうか、または boost::thread または tbb を使用する必要があるかどうかです。または何か... C++ APIをサポートするもの

よろしく

4

1 に答える 1

1

ドキュメントに記載されているように、オブジェクトがメモリに一度だけ配置されることを定義sharedします。たとえば、fooオブジェクトにstd::vector何らかのタイプのが含まれている場合、ループ内のアイテムには完全に問題がないはずです。push_backただし、アトミック命令またはミューテックス セクションを使用して、コードがスレッド セーフであることを確認する必要があります。

于 2011-06-29T14:28:30.727 に答える