看板 C_and_CPP 關於我們 聯絡資訊
不好意思,要回的有點多,所以用回文的再佔版面一篇 @_@a||| ※ 引述《HeyScng ( )》之銘言: : 不好意思 a 大程式的測試結果是不是貼錯拉 : : TestFunction1 elapsed: 499 : : TestFunction1 elapsed: 905 <--這個怎麼會比較慢 抱歉,這我是在推文補充的, 原因是Functor才真正inline,所以差一個function call。 (或許跟編譯選項有關,我沒仔細研究為什麼編譯器不inline。) : 另外我不懂calli和call的差別 call internal看字面不是應該比較快嗎 不是,差別是直接呼叫和間接呼叫, 一個是直接call,一個是透過function pointer間接呼叫。 : 最後我也做分享一下我之前的測試結果 : 首先是有人建議使用Functor 雖然Functor速度較Funcptr快 : 但先前我有比較過Functor與直接套用比較依然較慢 所以最後還是放棄template : use functor: : parallel time: 250 : serial time: 672 : Parallel computation successful! : parallel time: 266 : serial time: 609 : Parallel computation successful! : direct use std::max : parallel time: 109 : serial time: 313 : Parallel computation successful! : parallel time: 110 : serial time: 312 : Parallel computation successful! : 速度差異也算蠻多的 : 不過我的Functor使用的是 : template <typename Return, typename Parameter> : struct FunctionPointerParm2 : { : typedef Return (*Type)(Parameter, Parameter); : }; : 並以 typename FunctionPointerParm2<const T&, const T&>::Type func) 當參數 看起來這不太像functor呢,只是一個……不太甜的糖-.-a。 最終還是傳了一個function pointer過去。 functor重點是operator(),讓一個object可以當成function來用。 functor更深的意義就是編譯器會知道型態, 知道型態後就知道是哪個operator, 所以可以變成靜態的,而不是function pointer這種動態、跟address有關的東西。 (不考慮virtual =_=|||) : 以上測試使用 dll 提供 windows form(/clr) 使用所得的速度 : 發現自己的實力只能看結果 卻不知道原因 深深覺得自己該學的東西還很多 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 219.71.32.69
HeyScng:原來我一直用錯Functor了 =.=a 不太甜的糖 形容的真好 02/10 22:41
HeyScng:所以 calli 是直接呼叫 比較快的意思嗎 受教了 謝謝 02/10 22:43
a127a127:不是,call反而是直接呼叫,那個i或許是indirect?不確定 02/11 07:17