~12,000x12,000 のセル マトリックス (約 125 回) をループするプロセスを変換して、並列処理を使用しようとしています (経由parallel_for
)。私が使用しているコードは以下のとおりです。for ループがコメント アウトされている場所を確認できます。
このコードを for ループで実行すると、問題はありません。を使用して (デバッグで) 実行するとparallel_for
、「FratarProcess.exe 0xC0000005 の 0x00f3d4ae で未処理の例外: アクセス違反の書き込み場所 0x0000000.
注:accessMatrix
は as として宣言され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++;
});
...
}
マシンの 1 つではなく 8 つのコアすべてを使用してこのプロセスを実行できるように、誰かが私を正しい方向に向けることができますか? 私はC++の初心者であることに注意してください。Visual C++ Express を使用しています。