[译]CMT 的神话
from Scali's OpenBlog
https://scalibq.wordpress.com/2012/02/14/the-myth-of-cmt-cluster-based-multithreading/
第一次听到“CMT”这个术语的时候,我有些纳闷,难道我一直忽略了某种多线程的技术吗?但当我检索了一下之后,就明白了,如果你 Google 一下这个词,你应该会被带到 AMD 的宣传材料页,把 CMT 解释成为“基于集群的多线程”或者“集群多线程”。
奇怪的是,在另一个页面(http://dl.acm.org/citation.cfm?id=640477.640525),你会看到不同的解释:
使用高速网络连接的集群已经成为执行计算密集型的并行多线程应用的高性价比平台。
这就很明显了,集群多线程这个概念在 AMD 提出 CMT 之前就已经被使用,而且表述的更为清晰:传统 PC 的集群可以用来构建一台虚拟超级计算机。
所以 CMT 只是农企市场部门的一个“发明”,他们发明了一个听起来像 SMT 的术语,从而和 Intel 的 HyperThreading 技术竞争,虽然 HT 也是个商业概念,但那是 Intel 对它的 SMT 实现的命名,SMT(同时多线程)是实现多线程的一种被广泛认知的概念,Intel 也不是第一个发明 SMT 的,早在 1968 年,IBM就已经开展了这方面的研究。
现在的问题是很多人已经购买了这种处理器,他们认为 CMT 是一种和 SMT 很接近的概念,甚至是等同(equivalent)的,所以他们做了 CMT 和 SMT 的跑分(benchmark),我找到了 Anandtech 几天前的一篇评测文章(http://www.anandtech.com/show/5279/the-opteron-6276-a-closer-look/6)。
农企不止一次宣称集群多线程相比同时多线程(超线程)更能有效面对服务器应用。
我们来看一下用来做评测的 CPU:
Opteron 6276:8模块16线程,包含了两块推土机芯片,每片有12亿个晶体管
Opteron 6220:4模块8线程,12亿晶体管
Opteron 6174:12核16线程,包含了两块芯片,共计18亿晶体管
Xeon X5650:6核12线程,11.7亿个晶体管
问题就出在这里,只需要简单看一下晶体管的数目就知道,Opteron 6276 相比 Xeon 大了一倍,对比它们的性能公平吗?如果你堆了一倍的硬件,那就应该能应对更多的负载,这点上 Opteron 还是有优势的,因为它可以同时处理16个线程,而Xeon只能处理12个。
但是如果我们看一下实际的跑分结果,就知道事实恰恰相反,AMD需要两倍的芯片来达到Intel单芯的性能,更严重的是Intel的单芯片的响应时间比AMD的短。如果这还不能令人信服的话,老架构的Opteron 6174的效率都比 6276高。
当我们在跑分时我们在跑什么?一系列的数据库应用场景,MySQL和MSSQL,都是一些整数应用代码,这时候CMT做了什么?它并没有为整数运算做任何特殊工作!每个模块都有两个独立的整数运算核心,模块内部的FPU才是共享的,但是我们并没有用到它,这个应用场景是最适合CMT的。
我们继续看CPU可用的执行资源。
Opteron 6276在关闭了CMT的时候:
8模块,8线程,每个模块4个ALU;
每个线程有两个ALU,同一个模块内不同线程的ALU不能共享,所以关闭CMT让线程数减半的同时,ALU数目也减半;
共计16个ALU;
在打开CMT的时候:
8模块,16线程,每个模块4个ALU,每个线程2个ALU;
共计32个ALU;
因为CMT没有共享ALU,所以基于CMT的CPU和传统的SMP(对称多处理机)工作起来一模一样,所以你可以期待同样的扩放性(scaling),因为执行单元只属于特定的线程,所以启用CMT只是允许运行更多的线程而已。
Xeon X5650在关闭SMT的时候:
6核心,6线程;
每个核心3个ALU,每个线程3个ALU;
共计18个ALU;
在打开SMT的时候:
6核心,12线程;
每个核心3个ALU,两个线程共享3个ALU;
共计18个ALU;
CMT和SMT的区别就很明显了:SMT在单线程的时候,每个线程相比CMT可以得到更多的ALU,在多线程的时候,每个线程相比CMT的线程要分到相对少的ALU。
这也是为什么SMT给力而CMT不给力,AMD之前的CPU里,每个线程都有3个ALU,但是为了减少模块的大小,AMD现在只能给每个线程分2个ALU了,所以推土机的单线程性能相比过去的Opteron处理器以及Intel Xeon都很捉急。
与此同时,CMT并没有减少很多芯片面积,每个模块包含了4个ALU。是的,每个模块现在是可以跑两个线程了,但是单线程性能如此捉急,只能期待它靠可扩放性堆起来。
CMT带来了什么?什么都没有,芯片面积比友商的大,甚至比自己的老产品大,而Xeon又有非常优秀的单线程性能,即使SMT没有CMT那么好的扩放性,一样可以hold住重负载的多线程场景。但是SMT带来的最大优势是它是一个节省芯片面积的解决方案,如果愿意,Intel甚至也可以和AMD一样把两个芯片放进一个封装(package)里,堆出一个12核24线程的处理器,把AMD爆出翔。
我不确定AMD到底是觉得CMT哪一点“高效”,因为它需要更多的芯片面积,消耗更大的功率,为了追上并不是高端Xeon的性能,AMD就得拿出最好的Opteron 6276来比,可是X5650只是个2.66 GHz的处理器,最高端的X5690主频是3.46 GHz,这也显示出小芯片可以上高频率的优势。
所以咱们也别再装作CMT是个有用的技术了,和SMT相比,只能当作呵呵的商业概念。