7

SSE 寄存器是否在逻辑处理器(超线程)之间共享或复制?我能否期望 SSE 繁重程序的并行化与普通程序具有相同的加速(英特尔声称具有超线程的处理器为 30%)?

4

2 回答 2

6

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

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

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

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

于 2009-10-10T15:27:29.473 回答
5

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

于 2009-10-09T06:54:09.343 回答