SSE和超线程

时间:2009-10-09 06:35:29

标签: simd hyperthreading

SSE寄存器是否在逻辑处理器之间共享或重复(超线程)? 对于SSE重程序而言,我是否可以期望与正常程序相同的加速(英特尔声称对于具有超线程的处理器为30%)?

2 个答案:

答案 0 :(得分:5)

我不清楚英特尔的文档中是否超线程处理器在线程之间共享寄存器文件或者有两个不同的(我猜它们实际上是不同的,因为否则HT线程之间的上下文切换时间会非常高,但是这纯粹是猜测。)

关于加速 - 它取决于你的指令组合和日程安排。请记住,HT CPU没有任何额外的执行资源(ALU,加载/存储单元等),性能的提高是由于更好地利用这些资源,因为典型的代码,特别是在现代处理器上,花费了合理的数量时间阻塞等待内存加载和存储在执行之前可以继续。 HT允许这些加载和存储交错,以便一个线程在读取时停止,另一个线程可以切换并开始使用先前一直处于空闲状态的执行资源。

我猜想你会看到多线程SSE程序会带来什么样的性能提升将取决于内存操作与算术操作的比率。例如,如果您的SSE程序从内存加载4个SSE寄存器,对它们执行10,000个SSE操作,然后将4个寄存器写回,那么HT不太可能看到HT能够重叠内存访问的优势,因为99%的程序运行时将用于SIMD ALU而不是内存访问。

另一方面,如果您的程序计算量很大,那么对程序进行多线程处理可以大大提高多核处理器的性能,并且可能比30%的改进更好,因为在这种情况下您的代码可以访问完整的一次执行多个核心的执行资源。

答案 1 :(得分:4)

它们在逻辑上是重复的 - 每个线程都有自己的状态。在物理上,它们可能是共享的 - 取决于您的超线程实现。