我想計算兩個向量之間的角度,但我看到這些反向trig操作,如acos和atan使用大量的cpu週期。有沒有一種方法可以在不使用這些功能的情況下完成計算?另外,當你進行優化時,它們是否真的會打到你?是否acos,stl中的atan函數使用很多cpu週期
回答
STL中沒有這樣的功能;那些在數學圖書館。
另外,你確定這裏很有效率嗎?你有沒有在熱點地區查看是否有這樣的函數調用?你知道使用這些功能時性能不好嗎?在進行這種微型優化之前,您應該始終回答這些問題。
爲了給出建議,你打算怎麼處理它?它有多準確?
如果您需要高精度的實際角度,您可能無法做得更好。如果您需要進行一些比較,則可以使用絕對值和點積來獲得角度的餘弦。如果你不需要精確的話,你可以做到這一點,並使用一個acos查詢表。如果您將它用作另一個計算的輸入,您可能可以使用一些幾何圖形或三角形標識來避免找到反餘弦或反正切。
在任何情況下,一旦您完成了要做的優化工作,請在計時運行前後進行測試,看看您是否做出了重大改變。
+1用於更正數學庫的來源,並提及關於分析和精確度。 – 2010-06-02 03:10:06
++對,我喜歡關於使用點積的觀點,儘管我想你需要角度的正弦來進行比較。 – 2010-06-02 12:04:49
這完全是實現定義的。當然,您可以使用第三方實現或近似方法,但首先應該確定瓶頸是什麼。
如果這些函數確實是瓶頸,而且只需要一個近似值,那麼可以嘗試使用這些函數的擴展的幾個第一項。下一個未使用的項的大小代表近似值中的誤差。
其他人在這裏被Wolfram Alpha吹走了?你可以問任何事情!試試「空載歐洲燕子的空速是多少?」。 – 2010-06-01 22:34:45
的ATAN和ACOS實現依賴於編譯器和優化設置。許多實現將使用表格並插值以獲得最接近的值。
首先嚐試以下步驟:
- 剖析應用找到 大部分的執行時間是花在 。
- 重新設計此區域以獲得更好的效果 表現。
- 考慮Data Driven Design 加速您的程序的技巧。
- 更改邏輯以減少分支和 if語句,考慮使用 Karnaugh maps來簡化 邏輯。
- 1. J2ME中的Asin,Acos,Atan
- 2. 是否可以租用CPU週期?
- 3. 爲Java函數計算CPU週期
- 4. CodeIgniter - ses_destroy()使用很多CPU
- 5. R函數中點/週期的使用
- 6. 即使RAM很慢,一個週期指令是否需要一個週期?
- 7. Hadoop能否限制CPU空閒週期?
- 8. 如何使用FFT查找周期函數的週期?
- 9. 確定CPU的操作碼週期數
- 10. 如何用xCode4測量iPhone4應用程序中C函數的CPU週期?
- 11. 相對於最大CPU頻率的CPU/CPU進程/ CPU週期
- 12. JAVA NIO是否因持續循環而浪費CPU週期?
- 13. declar函數中使用了很多次
- 14. 在Blackberry 4.2上調用atan函數JDE
- 15. 我的'isNullOrEmpty'函數是否很好?
- 16. 如何caluate CPU週期爲的QueryPerformanceCounter的
- 17. STL Vector是否調用未分配對象的析構函數?
- 18. Java應用程序消耗更多CPU週期
- 19. 如何改變了很多的「日期」 s到「週期」
- 20. 在很多元素上使用函數
- 21. 使用SDL和我的程序使用CPU很多
- 22. rmi.transport.tcp.tcptransport Connectionhandler消耗很多CPU
- 23. 在JavaScript中使用箭頭函數是否被認爲是很好的做法?
- 24. 在函數python中定義函數是否很好
- 25. 我想重複摺疊(使用額外的CPU週期)
- 26. 條件等待線程消耗太多的CPU週期
- 27. 是否有任何函數對象在STL中創建對象?
- 28. 。它與真實的CPU週期是如何對應的?
- 29. 如何確定日期是否是週末(不使用lubridate)
- 30. Redis的CPU使用率是否正常?
您是否確定*您需要原始角度?是的,根據我的經驗,trig函數極其緩慢,即使在現代cpus和高優化設置下也是如此。發佈您正在嘗試解決的問題,我們可以告訴您是否可以使用點/跨產品。 – user168715 2010-06-02 20:33:36