私は並列システムを非並列システムに対してテストしたいという問題があります。並列C++でのメモリの設定
は、システム1では、私は、次のようなメモリを確立:
std::vector<double>* p_val_vec_main = new std::vector<double>(*mpStages);
std::vector<double>* p_val_vec_slave = new std::vector<double>(*mpStages-1);
std::vector<std::vector<double> >* p_mat_cache =
new std::vector<std::vector<double> >(3, std::vector<double>());
これらのベクターは、周りに渡され、したがって、ポインタと新しい構文を繰り返し、RAIIシステムで使用されています。私が行く初めて参照するが
#pragma omp parallel
{
std::vector<double>* p_val_vec_main = new std::vector<double>(*mpStages);
std::vector<double>* p_val_vec_slave = new std::vector<double>(*mpStages-1);
std::vector<std::vector<double> >* p_mat_cache =
new std::vector<std::vector<double> >(3, std::vector<double>());
}
:のようなオーバーラップ - 推測 - システム2(並列システム)において
、私は何がある与えられていない並列に3つのベクトルを確立しようとしていますプラグマブロックの外側が、プラグマブロックは、私は、エラーコードを受け取るシステム2における有効な要素で、あるメソッド内で「p_val_vec_main」:これが起こった理由を誰もが知っていた場合
error: 'p_val_vec_main' was not declared in this scope
は思っていましたか?これが何であるかという私の唯一の考えは、おそらくローカル/グローバルな衝突であろう。
あなたがシステム2の「基準p_val_vec_main」と言うとき、あなたは文字通りあなたの 'プラグマOMPのparallel'ブロック内の宣言された変数を参照してください意味ですか?または、RAIIシステムに「渡された」ポインタのコピーを参照しているとしますか? – Edward
プラグマブロックの外側ですが、プラグマブロックが@Edwardのメソッドの場合 – mwtmurphy
'new std :: vector <...'はほとんど常に悪い考えです。実際にはすべてのコンテナに適用されます。コンテナタイプは直接使用してください。"Using RAII"はポインタの引数ではなく、ポインタの引数です。 – MSalters