[問題] 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