How To - 如何在 For 迴圈中利用多核心 CPU 加速運算作業?

非常直白的標題,也是日前很多人問我的問題。只是礙於目前每天看著專案到期日,遲遲沒有分享...
◢▆▅▄▃崩╰(〒皿〒)╯潰▃▄▅▇◣



先來看一個例子:

這是個單純浪費系統資源的計算式,目的在於測量這個 For 迴圈進行一些計算的時候需要耗時多久,此時可以看到右方的時間顯示約 0.267 秒。此為未做任何設定的 For 迴圈。

如果要設定為多核心技術支援,那麼請在 For 迴圈邊上按右鍵,選擇 Configure Iteration Parallelism...

接著可以看到設定的視窗,請將 Enable loop iteration parallelism 打勾,在LabVIEW 2014版中,它會自動確認CUP有多少個核心可以作業,自動分配作業內容。因此其他的選項都可以不要設定。最後按下OK即可。

接著便會看到原本的 For 迴圈的 N 下面就多了一個 P ,這個是指定要使用多少個核心來運算,同樣的在 LabVIEW 2014 中,如果 P 是沒有接線的,那麼系統將會自動判斷並使用。

所以可以看到相同的程式碼,耗時便從 0.267 秒縮短為 0.038 秒。這針對需要大量計算卻又要節省計算時間的人而言是一大福音!

但是!

這個功能也有其使用的限制:

  • 迴圈中不得有 Feedback Node
  • 迴圈中不得使用 Shift Register
  • 迴圈中不得有其他迴圈包含未初始化的 Shift Register

簡單說,迴圈中每個執行過程必須可以獨立計算,不可以與前後計算過程有牽扯。

同樣的,如果迴圈中偷機用了 Functional Global Variable(FGV) ,那麼也會導致程式無法執行喔!畢竟要將運算分散到各CUP處理,自然資料之間本來就不可以互相相關。

由此可知,這樣的計算不適用於各種閉迴路控制器,或是其他無法獨立作業的控制。

以上簡單針對 For Loop Iteration Parallelism 介紹。