我希望能夠手工預測確切的任意算術運算時間(例如,沒有分支或內存,盡管這也很好),但考慮到指令重新排序,超標量,延遲,CPI等要實現(xiàn)此目標,必須遵循哪些/描述規(guī)則?我想我已經弄清了一些初步規(guī)則,但是我無法找到將任何示例代碼分解到如此詳細級別的參考,因此我不得不做出一些猜測。(例如,英特爾優(yōu)化手冊幾乎沒有提到指令重新排序。)至少,我正在尋找(1)確認每條規(guī)則正確或對每條規(guī)則的正確陳述,以及(2)我可能忘記的任何規(guī)則的列表。每個周期發(fā)出盡可能多的指令,從當前周期開始按順序開始,并且可能比重新排序緩沖區(qū)的大小提前。在以下情況下,可以在給定的周期內發(fā)出指令:沒有影響其操作數(shù)的指令仍在執(zhí)行。和:如果是浮點指令,則在發(fā)出每個浮點指令之前(浮點指令具有靜態(tài)指令重排序)。和:該指令在該周期有一個功能單元。每個(?)功能單元都是流水線式的,這意味著對于給定功能類的CPI(每個模塊中的CPI不確定,例如,addps并subps使用相同的功能單位?如何確定?)。和:4在此循環(huán)中,已經發(fā)出了少于超標量寬度(通常為)的指令。如果沒有指令可以發(fā)出,則處理器根本不會發(fā)出任何指令,這種情況稱為“停頓”。作為示例,請考慮以下示例代碼(用于計算叉積):shufps xmm3, xmm2, 210shufps xmm0, xmm1, 201shufps xmm2, xmm2, 201mulps xmm0, xmm3shufps xmm1, xmm1, 210mulps xmm1, xmm2subps xmm0, xmm1我嘗試預測Haswell的延遲看起來像這樣:; `mulps` Haswell latency=5, CPI=0.5; `shufps` Haswell latency=1, CPI=1; `subps` Haswell latency=3, CPI=1shufps xmm3, xmm2, 210 ; cycle 1shufps xmm0, xmm1, 201 ; cycle 2shufps xmm2, xmm2, 201 ; cycle 3mulps xmm0, xmm3 ; (superscalar execution)shufps xmm1, xmm1, 210 ; cycle 4mulps xmm1, xmm2 ; cycle 5 ; cycle 6 (stall `xmm0` and `xmm1`) ; cycle 7 (stall `xmm1`) ; cycle 8 (stall `xmm1`)subps xmm0, xmm1 ; cycle 9 ; cycle 10 (stall `xmm0`)
預測現(xiàn)代超標量處理器上的操作延遲需要考慮哪些因素,我該如何手動計算它們?
四季花海
2019-10-12 13:36:46