多线程多核处理器问世几年来,在AMD和Intel的轮番推动下双核、双核四线程CPU已经是最基本的配置,四核以及四核八线程也不是少数人的玩物了,总之就是多线程在物理基础上已经普及,但是日常应用中八线程并不能总是比双线程要快。
其中的原因有软件/游戏开发商对多核优化不够造成的,但是CPU自身也存在一定限制,比如传统操作中一个线程访问了某部分内存数据之后就会通过一个“lock”锁操作来保证数据的统一性,又分出粗粒度锁定(Coarse-grained thread lock)以及细粒度锁定(Fine-grained thread lock),无论是哪种锁都存在多线程并行的效率问题,因为锁操作是互斥的。
Intel早在2006年的IDF上就公布了这一问题的解决方案,那就是改用Transactional Memory(事务型内存),这一技术早在服务器处理器上应用多年,但在桌面CPU中还没有应用过,要等到Haswell这一代才能有实际应用。
Intel早前在其官方Blog上发表了一篇名为“Transactional Synchronization in Haswell”的文章,介绍了Haswell架构将会支持TSX扩展指令,简单来说就是TSX将允许程序员指定事务型同步代码空间,使得目前使用粗粒度线程锁定的程序更自由地使用细粒度线程锁定,进而提高多线程效率和性能。
举个简单的例子,你在编辑excel表格,如果你打算同时编辑两份拷贝,excel就会提示你该文件正在编辑,只能以只读方式打开但不能编辑,这种情况叫做粗粒度线程锁定,这种锁定比较简单,很容易实现,但是效率不高。
细粒度线程锁定则可以实现自由度更高的数据同步,还是前面的例子,如果使用细粒度线程锁定,那么每个线程都可以操作不同纵列的数据,明显提高了CPU效率,不过这样做也有更大的风险,比如数据出错的几率更大,特别是多个线程同时向一个区域写入数据时,而粗粒度线程锁定则可以避免这个问题,同时保持不需要的核心处于休眠状态,更节能。
为了避免出错,程序员往往钟爱粗粒度线程锁定,而TSX扩展的设计目的就是评估软硬件状况并为程序员提供无错的细粒度线程锁定。
Intel在当时的软件仿真演示中表示使用事务内存技术后性能可以提升1-3倍,比如基于锁操作的测试需要10.4秒,而使用事务内存处理只需要4.6秒,性能是前者的2倍还多。
Haswell将是消费级处理器中首次使用事务内存技术的架构,虽然Intel已经展示了该技术的良好前景,特别是在复杂的多线程应用中其理应有更好的表现,不过回到现实中这一技术还需要系统在内存管理和线程调度上做相应的优化,具体性能提升只能拭目以待。