簡體   English   中英

基准測試三角形查找表性能增益與cpp實現

[英]benchmarking trig lookup tables performance gains vs cpp implementation

我們正在開發一個實時系統,該系統將在一個關鍵的運行時間內執行正弦/余弦計算。 我們正在考慮使用查找表來幫助提高性能,我正在嘗試對實現表的好處/成本進行基准測試。 不幸的是,我們還不知道我們需要什么程度的准確度,但可能大約5-6個小數點。

我認為以前已經完成了C ++ trig函數與查找方法的比較。 我希望有人能夠為我提供一個鏈接到一個記錄任何此類基准測試的網站。 如果不存在這樣的結果,我將不勝感激,如何確定給定最小精度的查找表需要多少內存,以及如何確定潛在的速度優勢。

謝謝!

我無法回答你的所有問題,但是你不會試圖確定理論速度的好處,而是在你的實際應用程序中分析它幾乎肯定會更好。 然后,您可以准確了解您在特定問題域中可以獲得哪些改進,這是滿足您需求的最有用信息。

你的學位輸入的准確度是多少(讓我們使用弧度來保持討論“更簡單”)。 十分之一的學位? 百分之幾度? 如果您的角度精度不是很高,那么您的觸發結果就不會更好。

我已經看到這被實現為以百分之一度為索引的數組(保持角度為整數w /兩個隱含的小數點也有助於計算 - 不需要使用高精度浮點/雙弧度角)。

存儲0.00到90.00度的SIN值將是9001 32位浮點結果值。

SIN [0] = 0.0 ... SIN [4500] = 0.7071068 ... SIN [9000] = 1.0

如果你有SIN,COS(a)= SIN(90-a)的觸發屬性只意味着你做SIN [9000-a]得到COS(a)

如果您需要更高的精度但沒有更多表空間的內存,您可以在數組中的兩個條目之間進行線性插值,例如,SIN為45.00123將是

SIN [4500] + 0.123 *(SIN [4501] - SIN [4500])

了解這兩種方法的性能特征的唯一方法是嘗試它們

是的,其他人可能有基准測試,但是他們沒有在您的代碼環境中運行,並且它們沒有在您的硬件上運行,因此它們不適用於您的情況。

但是,您可以做的一件事是查找CPU手冊中的指令延遲。 (英特爾和AMD在其網站上以PDF格式提供此信息,大多數其他CPU制造商都有類似的文檔)

然后你至少可以找出實際觸發指令的速度有多快,為你提供一個基線,查找表將不得不打敗它。

但這只能給出對方程式一側的粗略估計。 如果您知道CPU緩存的延遲,並且大致了解內存訪問的延遲,您也可以對查找表的成本進行類似的粗略估計。

但獲得准確信息的唯一方法是嘗試它。 同時實現,看看在你的應用程序會發生什么。 只有這樣,你知道這是你的情況更好。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM