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

看板C_and_CPP作者 ( )時間14年前 (2011/02/10 09:58), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串8/9 (看更多)
不好意思 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
文章代碼(AID): #1DKxQwke (C_and_CPP)
討論串 (同標題文章)
以下文章回應了本文
完整討論串 (本文為第 8 之 9 篇):
文章代碼(AID): #1DKxQwke (C_and_CPP)