1
英特爾酷睿2雙核有3個SSE單元。這些3個單元允許3個SSE指令被paralelly運行(1),例如:英特爾Core 2 Duo的3個SSE單元的優化mullps/addps指令
rA0 = mullps(rB0, rC0); \
rA1 = mullps(rB1, rC1); > All 3 take 1 cycle to be scheduled (* - see Remarks).
rA2 = mullps(rB2, rC2); /
它也是已知的,使得每個SSE單元由2個模塊:一個用於添加(減法),和一個用於乘法(除法)。後者允許運行mullps-ADDPS指令序列並行(2),例如:
rA0 = mullps(rB0, rC0); \
> All 2 take 1 cycle to be scheduled for 1 SSE module.
rA1 = addps(rB1, rC1);/
問題是followig:多少個循環,每個下面的2代碼段利用被調度?
代碼答:
rA0 = mullps(rB0, rC0); \
rA1 = mullps(rB1, rC1); |
rA2 = mullps(rB2, rC2); \ Do all 6 execute in one step? (See paragraph (2))
rA3 = addps(rB3, rC3); /
rA4 = addps(rB4, rC4); |
rA5 = addps(rB5, rC5); /
代碼B:
rA0 = mullps(rB0, rC0); \
rA1 = addps(rB1, rC1); |
rA2 = mullps(rB2, rC2); \ Do all 6 execute in one step? (See paragraph (1))
rA3 = addps(rB3, rC3); /
rA4 = mullps(rB4, rC4); |
rA5 = addps(rB5, rC5); /
哪個指令排序的方式,我應該喜歡,A還是B?
更具體地:
- 是否有可能3次MULPS分發到3個SSE乘法單元(1),並在同一時間(2),以ADDPS分配到它們各自的SSE加成單元,從而導致總每個計劃週期有6條指令?
- 如果我先運行N個mullps然後N個addps然後 - 哪個N是最優的?
備註
- 由 '計劃' 我的意思是吞吐率。
哇!哇!在這裏。 Core 2處理器有3個SSE單元。但他們做了不同的事情。 1用於加/減。 1爲乘法,1爲混洗。在這兩個示例中,您都不會獲得超過3個週期的吞吐量。你會想讀一些關於[OOE](http://en.wikipedia.org/wiki/Out-of-order_execution)的內容。所以訂單不應該太重要。 – Mysticial
即使你確實有一個能夠同時進行兩種操作的設備,你仍然會有一個通向它的單一端口 – Leeor
呵呵......感謝您的澄清。將閱讀文章。 –