openMPを使用してマルチスレッドを適用したいと思います。 ここに書いた簡単なコードです。OpenMP double for loop
vector<Vector3f> a;
int i, j;
for (i = 0; i<10; i++)
{
Vector3f b;
#pragma omp parallel for private(j)
for (j = 0; j < 3; j++)
{
b[j] = j;
}
a.push_back(b);
}
for (i = 0; i < 10; i++)
{
cout << a[i] << endl;
}
私は作品のリクにそれを変更したい:の#pragma行が削除された場合に
parallel for1
{
for2
}
または
for1
{
parallel for2
}
コードは動作します。私はそれを使用すると動作しません。どうしたの?
/////////追加
は、実際に私は ダブルループ質問のためのより複雑な例にOpenMPのを使用しています。
ここにも、私はMPを適用しないとき、それはうまく動作します。 しかし、私はそれを適用すると、 ベクトルpush_back行でエラーが発生します。
vector<Class> B;
for 1
{
#pragma omp parallel for private(j)
parallel for j
{
Class A;
B.push_back(A); // error!!!!!!!
}
}
B.push_back(A)行を消去すると、MPを適用すると同様に動作します。
正確なエラーメッセージが見つかりませんでしたが、ベクトルに関する例外エラーのようです。デバッグは、スレッドセーフではありません
void _Reallocate(size_type _Count)
{ // move to array of exactly _Count elements
pointer _Ptr = this->_Getal().allocate(_Count);
_TRY_BEGIN
_Umove(this->_Myfirst, this->_Mylast, _Ptr);
エラーメッセージを追加してください。また、なぜC++を使用している間にC89スタイルの変数を宣言していますか? –
[mcve]を作成してください。あなたの例の並列化について議論することは、コード全体が数マイクロ秒かかるため、実際には有用ではありません。並列化が実際に意味をなさない場所に何かを提示することができれば、はるかに生産的になるでしょう。 – Zulan
私はもっと多くの行を追加しました! – Wooni