会增加内核的计算机目前的趋势继续下去吗?
是,GHz的比赛结束。在现有技术上再加快速度是不现实的。物理学已经开始了。制造芯片的技术可能会发生戏剧性的变化,这让我们能够绕过这一切,但这显然不是“即将到来”。
如果我们不能拥有更快的核心,获得更多能量的唯一途径是拥有更多核心。
或者是否对一组内存可以提供的内核数量有一定的理论或实际限制?
绝对有一个极限。在共享内存系统中,内存是共享资源并且带宽有限。
Max processes = (Memory Bandwidth)/(Bandwidth required per process)
现在 - 这是每个进程的带宽“数字将缓存减少,但缓存成为他们是否是一致的彼此,因为每个人都访问内存中的同一区域效率较低。 (您不能缓存存储器写如果另一个CPU可能需要你写的)
当你开始谈论庞大的系统,这样的共享资源成为主要的问题。它可能是内存带宽,CPU周期,硬盘访问,网络带宽。这涉及整个系统的结构。
你似乎真的在追求未来的愿景,所以你可以做好准备。这是我的要求。
我想我们将看到软件开发人员在他们的程序中看到并行的方式发生了变化。目前,我认为很多软件开发人员认为使用多线程的唯一方法是让他们中的很多人执行相同的操作。麻烦的是,他们都在争夺同样的资源。这就意味着需要引入大量的锁定,这会导致性能问题,以及微妙的错误,这些错误会令人生气并且耗费时间来解决。
这是不可持续的。
制造在20世纪初就开始了,建造大量汽车的最快方式并不是让很多人在一辆车上工作,然后,当这件事完成时,将他们全部移动到下一辆车。将汽车的建造过程分解为许多小型工作,其中一项工作的产出将成为下一个工作的补充。他们称之为装配线。在硬件设计中,它被称为管道铺设,我认为我们会看到越来越多的软件设计转向它,因为它最大限度地减少了共享资源的问题。
好的 - 在一个阶段的输出和下一个输入仍然有一个共享资源,但这只是在两个线程/进程之间,并且更容易处理。标准方法也可以用于这些接口的制作方式,消息队列库似乎正在取得重大进展。
虽然没有一个解决所有问题的方法。这种类型的管线对于可以吸收一些延迟的高吞吐量应用非常适用。如果你不能忍受延迟,你别无选择,只能去'一个任务'的许多工作人员的路线。那些是你理想地想要扔在SIMD机器/像GPU一样的阵列处理器的那些,但它只能真正胜过某种类型的问题。这些问题是有很多数据需要以相同的方式处理的问题,并且数据项之间的依赖关系很少或根本不存在。
掌握了流水线系统的消息队列技术和类似知识,并通过OpenCL等库在GPU上实现细粒度的并行处理,可以让您深入了解光谱的两端。
cpu核心不直接访问内存。在高端至强型核心之间有三级缓存。但是可以肯定的是,内存总线带宽往往是一个实际的瓶颈,它比* cpu慢得多,你花大价钱购买更快的总线。如果你使用网络机器,至少还要慢一个数量级。它完全取决于你的代码缓存将如何工作。 – 2011-12-28 17:24:37