Я пытаюсь преобразовать процесс, который проходит через матрицу ячеек ~ 12000x12000 (примерно 125 раз), чтобы использовать параллельную обработку (через parallel_for
).Код, который я использую ниже.Вы можете видеть, где закомментирован цикл for.
Когда я запускаю этот код с циклом for, проблем не возникает.Когда я запускаю его (в режиме отладки), используя parallel_for
, происходит сбой в случайных точках с «Необработанным исключением в 0x00f3d4ae в FratarProcess.exe 0xC0000005: Место записи нарушения доступа 0x0000000.
Примечание: 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++;
});
...
}
Может ли кто-нибудь направить меня в правильном направлении, чтобы я мог получить этот процесс, используя все 8 ядер моего компьютера вместо одного?отчасти новичок в C ++. Я использую Visual C ++ Express.