我制作了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;
}
}
发布于 2012-06-04 02:42:25
我不知道这个问题的确切原因。但这里是我的建议:使用远程桌面登录到云机器。创建一个并行执行矩阵计算的控制台应用程序。然后在云机上运行控制台应用程序。使用资源监视器检查CPU使用情况。如果CPU使用率经常接近100%,那么您可以确信代码逻辑是正确的。
由于您使用的是WCF,请注意WCF默认情况下可以同时使用多个线程处理多个请求。因此,您的服务器有可能同时计算多个矩阵,而不是使用多个线程计算单个矩阵。通常,计算繁重的工作是在没有WCF的工作人员角色上完成的,在那里它们是逐个执行的。
https://stackoverflow.com/questions/10866249
复制