次のコードスニペットがあります。
// Initialise rectangular matrix with [][] instead of [,]
double data[][] = new double[m];
for (int i = 0; i < m; i++)
data[i] = new double[n];
// Populate data[][] here...
// Code to run in parallel:
for (int i = 0; i < m; i++)
data[i] = Process(data[i]);
これが理にかなっている場合、私はdoubleの行列を持っています。行列の個々の行に変換を適用する必要があります。ある行から別の行へのデータの接続がないため、これは「驚異的並列」です。
私が次のようなことをした場合:
data.AsParallel().ForAll(row => { row = Process[row]; });
まず第一にdata.AsParallel()
、最初の添え字だけを見ることを知っているのか、それともすべてのm *ndoublesを列挙するのかわかりません。第二に、row
私が列挙している要素なので、このように変更できるかどうかわかりません-私はそうは思わない。
では、PLINQの有無にかかわらず、C#でこのループを並列化するための良い方法は何ですか?