0

我制作了 wcf 服务,我在 azure 中以 Web 角色托管。角色的实例特别大(它只是一个实例),它有 8 个核心。我在服务中有两个方法。方法是计算矩阵乘法,一种是顺序编程,另一种是并行(使用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 的工作角色上完成的,它们是在其中一个一个地执行的。

于 2012-06-04T02:42:24.980 回答