병렬 처리 (parallel_for
통해)를 사용하려면 ~ 12,000x12,000 셀 행렬 (약 125 회)을 반복하는 프로세스를 변환하려고합니다. 내가 사용하고있는 코드는 다음과 같습니다. for 루프가 주석 처리 된 부분을 볼 수 있습니다.Visual C++ parallel_for + 벡터 액세스 위반
이 코드를 for 루프와 함께 실행하면 문제가 없습니다. 내가 parallel_for
를 사용하여 (디버그)를 실행하면 FratarProcess.exe가 0xc0000005에서 0x00f3d4ae에서 처리되지 않은 예외 "를 임의 지점에서 충돌 :. 액세스 위반 쓰기 위치은 0x0000000F을
참고 : accessMatrix
는 vector <vector <unsigned short> > accessMatrix;
로 선언하고 이전에 가득 이 시점.
void dumpMatrix(unsigned short m)
{
int complete=0, start=2532, todo=accessMatrix.size()-start;
vector <string> sqlStrings;
Concurrency::parallel_for(start, (int)accessMatrix.size(),[&complete,&todo,&m,&sqlStrings](int i)
//for(int i=start;i<accessMatrix.size();i++)
{
printf("Processing i=%i... completed %i/%i\n",i,complete,todo);
for(unsigned short j=1;j<accessMatrix[i].size();j++)
{
if(accessMatrix[i][j]>0)
{
stringstream strSQL;
strSQL << "INSERT INTO debug.dbf (I,J,M,V) VALUES(" << i << "," << j << "," << m << "," << accessMatrix[i][j] << ")";
sqlStrings.push_back(strSQL.str());
}
}
complete++;
});
...
}
은 누군가가 나. 내가 사용하고 ++ 그래서 내가 다소 C에서 초보자의 생각합니다? 하나 대신 내 컴퓨터의 모든 8 개 개의 코어를 사용하여이 프로세스를 얻을 수있는 올바른 방향으로 지적받을 수 Visual C++ Express
답을 읽고 더 많은 연구를 한 후, sqlStrings를 Concurrency :: concurrent_vector sqlStrings;로 선언해야하고, 하나의 테스트를 실행하는 것으로 보입니다. 여태까지는 그런대로 잘됐다. 저를 올바른 방향으로 인도 해 주셔서 감사합니다. –