Concurrency 你是如何利用多核的?

Concurrency 你是如何利用多核的?,concurrency,scalability,parallel-processing,multicore,Concurrency,Scalability,Parallel Processing,Multicore,作为一个来自企业web开发领域的世界中的人,我总是好奇地想知道回到“真实世界”的开发人员是如何利用并行计算的。这一点现在更加重要了,当一个芯片上有数千个核而不是几个核时,这一点就更加重要了 我的问题是: 这将如何影响您的软件路线图 我特别感兴趣的是关于多核如何影响不同软件领域的真实故事,因此请在回答中指定您所做的开发类型(例如服务器端、客户端应用程序、科学计算等) 为了利用多核机器,您对现有代码做了什么?您遇到了哪些挑战?你是在用,,,还是别的什么 随着并发级别的不断提高,您打算做什么?您将如何

作为一个来自企业web开发领域的世界中的人,我总是好奇地想知道回到“真实世界”的开发人员是如何利用并行计算的。这一点现在更加重要了,当一个芯片上有数千个核而不是几个核时,这一点就更加重要了

我的问题是:

  • 这将如何影响您的软件路线图
  • 我特别感兴趣的是关于多核如何影响不同软件领域的真实故事,因此请在回答中指定您所做的开发类型(例如服务器端、客户端应用程序、科学计算等)
  • 为了利用多核机器,您对现有代码做了什么?您遇到了哪些挑战?你是在用,,,还是别的什么
  • 随着并发级别的不断提高,您打算做什么?您将如何处理数百或数千个内核
  • 如果你的领域不容易从并行计算中获益,那么解释为什么也很有趣
  • 最后,我将此定义为一个多核问题,但请随意讨论其他类型的并行计算。如果你正在移植应用程序的一部分以供使用,或者如果在大型集群上是你的范例,那么也一定要提到这一点

    更新:如果您回答了第5题,请说明您是否认为如果内核(100、1000等)超过可用内存带宽,情况会有所改变(看看每个内核的带宽是如何变得越来越小)。您仍然可以为您的应用程序使用剩余的内核吗

  • 现在——老实说,对它影响不大。我更多地处于“准备阶段”,学习使这成为可能的技术和语言特性
  • 我没有一个特定的领域,但我遇到过一些领域,如数学(多核是必不可少的)、数据排序/搜索(多核分治是有用的)和多计算机需求(例如,要求备份站的处理能力用于某些事情)
  • 这取决于我使用的语言。显然,在C#中,我的手被一个尚未准备好的并行扩展实现捆绑住了,它似乎确实提高了性能,直到您开始将相同的算法与OpenMP进行比较(可能不是一个公平的比较)。因此,在.NET上,对于→ <代码>并行。对于重构等。
    在这里得到“强”>真/ <强> > C++是有趣的,因为与OpenNMP相比,您可以挤出的性能与.NET相比是惊人的。事实上,OpenMP让我大吃一惊,因为我没想到它能如此高效地工作。嗯,我想它的开发者已经花了很多时间来完善它了。我还喜欢它在VisualStudio中开箱即用,不像TBB那样需要付费。
    至于MPI,我使用PureMPI.net进行小型家庭项目(我有一个局域网)来处理一台机器无法完成的计算。我从来没有在商业上使用过MPI,但我知道MKL有一些MPI优化的函数,对于任何需要它们的人来说,这可能是很有趣的
  • 我计划做“琐碎的计算”,即使用额外的内核来预计算可能需要或不需要的结果——当然,RAM允许。我还打算深入研究目前大多数终端用户的机器无法处理的昂贵算法和方法
  • 至于没有从并行化中获益的领域。。。嗯,你总能找到一些东西。有一件事我很强烈地关注.NET中的体面支持,虽然遗憾的是我放弃了类似C++的速度。
    我从事医学成像和图像处理

    我们处理多核的方式与处理单核的方式大致相同——我们在编写的应用程序中已经有多个线程,以便有一个响应良好的UI

    然而,因为我们现在可以,我们正在大力考虑在CUDA或OpenMP中实现大多数图像处理操作。英特尔编译器为OpenMP提供了很多很好的示例代码,它只是一个比CUDA成熟得多的产品,并且提供了更大的安装基础,因此我们可能会继续使用它

    对于昂贵的(即,超过一秒钟的)操作,我们倾向于尽可能将该操作转移到另一个进程中。这样,主UI仍能保持响应性。如果我们不能,或者移动这么多内存太不方便或太慢,那么操作仍然在一个线程中,然后该操作本身就可以生成多个线程

    对我们来说,关键是确保我们不会遇到并发瓶颈。我们在.NET中开发,这意味着UI更新必须从对UI的调用中完成,以便让主线程更新UI


    也许我很懒,但真的,我不想花太多的时间在并行化矩阵求逆之类的事情上。很多非常聪明的人花了很多时间来制造像nitrous这样的东西,我只想把他们所做的事情称为nitrous。类似CUDA的东西有一个有趣的图像处理接口(当然,这就是它的定义),但对于那种即插即用编程来说,它还太不成熟。如果我或其他开发人员有很多空闲时间,我们可能会尝试一下。因此,我们将使用OpenMP来加快处理速度(这肯定是未来几个月的发展路线图)。

    我从事图像处理。我们正在尽可能利用多核技术,将图像分片处理到不同的线程上。

    我的研究生工作是开发裸金属多核技术的概念,并在嵌入式系统中进行教学
    gmake -j