a.u*_*u.r 3 parallel-processing bus von-neumann
我一直在阅读关于冯诺依曼的瓶颈和 AFAIK,问题在于 CPU 应该获取或修改数据操作,但不能同时进行;因为它们都需要访问相同的内存总线。因此,问题主要在于有限的总线传输速率。我已经阅读了有关如何缓解这个问题的文章,它提到并行处理应该可以解决它,它不仅仅依赖于 1 个内核,因此当一个内核卡在获取操作中时,其他内核会以单独的方式工作大大缩短了计算时间。
这是正确的理解吗?如果是这样,不是所有这些核心都共享相同的内存总线吗?这从一开始就造成了瓶颈?
它没有。 冯诺依曼瓶颈是指处理器和内存位于慢速总线的两侧。如果你想计算一些东西,你必须通过总线将输入移动到处理器。然后,您必须在计算完成时将输出存储到内存中。您的吞吐量受到内存总线速度的限制。
通过将少量常用数据保留在处理器附近,缓存有助于缓解许多工作负载的此问题。如果您的工作负载重复使用大量数据,那么您将受益于缓存。但是,如果您正在处理一个太大而无法放入缓存的数据集,或者您的算法没有良好的数据重用,则缓存可能不会带来太多好处。考虑处理一个非常大的数据集。您需要加载所有数据并将其存储回至少一次。如果幸运的话,您的算法只需要查看每个数据块一次,任何重用的值都将保留在缓存中。如果没有,您可能最终会在每个数据元素上多次通过内存总线。
并行处理是一个相当宽泛的术语。根据您的操作方式,您可能会或可能不会获得更多带宽。
该方式共享内存处理器今天实现根本不会做很多工作来解决冯诺依曼瓶颈。如果有的话,拥有更多的内核会给总线带来更大的压力,因为现在更多的处理器需要从内存中获取数据。您将需要更多带宽来满足所有这些需求。举个例子:许多并行算法受内存限制,它们无法利用现代多核芯片上的所有内核,特别是因为它们无法足够快地获取数据。核心数在增加,每个核心的带宽可能会在限制范围内减少,即使总带宽从处理器到处理器增加。
现代内存总线变得越来越复杂,您可以做一些事情来更有效地使用它们。例如,在NUMA机器上,某些内存组比其他内存组更靠近某些处理器,如果您有效地布置数据,您可以获得比从 RAM 中的任何地方盲目获取更多的带宽。但是,扩展共享内存很困难——请参阅分布式共享内存机器,了解为什么将共享内存机器扩展到超过几千个内核会很困难。
分布式内存机是一种并行机。这些通常被称为集群——它们基本上只是同一网络上的一堆节点,试图完成一个常见的任务。你可以得到线性带宽可调节在一个集群中,如果每个处理器从它的本地存储器只取。但是,这要求您有效地布置数据,以便每个处理器都有自己的块。人们称之为数据并行计算。如果您的数据主要是数据并行的,那么您可能可以使用大量处理器,并且可以并行使用所有内存带宽。如果你不能 并行化您的工作负载,或者如果您不能将数据分成块,以便每个块主要由一个或几个节点处理,那么您又回到了顺序工作负载,并且您仍然受到带宽的限制单核。
人们已经研究了替代节点架构来解决冯诺依曼瓶颈。最常引用的可能是Processor-in-memory或PIM。在这些架构中,为了解决内存总线问题,你在内存中嵌入了一些处理器,有点像集群,但规模较小。每个微小的核心通常可以对其本地数据进行一些不同的算术运算,因此您可以非常快速地进行一些运算。不过,再一次,很难以一种实际上使这种类型的处理有用的方式来布置您的数据,但一些算法可以利用它。
总之,通用计算机中的冯诺依曼瓶颈(处理器可以对来自内存中任何地址的数据执行任何操作)来自于您必须将数据移动到处理器才能计算任何内容的事实。
简单地构建并行机并不能解决问题,尤其是当所有内核都在内存总线的同一侧时。如果您愿意拥有多个处理器并将它们分散开以便它们比其他数据更靠近某些数据,那么您可以利用数据并行性来获得更多带宽。然而,集群和 PIM 系统比单核 CPU 更难编程,而且并不是每个问题都从根本上是数据并行的。所以冯诺依曼瓶颈很可能会伴随我们一段时间。
归档时间: |
|
查看次数: |
4211 次 |
最近记录: |