以下的兩個設定很簡單, 就是把 SSE 選項全拿掉, 但 OpenMP 仍兩者都有.
vc9:
剩 /fp:fast, Enhance Instruction Set 為 No,
其它設定跟上篇一樣, 15531mS
icc11:
/QAXSSE? 與 /QXSSE? 全部取消, /Qfp-Speculationfast 不變, /fp:fast 不變.
15562mS
兩者差距幾乎可以視為是 OS 的干擾而已了...
跟之前 16 秒與 18 秒的差距, 老實講, 這是意料中的事情. 在這之前我把程式裡 feature filter 的部份用 assembly 下去寫 (因為這部份花掉時間佔 95% ), 結果是比 c code 還慢, 當時測試的結論是 SIMD code 如果執行時間很長 (執行超過 15mS 以上) 就會碰上 OS 做 content switch 時做 XMM register 備份, 會額外花掉很多時間在這上面, 而且即使是 x64 OS 下都不例外. 綜合之前跟別人討論 x86 SIMD coding 花的時間反而比一般 float 久的一個結論: "會說用 SSE 跑的會比較快, 沒寫過程式的人才會這樣說".
老實講, 不管是 AVX 還是 LNI, 多少抱持著看笑話的心態去看這些指令集.
還有一點補充就是, 這個程式不管是 train 還 detection 都是自己寫的, 不是 OpenCV 的 code 也不是用 IPP.
沒有留言:
張貼留言