操作系统调度与优化
让每个芯片拥有多个内核和每个内核拥有多个线程肯定将影响操作系统的设计。同一个芯片或者CPU上面的两个线程能够以更快的速度同步运行,这在某些方面是有帮助的。然而,在同一时间有更多的线程在运行(也许每个线程运行的速度都很慢),这些线程运行速度减缓和停止的机会就会增加。采用细粒度锁或者迄今为止更好的细粒度锁技术的免锁定数据结构和代码在这里是有帮助的。当每个内核有多个线程的时候,一个因锁定而减缓速度的线程不会降低很多性能。
从操作系统和应用程序方面说,目前能够适应64位单线程CPU的软件也应该适用于少量的高度TLP优化的处理器。由于TLP设计的带宽密度较大,系统带宽很容易被耗尽,因此,采用NUMA(非一致存储访问)优化以增加本地内存将变得更加重要。
对于仅能够运行一个线程的CPU内核来说,无论每个芯片上有多少个CPU内核,操作系统都将以相同的方式调度各项任务。然而,对于多线程CPU内核来说,在某种情况下可能还需要更多的优化,以便把一个运行的线程从一个CPU内核转换到另一个内核。例如,如果一个CPU正在运行4个线程,而另一个CPU正在运行9个线程,最好是让每个CPU运行两个线程。这就需要操作系统提供支持,也许还需要芯片的一些支持。
软件优化
减少执行一个任务所需要的指令数量有助于提高整体效率,为其它的线程保留更多的资源。然而,这可能会降低一个线程的性能。由于TLP优化设计可能更多地限制带宽,而不是限制延迟,使用更紧凑的数据格式或者其它技术减少主内存带宽的需求可能是有帮助的。这还会改善缓存的碰撞率。但是,这将使代码更复杂并且增加需要执行的指令数量。软件优化似乎没有任何简单的答案。
很多开发人员也许会认为,由于单内核和单线程处理器还要存在一段时间,现在对TLP优化的处理器做出重大的改变所需要的努力太大了,不值得。很多服务器应用程序现在都太复杂。
对于商业软件来说,这些软件要在短期内做出重大改变以更好地适应多内核和多线程处理器是不太可能的。这还意味着处理器设计人员不能设想现有的应用程序能够为满足他们的需求而做出改变。换句话说,处理器设计人员应该确保现有的代码能够尽可能快地运行。