OpenMPまたはCUDAを使用してこのループをスピードアップできるかどうか疑問に思っています。現在のところ、それは逐次処理と細かい動作しますが、私のコーディングを最適化しようとしている私は「M:私は効果なしで、次の試してみた処理を並列化するための努力においてスピードアップforループwith .push_back
for (int curCol = 0; curCol < numRows; ++curCol){ //Long Loop
int lb = csc_colIndices[curCol];
int ub = csc_colIndices[curCol + 1];
// push back the diagonal value to L matrix
vec_L_val[curCol].push_back(1.0f);
vec_L_indices[curCol].push_back(curCol);
for (int curIndex = lb; curIndex < ub; ++curIndex){
int curRow = csc_indices[curIndex];
float curVal = csc_val[curIndex];
if (!Equal(curVal, 0) && curRow <= curCol){// U entry
vec_U_val[curCol].push_back(curVal);
vec_U_indices[curCol].push_back(curRow);
}
else if (!Equal(curVal, 0) && curRow > curCol){// L entry
vec_L_val[curCol].push_back(curVal);
vec_L_indices[curCol].push_back(curRow);
}
}
}
:
#pragma omp parallel for private(curCol) shared(curIndex)
マイ?
どのように私はこのコードを向上させることができます...疑いが.push_backの使用であるが、私は間違っている可能性が
ベクターに初期サイズを与えていますか? – user743414
あなたはvec_L_valなどを参照していますか?もしそうなら、はい。 – ceeely
複数のスレッドが同時にリソースを競合するため、 'std :: vector'sを満たすことは並列処理には適していません。私は、充填をシーケンシャルな操作として残し、むしろ後でこれらのベクトルを修正しないで並列処理を利用することに集中します。 – acraig5075