開發平台(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,其效應也是如上?
感謝回答。