Re: [問題] 相同程式 (/clr:pure) (/clr)速度差異
不好意思 a 大程式的測試結果是不是貼錯拉
: TestFunction1 elapsed: 499
: TestFunction1 elapsed: 905 <--這個怎麼會比較慢
另外我不懂calli和call的差別 call internal看字面不是應該比較快嗎
最後我也做分享一下我之前的測試結果
首先是有人建議使用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) 當參數
以上測試使用 dll 提供 windows form(/clr) 使用所得的速度
發現自己的實力只能看結果 卻不知道原因 深深覺得自己該學的東西還很多
※ 引述《a127a127 (TDYa127)》之銘言:
: ※ 引述《HeyScng ( )》之銘言:
: : 前文恕刪
: : 的確我也認為template instantiation在編譯期
: : 但實際在 /clr 選項編譯下(win32 console) 速度卻有明顯差異
: : 測試程式碼如連結 http://nopaste.csie.org/a6909
: : 執行結果:
: : TestFunction1 elapsed: 2312
: : TestFunction1 elapsed: 422
: : 因此才懷疑 template 誤用或希望可藉compiler設定加快速度
: : 因為會使用 Windows form 與 許多dll 因此必須使用 /clr
: : 不過主要目的只是想要重覆程式碼少一點
: : 所以如果有其他寫法可以達成 也請指教
: : 謝謝
: ==
: 看程式碼和執行時間,或許跟inline有關。
: 猜測前面的變成傳function pointer,要多一次function call,
: 而後面的直接被inline掉了。
: ==
: 上面的猜測是錯的。
: 事實上根本沒inline,
: 有差的或許是是Calli和Call的差別?
: 前者:
: ldarg.s 6 ; func$
: calli D:I(II)
: 後者:
: call ??$ReturnMax@G@@$$FYAABGABG0@Z
: 不過/clr:pure在那段ASM上看不出差別,
: 可能主要的差距是因為.NET VM做的事?
: 不過結論還是一樣,
: 能用functor就盡量用functor吧,:
: 環境:
: Microsoft Visual C++ 2008
: Intel E3200@3.2GHz
: 修改前:
: TestFunction1 elapsed: 84334
: TestFunction1 elapsed: 842
: 用functor的程式碼:
: http://nopaste.csie.org/97383
: 修改後:
: TestFunction1 elapsed: 499
: TestFunction1 elapsed: 905
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.96.63.154
討論串 (同標題文章)
以下文章回應了本文:
完整討論串 (本文為第 8 之 9 篇):