Tod*_*lin 61 parallel-processing concurrency scalability multicore
作为来自企业Web开发世界的HPC世界中的某个人,我总是很想知道回到"现实世界"的开发人员如何利用并行计算.现在所有芯片都在进行多核处理,这就更加重要了,当芯片上有数千个内核而不是少数内核时,它会更加相关.
我的问题是:
最后,我将此视为一个多核问题,但随意谈论其他类型的并行计算.如果您正在移植部分应用程序以使用MapReduce,或者如果大型集群上的MPI是您的范例,那么也要明确提及.
更新:如果您回答#5,请提及您是否认为如果有更多内核(100,1000等)可以改变,而不是可以提供可用内存带宽(看看每个内核带宽越来越小) ).您是否仍可以将剩余的核心用于您的应用程序?
Nor*_*sey 38
我的研究工作包括编译器和垃圾邮件过滤方面的工作.我也做了很多'个人生产力'的Unix东西.另外,我编写和使用软件来管理我教授的课程,包括评分,测试学生代码,跟踪成绩和无数其他琐事.
总结(我从一位为一家领先的CPU制造商工作的主题发言人那里听到):业界支持多核,因为他们无法让机器运行得更快更热,而且他们不知道如何处理额外的晶体管.现在他们迫切希望找到一种方法来使多核盈利,因为如果他们没有利润,他们就无法建立下一代的生产线.肉汁火车已经结束,我们可能实际上必须开始关注软件成本.
许多认真对待并行性的人忽略了这些玩具4核甚至32核的机器,转而使用128个或更多处理器的GPU.我的猜测是真正的行动将在那里.
Joa*_*uer 18
对于Web应用程序,它非常非常容易:忽略它.除非你有一些真正需要并行完成的代码,否则你只需编写旧式的单线程代码就可以了.
在任何给定时刻,您通常都会有比处理核心更多的请求.而且由于每个都是在自己的线程中处理(甚至是处理,取决于你的技术),这已经在并行工作.
您需要注意的唯一地方是访问需要同步的某种全局状态.将其保持在最低限度,以避免将人为瓶颈引入其他(几乎)完全可扩展的世界.
所以对我来说,多核心基本归结为这些项目:
for→ Parallel.For重构等就可以轻松实现.我从事医学成像和图像处理工作.
我们处理多个内核的方式与处理单个内核的方式大致相同 - 我们在编写的应用程序中已经有多个线程,以便拥有响应式UI.
但是,因为我们现在可以,我们正在强烈关注在CUDA或OpenMP中实现大多数图像处理操作.英特尔编译器为OpenMP提供了许多优秀的示例代码,并且只是比CUDA更成熟的产品,并提供了更大的安装基础,因此我们可能会采用这种方式.
如果可以的话,我们倾向于为昂贵的(即超过一秒的)操作做的事情是将该操作分成另一个进程.这样,主UI仍然保持响应.如果我们不能,或者移动那么多内存太不方便或太慢,那么操作仍然在一个线程中,然后该操作本身可以产生多个线程.
我们的关键是确保我们不会遇到并发瓶颈.我们在.NET中开发,这意味着必须通过对UI的Invoke调用来完成UI更新,以便让主线程更新UI.
也许我很懒,但实际上,我不想花太多时间来解决很多这样的问题,比如矩阵反转之类的东西.许多非常聪明的人花了很多时间像亚硝酸盐一样快速制作这些东西,我只是想把他们所做的事情称之为.像CUDA这样的东西有一个有趣的图像处理界面(当然,这就是它的定义),但对于那种即插即用的编程来说仍然太不成熟.如果我或其他开发人员获得了大量的业余时间,我们可能会尝试一下.因此,我们将使用OpenMP来加快处理速度(这绝对是未来几个月的开发路线图).