【发布时间】:2012-06-04 20:58:20
【问题描述】:
我创建了 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;
}
}
【问题讨论】:
-
嗯,可能需要查看所有代码,包括 Serial。我只能想象您的代码没有按照您的想法运行。
-
我在本地机器上部署到 Azure 之前测试了代码,它运行良好...
-
嗯,那当然很不寻常。我们在 Azure 中的 4 和 8 个核心实例上运行大规模并行工作负载,并且预期的加速肯定在那里。如果是我,我会尝试另一个超级简单的并行与串行场景,看看这是否表现出相同的行为。我会进行一些登录以尝试更好地了解执行路径。在仅在 1 个四核插槽上执行的 4 核机器上尝试此操作也值得一试——而不是在 8 核的两个插槽上执行。