Re: [問題] 相同程式 (/clr:pure) (/clr)速度差異
不好意思,要回的有點多,所以用回文的再佔版面一篇 @_@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
02/10 22:41, 1F
→
02/10 22:43, , 2F
02/10 22:43, 2F
→
02/11 07:17, , 3F
02/11 07:17, 3F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 9 之 9 篇):