1

私は 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;

});
4

0 に答える 0