0

AzureでWebロールでホストしているwcfサービスを作成しました。ロールのインスタンスは非常に大きく(1つのインスタンスのみ)、8つのコアがあります。サービスには2つのメソッドがあります。メソッドは行列の乗算を計算します。1つはシーケンシャルプログラミングを使用し、もう1つはパラレルを使用します(Parallel.Forを使用)。その結果、シーケンシャルプログラミングはパラレルよりも高速になります。私は何か間違ったことをしていますか?プロセッサの動作を監視していて、並列計算を開始すると、すべてのコアが使用されますが、結果は良くありません...並列プログラミング行列の乗算のコードは次のとおりです。

ParallelOptions p = new ParallelOptions();
            p.MaxDegreeOfParallelism=8; 
 Parallel.For(0, n,p, i =>
                {
                    for (int j = 0; j < n; j++)
                    {

                        suma = 0;


                        for (int k = 0; k < n; k++)
                        {

                            suma = (matricaA[i, k] * matricaB[k, j]);

                        }
                        proizvod[i, j] = suma;

                    }
                }
4

1 に答える 1

0

問題の正確な原因はわかりません。しかし、私の提案は次のとおりです。リモート デスクトップを使用してクラウド マシンにログインします。行列計算を並列で実行するコンソール アプリケーションを作成します。次に、クラウド マシンでコンソール アプリケーションを実行します。リソース モニターを使用して、CPU 使用率を確認します。CPU 使用率が頻繁に 100% に近づく場合は、コード ロジックが正しいと確信できます。

WCF を使用しているため、WCF はデフォルトで複数のスレッドを同時に使用して複数の要求を処理できることに注意してください。そのため、複数のスレッドを使用して単一の行列を計算するのではなく、サーバーが同時に複数の行列を計算している可能性があります。通常、計算負荷の高いジョブは、WCF を使用せずにワーカー ロールで実行され、1 つずつ実行されます。

于 2012-06-04T02:42:24.980 に答える