Re: [問題] 相同程式 (/clr:pure) (/clr)速度差異

看板C_and_CPP作者 (TDYa127)時間14年前 (2011/02/10 11:26), 編輯推噓1(102)
留言3則, 2人參與, 最新討論串9/9 (看更多)
不好意思,要回的有點多,所以用回文的再佔版面一篇 @_@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

02/10 22:41, , 1F
原來我一直用錯Functor了 =.=a 不太甜的糖 形容的真好
02/10 22:41, 1F

02/10 22:43, , 2F
所以 calli 是直接呼叫 比較快的意思嗎 受教了 謝謝
02/10 22:43, 2F

02/11 07:17, , 3F
不是,call反而是直接呼叫,那個i或許是indirect?不確定
02/11 07:17, 3F
文章代碼(AID): #1DKyj9R_ (C_and_CPP)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 9 之 9 篇):
文章代碼(AID): #1DKyj9R_ (C_and_CPP)