SSE寄存器是否在逻辑处理器之间共享或重复(超线程)?对于SSE重程序而言,我是否可以期望与正常程序相同的加速(英特尔声称对于具有超线程的处理器为30%)?
从英特尔的文档中我不清楚,超线程处理器是在线程之间共享寄存器文件还是有两个不同的寄存器(我想它们实际上是不同的,因为否则,HT线程之间的上下文切换时间会非常长,但这纯粹是一个猜测)。
至于提速-这将取决于您的指令组合和调度。请记住,HT CPU没有任何额外的执行资源(ALU,加载/存储单元等),性能提高是由于这些资源的利用率更高,因为典型的代码(尤其是在现代处理器上)花费了合理的数量。在继续执行之前,等待内存加载和存储完成的时间被阻塞。HT允许对这些负载和存储进行交织,以便一个线程在读取时停顿,另一个线程可以切入并开始使用以前一直处于空闲状态的执行资源。
我猜想在多线程SSE程序中看到的性能提高将取决于内存操作数与算术操作数的比率。例如,如果您的SSE程序从内存中加载了4个SSE寄存器,对其进行了10,000次SSE操作,然后将这4个寄存器写回,那么HT能够重叠内存访问就不会带来很多好处,因为您的程序运行时的99%将用在SIMD ALU中,而不用在内存访问上。
另一方面,如果您的程序的计算量很大,那么对您的程序进行多线程处理可以大大提高多核处理器的性能,并且可能比30%的改进要好得多,因为在这种情况下,您的代码可以访问Java的全部执行资源。一次多个核。
| 归档时间: |
|
| 查看次数: |
2829 次 |
| 最近记录: |