編輯3:該圖像爲全尺寸版本的鏈接。對不起,圖片的文字,但圖表很難複製/粘貼到文本表。什麼可能導致相同的SSE代碼在相同的函數中運行速度慢幾倍?
我有以下VTune™可視化簡檔用於與icc --std=c++14 -qopenmp -axS -O3 -fPIC
編譯的程序:
在該簡檔中,指令兩個簇在裝配視圖突出顯示。儘管指令是相同的並且順序相同,但上部羣集的時間比下部時間少得多。兩個集羣都位於相同的功能內,顯然都稱爲n
次。每當我運行探查器時,都會發生這種情況,在我現在使用的Westmere Xeon和Haswell筆記本電腦上(使用SSE進行編譯,因爲這正是我正在尋找和正在學習的內容)。
我錯過了什麼?
忽略可憐的併發,這很可能是由於筆記本電腦限制,因爲它不會在桌面至強機上發生。
我相信這不是一個微優化的例子,因爲這三個加起來相當於總時間的體面百分比,我對這種行爲的可能原因真的很感興趣。
編輯:OMP_NUM_THREADS=1 taskset -c 1 /opt/intel/vtune...
相同的配置,儘管稍低的CPI這個時候。
數據對齊 –
@SegFault然後,它會從RAM或高速緩存到寄存器,這是'movapsx'指令的加載時間在這裏?它只是FPU操作,據我瞭解。 – iksemyonov
多線程?你的圖像很難閱讀,但也許FPU忙於其他的東西在其中一種情況下... –