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