-2

私はスレッディングと並列処理に不慣れです。C#のゲームでこのメソッドを使用しており、並列反復を使用する必要があります。以下のメソッドのforループでこれをどのように使用できますか?

public int[,] GetLegalMoves()
{
    int[,] legalMoves = new int[8, 8];

    for (int i = 0; i < 8; i++)
        for (int j = 0; j < 8; j++)
            if (IsMoveLegal(i, j)) legalMoves[i, j] = 1;
            else legalMoves[i, j] = 0;

    return legalMoves;
}
4

1 に答える 1

2

これは、外側のループを並列化することで並列化できます。

public int[,] GetLegalMoves()
{
    int[,] legalMoves = new int[8, 8];

    Parallel.For(0, 8, i =>
    {
        for (int j = 0; j < 8; j++)
            if (IsMoveLegal(i, j)) legalMoves[i, j] = 1;
            else legalMoves[i, j] = 0;
    });

    return legalMoves;
}

IsMoveLegalそうは言っても、8x8 マトリックスは非常に小さい値であるため、かなりコストのかかる操作でない限り、並列作業のスケジューリングのオーバーヘッドが得られる利益よりも高くなる可能性があるため、これにより実行が遅くなる可能性があります。

IsMoveLegalこれには、複数のスレッドから安全に使用できることも必要です。

于 2012-12-06T22:25:28.267 に答える