【问题标题】:Parallel programming in Windows AzureWindows Azure 中的并行编程
【发布时间】: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 核的两个插槽上执行。

标签: azure parallel-processing


【解决方案1】:

我不知道问题的确切原因。但这里是我的建议:使用远程桌面登录云机。创建一个并行执行矩阵计算的控制台应用程序。然后在云机器上运行控制台应用程序。使用资源监视器检查 CPU 使用率。如果 CPU 使用率经常接近 100%,那么您可以确信代码逻辑是正确的。

由于您使用的是 WCF,请注意默认情况下 WCF 可以同时使用多个线程处理多个请求。因此,您的服务器可能同时计算多个矩阵,而不是使用多个线程计算单个矩阵。通常计算繁重的工作是在没有 WCF 的工作角色上完成的,它们是在其中一个一个地执行的。

【讨论】:

  • 我按照你的建议做了控制台应用程序,我正在监控 CPU 使用率,当我将线程数设置为 8 时它使用 100%,设置为 4 线程时使用 50% ...我找不到问题所在...我的代码有问题吗?谢谢...\
  • 感谢所有试图帮助我的人,我解决了这个问题。按照这个例子msdn.microsoft.com/en-us/library/dd460713.aspx。我将矩阵乘法的代码移到另一个函数中(就像在示例中一样)并在主函数中调用,我得到了想要的结果。
猜你喜欢
  • 1970-01-01
  • 2017-05-19
  • 1970-01-01
  • 2021-07-16
  • 2011-07-10
  • 2016-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多