从细小而且集成度十分高的片上体系,到大型数据中心,多核革新现已呈现出烽烟燎原之势。那么,当你在规划自己的体系时,怎样才能把多核技能发挥到极致呢?别的需求留意的是,要在一个多核体系中把每一份核算才能都充分运用起来,并不是一件简略的事。
当今的多核处理器绝不仅仅是把多个处理器放进同一个芯片那么简略。抢先的处理器供给商在其产品中植入了许多有用的特别功用。例如,散列(hashing)、高速缓存(caching)、处理器间通讯、中止办理和内存办理等。这些功用特性假如能够善加运用,就会让AMP架构高功率地运转起来,这就需求在软件上进行专门的优化。
咱们知道,多核处理架构根本上能够分为对称多处理(SMP)和非对称多处理(AMP)两种。SMP架构的特征是同等地看待每一个处理器内核,不会特别指定哪个内核或许哪些内核去履行哪个特定的使命,完全由操作体系来均匀地分配和协调内核之间的作业。AMP架构的特征是与SMP相反,不是同等地看待每一个处理器内核,而是把特定的使命分配给特定的内核来运转。这样做的优点是减少了重复性作业的相关数据切换,然后取得较高的运转功率。
例如,你能够拿到某一款典型的多核处理器–例如Freescale T4240,它具有12个多线程的内核,每个内核可供2个线程来调度同享。12个内核被分为3组,每4个内核为一组,同享2MB的Cache。相信你现已感觉到,这个体系仍是挺杂乱的。那么,你要让一切的内核都来运转单一一个OS Domain,并由它来调度一切的线程,仍是把悉数的核算才能划分红多个独立的OS Domain,各自承当不同的使命?哪一种计划会比较好呢?实际上,这有必要根据运用类型来进行取舍。这个运用在并行处理时是否满足安全?它归于数据密集型运用吗?能否发挥同享Level 2 Cache所具有的优势,很可能是你做出判别时应该要点考虑的一个要素。
选用内置GPU的一组规范CPU,例如Intel Core i7,也是常用的硬件计划。这类体系可在4个内核中完成8个超线程,而且运用GPU来完成杂乱的通用核算。关于典型的核算密集型运用来说,尽管开发这种CPU-GPU混合异构架构会添加体系的杂乱度,但由此带来的功能提高依然具有很大的吸引力,这让咱们诲人不倦地进行测验。
一旦理解了对运用怎么进行分化,咱们就有了挑选何种办法和言语来开发这个运用的根据。假如选用多操作体系架构,不论是SMP仍是AMP,一般都有必要运用同享内存在不同OS Domain之间传递数据。尽管这不是仅有的方法,但却是常用方法–把带有一些数据的指令传递给某个OS Domain,然后由一个中止程序来做出相应的处理。可是,有什么API能够运用呢?
这里有好几种挑选。多核联盟(Multicore Association)推出了MCAPI (Multicore Communication API)规范,如图1所示。这是专为multi-OS环境而规划的,能够建构在相关的技能规范和MRAPI (Multicore Resource API)之上。MRAPI作为一种资源,为多OS Domain之间供给了同享内存。
图1:根本的多核软件装备
关于这种架构,其他可供挑选的架构是相似的自带专用API。不管你做出何种挑选,都期望它是便于装备和保护的,这样才是最有利于久远开展的最佳计划。其间一个重要的影响要素是所选接口本身的资源耗费状况。体系中很多的内核一般都是同享内存的,其数据传输速度远远高于以太网。假如你把运用分割为在多个OS Domain中运转的原因之一是避免Cache Thrashing (多个线程在履行中读写同一个cache line,进入竞赛状况),那么下降接口对资源的耗费占用就显得尤为必要。