2014-09-03 68 views
4

我現在開始使用dsp編程,並正在編寫我的第一個低級類和函數。 因爲我想要的功能是快速的(或最終不是低效的),我經常想知道我應該使用什麼,我應該避免在函數中調用每個樣本。DSP性能,應該避免什麼?

我知道指令的速度差異很大,但我認爲你們中的一些人至少可以分享經驗法則或經驗。 :)

條件語句

如果我不得不使用條件,switch應該比一個if/else if塊更快,對不對? 使用兩個if -statements或if-else之間是否存在差異?在某處我讀else應該避免,但我不知道爲什麼。

此外,與乘法相比,if-block需要多少時間纔會有粗魯估計?因爲在某些情況下,使用乘法零可以用來代替if語句:

//something could be an int either 1 or 0: 
if(something) { 
    signal += something_else; 
} 
// or: 
signa+ += something*something_else; 

函數和函數指針

而不是使用條件語句,你可以使用函數指針。而不是在每次調用中使用條件,指針可以被重定向到一個特定的函數。但是,對於每次調用,必須解釋指針才能調用正確的函數。所以我不知道這是否會有所幫助。

我還在想,如果調用函數有影響。如果是這樣,應該避免拳擊功能,對吧?

變量

我會認爲,定義和功能使用許多變量並不真的產生影響,至少相對於計算。這是真的?否則,重複使用聲明的變量會比更多的聲明更好。

計算 是否有計算類型的順序執行時間?我相信這在很大程度上取決於背景,但經驗法則會很好。我經常會讀到,人們只算算算法中的乘法。這是因爲添加速度非常快嗎? 它在乘法和除法之間有區別嗎? (*0.5/2.0

我希望你能分享soem的經驗。

乾杯

+3

先實施,再優化。也就是說,除非你有工作代碼,否則不要擔心性能。然後分析您的工作代碼並優化瓶頸。 – dohashi 2014-09-03 13:33:49

+1

現在有了複雜的優化編譯器,回答這個問題的唯一方法就是告訴你簡介。一個編譯器通常「知道」如果可以將浮點運算部分轉換爲乘法運算,並且在現代CPU上使用分支預測等,則很難以一般而有用的方式回答您的問題。 – 2014-09-03 13:34:30

+0

就像我說過的,我不會從算法中擠出納秒,但是對於設計類和函數,一些基本規則會幫助你。 :) – 2014-09-03 13:36:23

回答

1

DSP編譯器通常是善於優化for循環,即包含函數調用。

因此,嘗試內聯您在時間關鍵的for循環內調用的每個函數。

如果您的DSP是一個定點處理器,那麼浮點運算由SW實現。

這意味着,每一個這樣的操作基本上是通過與庫函數,編譯器代替。

所以,你應該基本上避免內部時間關鍵for循環執行浮點運算。

預處理器應當爲for循環的迭代數目提供了一個特殊的#pragma

  • 迭代的最小數量
  • 最大迭代次數
  • 多重迭代次數的

使用此#pragma如果可能的話,以幫助進行環unrol編譯如果可能的話。

最後,DSP常常支持一組用於增強性能的獨特操作。

作爲一個例子,考慮_dotpu4Texas Instruments C64xx,其計算兩個整數src1src2的標量積:對於src1src2每對8位的值,從src1的8位值被乘以來自src2的8位值,並且將這四個產品相加在一起。

檢查您的DSP的數據表,看看你是否可以使用這些操作。

編譯器應該生成一箇中間文件,爲了分析代碼中每個經過優化的for循環的預期性能,您可以瀏覽該文件。

此基礎上,你可以嘗試不同的組裝業務,可能產生更好的結果。

+0

耶!另一個在stackoverflow上的C64xx程序員。 – 2014-09-03 14:19:21

+0

@NilsPipenbrinck:哈哈,很高興認識你:)我認爲我是唯一一個離開的人(儘管我承認我最後一次使用它的時間是在2005年左右)。 – 2014-09-03 14:22:49

1

這裏是答案的一部分:

計算(談論的處理器,例如32位的本土精度):

  • 大多數DSP微處理器具有單週期乘法,這意味着一個 乘法成本究竟與週期相同。
  • 和乘法它通常更快然後除法。

條件語句:

的if/else - 在彙編代碼中尋找時,你可以看到使用的if else確保時的記憶,如果條件通常是默認加載,這樣的條件,會更頻繁地發生在if中。

但通常如果可能的話,你應該避免if/else在循環中改善管道襯裏。

好運。

+0

嗨, 這些注意事項也適用於普通的x86/x64 CPU嗎?我正在爲windows開發,其中DSP指的是「處理器」和「處理」。 :/ – 2014-09-03 14:37:51

+0

這個註釋特指DSP – shoham 2014-09-03 14:43:54

相關問題