私は Parallel.For を使用するのが初めてで、次のことにこだわっています。
For ループ内では、反復ごとに特定の固定数 (nStages) ずつ増やす必要があるポインター オフセット (iPathMatrixOffset) を使用します。基本的に、反復後、そのオフセットは r * nStages の値になります。
現在、この変数をループ内で宣言し、r*nStages に設定しています。
これは最も効率的な方法ではないと思います-これはパフォーマンスが重要なコードです(そのため、ここでポインターベースのコードを使用しています)-各反復の最後にnStagesでインクリメントする方が速いかどうかを試してみたい.
しかし、スレッドのみにローカルな変数を宣言する方法がわかりません.MSDNからそれを理解することはできません.
これはよくある質問に違いありません...確かに私は明らかなことを見落としています。
助けていただければ幸いです。
現在のコード:
Parallel.For(0, nStates, r =>
{
int iPathMatrixOffset;
double local_maxV;
iPathMatrixOffset = r * nStages;
// some code, calculates local_maxV
// store result in path matrix
fixed (double* pPathMatrix = &PathMatrix[0, t])
{
*(pPathMatrix + iPathMatrixOffset) = local_maxV;
}
});
次のようなことをしたい:
Parallel.For(0, nStates, r =>
{
double local_maxV;
// some code
// store result in path matrix
fixed (double* pPathMatrix = &PahMatrix[0, t])
{
*(pPathMatrix + iPathMatrixOffset) = local_maxV;
}
iPathMatrixOffset += nStages;
});