[問題] SSE指令跟多執行緒同時用有助於效能嗎?
開發平台(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,其效應也是如上?
感謝回答。
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 90.27.42.14
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1478978113.A.432.html
推
11/13 09:07, , 1F
11/13 09:07, 1F
→
11/13 09:09, , 2F
11/13 09:09, 2F
→
11/13 09:09, , 3F
11/13 09:09, 3F
→
11/13 12:49, , 4F
11/13 12:49, 4F
我就是不懂暫存器是怎麼管理的,
如果我一次load 10個它會怎麼搞?
→
11/13 15:37, , 5F
11/13 15:37, 5F
我對pthread不熟,不知道pthread會不會對同一個process的threads
做切換(無sleep的情況下),一時不知道怎麼找關鍵字。
※ 編輯: wtchen (90.27.42.14), 11/13/2016 16:53:16
※ 編輯: wtchen (90.27.42.14), 11/13/2016 16:54:44
推
11/13 19:20, , 6F
11/13 19:20, 6F
→
11/13 19:22, , 7F
11/13 19:22, 7F
→
11/13 19:22, , 8F
11/13 19:22, 8F
→
11/13 19:22, , 9F
11/13 19:22, 9F
那如果hyper-thread的情形下,
xmm會不會因為thread交互進行而把增加load/store的手續?
因為xmm只有8個可用....
※ 編輯: wtchen (90.27.42.14), 11/13/2016 20:29:16
推
11/13 22:14, , 10F
11/13 22:14, 10F
→
11/13 22:14, , 11F
11/13 22:14, 11F
→
11/13 22:19, , 12F
11/13 22:19, 12F
→
11/13 22:21, , 13F
11/13 22:21, 13F
→
11/13 22:23, , 14F
11/13 22:23, 14F
→
11/13 22:26, , 15F
11/13 22:26, 15F
→
11/13 22:27, , 16F
11/13 22:27, 16F
→
11/13 22:27, , 17F
11/13 22:27, 17F
→
11/13 22:38, , 18F
11/13 22:38, 18F
→
11/13 22:39, , 19F
11/13 22:39, 19F
→
11/13 22:40, , 20F
11/13 22:40, 20F
→
11/13 22:40, , 21F
11/13 22:40, 21F
→
11/13 22:41, , 22F
11/13 22:41, 22F
推
11/13 22:41, , 23F
11/13 22:41, 23F
→
11/13 22:42, , 24F
11/13 22:42, 24F
→
11/13 22:43, , 25F
11/13 22:43, 25F
所以看起來如果能弄到一個Core一個thread可以有最大效能。
如果有context switch,那xmm裡的變化(load/store)被變成context switch的成本。
這樣了解了。
話說回來我也看了對方做的SSE效能測試的數據,變化超大,據說跟CPU散熱有關。
還真的挺有趣。
※ 編輯: wtchen (90.27.42.14), 11/13/2016 23:13:00
→
11/14 04:22, , 26F
11/14 04:22, 26F