[问题] SSE指令跟多执行绪同时用有助于效能吗?

楼主: wtchen (没有存在感的人)   2016-11-13 03:15:10
开发平台(Platform): (Ex: Win10, Linux, ...)
Lubuntu 16.04
编译器(Ex: GCC, clang, VC++...)+目标环境(跟开发平台不同的话需列出)
gcc 5.4.0
额外使用到的函数库(Library Used): (Ex: OpenGL, ...)
pthread, SSE1-4/AVX
问题(Question):
最近帮忙作code review,看到有人用SSE做计算提高效能。
可是还用多执行绪来跑SSE。
我看了一下,Intel core i7 是每个core有
- 8个 128-bit XMM暂存器(SSE用)
- 16 个 256/512-bit 的 YMM(YMM0-YMM15) 暂存器(AVX用)
不管是XMM或YMM空间都很有限。
如果我写个程式(prog)使用数个thread同时跑,
每个thread都要用满8个XMM暂存器,那么:
1.如果两个thread占用一个core,会不会因为两个thread都抢著用XMM使得效能大幅降低?
我是说因为一个thread要用XMM就把另一个thread放在XMM里的data踢出去?
(因为XMM load/unload也是有点耗时间)
2.如果刚好某个背景程式或浏览器也在同时使用XMM,
那原本prog的效能是不是也会受影响?
3.如果同时使用XMM/YMM的process会互相影响,
有无办法可以侦测XMM/YMM是否被使用(如果在使用中我就用普通方法)?
4. 如果是ARM上面的SIMD/NEON,其效应也是如上?
感谢回答。
作者: LiloHuang (十年一刻)   2016-11-13 09:07:00
context switch 会产生的状况,无论 XMM 或 GPR 都会有SIMD + MT写得好应该是会更快,每颗核心都有独立的 XMM建议用 Intel VTune 做更多的性能分析
作者: MOONRAKER (㊣牛鹤鳗毛人)   2016-11-13 12:49:00
还满幽默的,写asm吗?不然怎么知道用满全部暂存器。
作者: Caesar08 (Caesar)   2016-11-13 15:37:00
1指的不就是thread context switch?
作者: littleshan (我要加入剑道社!)   2016-11-13 19:20:00
你是要问 hyper-thread 是否对 xmm 指令集有效吗?如果不考虑 hyper-threading,算法又有良好平行化那 2 core 跑 2 thread 当然会比较快1 core 跑 2 thread 因为多了 overhead 就会慢一点
作者: LiloHuang (十年一刻)   2016-11-13 22:14:00
假设没有 HT 的情况,每个 core 都有自己的一组暂存器假设有 HT 的情况,每个 logic processor 都有自己的architecture state,没记错里面也有各自的 GPR 跟 XMM你在问题多数都跟 context switch 怎样运作有关实务上 SIMD + MT 性能会增加,建议实际去跑量测时间你的所谓 SIMD 暂存器很有限,其实通用暂存器也很有限相同的问题,在没有把程式改成 SIMD 之前不就有了 :P反而是得多注意 false sharing 的问题比较实际
作者: Caesar08 (Caesar)   2016-11-13 22:38:00
context switch的部分会根据作业系统而定吧,例如一个有6 core的CPU,是一次一个process,然后可以使用6thread,还是一次6个process,每个只能使用一个thread如果在multi core的machine上面,那情况就更复杂,还要考虑thread被移到另一个CPU的情况上
作者: LiloHuang (十年一刻)   2016-11-13 22:41:00
同意 context switch 得看系统,标题是讨论 SSE + MT我就来贴个 Intel 的一篇文章 https://goo.gl/qegnRl可以自己看看 SIMD + MT 有没有帮助...看数据最清楚
作者: jaid (jaid)   2016-11-14 04:22:00
可以用affinity

Links booklink

Contact Us: admin [ a t ] ucptt.com