为什么要采用多核呢?如果设计一款两倍于原来大小的处理器,性能并会不增加到原来的两倍,性能大概只会作平方根的增长,所以尺寸加倍并不会带来同等数量级的性能增长,只会带来大概1.4倍于原来的性能,即增长40%。这个被称为Pollack定律(由英特尔工程师Fred Pollack定义),在单核系统中已经得到了证明。而芯片制造商力图采用多个核心来提高性能和速度提升的系数。
但设计一个多核系统面临一些新的挑战。
通信的鸿沟
核心之间的通信也许是最关键的问题,因为在一些系统中会起到至关重要的作用。无需特别的测量,一般通信量的增加与核心的数量n是一个二次方程(n+1)*n/2的关系,因此一个四核系统在通信数据量上相比单核系统会有成十倍的增加,一个16核系统会增加到原来的136倍,一个256核系统会增加超过32,000倍!因此一个核心之间的灵活的通信系统对于多核系统的工作是最基本的。
有几个解决方案是采用中心存储器来缓冲,不过当所有的处理器核都与存储器进行内部通信时就会出现问题。一般会采用信息包开关网络或其他架构。
我们可以做一个有趣的类比,假设这是一个人类组织,如果人数增多,交流就会变得困难,甚至会带来瓶颈。如果是一个2个人或4个人的小团体,交流起来就简单得多,如果人数超过20个或更多,就需要一个更有效的交流架构,比如每周例会、技术小组等等。
实践表明一个6到8个人的小组是最为有效的。更大的小组需要合理的架构和其他形式的咨询和协作。在多核系统中也是一样的道理。
人为设计因素
人为设计因素同样会影响多核系统的架构。在1990年我曾经在荷兰埃因霍温作个一个技术讲演,我将设计分解为一个一个的模块和模块之间的互联。同样,连接的数目也同模块数是一个二次方程的关系。
解决复杂问题的方法是应用和归纳概念的能力。这里,一些元件被看成是宏元件。
自下而上的设计,简单的分解和构造各个元件直到达到最基本的构成 -- 逻辑门或是运算单元,例如,采用分级的方法,复杂的二次方程问题可以简化为线性问题。
在设计一个多核系统中完成通信和设计复杂性的管理,选择合适的架构、设计思想、工具的应用等等都非常重要。
功耗的平衡
降低多核系统的功耗和散热处理是工程师面临的另一个主要的问题。降低功耗可以通过限制每个核心的运算来实现,称为"voltage scaling" -- 每个核心的频率和供电电压可以根据每个处理核的任务运算两来进行功耗优化。
另一个要考虑的因素是可以由进程推断的并行处理的数量,如果并行运算很少,采用多核来处理也就没有什么优势。
多线程是处理并行运算的一个方法。在通信处理器里面写软件是另一个方法。这些技术由特殊的运算支持,以维持系统的精确度和一致性。
【编辑推荐】