2013年1月29日 星期二

Matlab 的GPU與平行計算 (GPU and parfor) Matlab Parallel Computing

Matlab Parallel Computing
平行計算已經在資訊界發展很久從電腦式的分散系統,到現在因為多核心處理器的原因,可以在個人電腦上簡單的使用平行運算,在MATLAB裡面最主要的兩個平行計算一個是GPU計算一個是parfor,兩者的目的都是為了減少計算時間,但所運行的環境不一樣。

MATLAB在GPU的使用一定要有一塊NVIDIA的顯示卡,ATI可以嗎? (在MATLAB的發展沒有比NVIDIA好)
首先要在這裡查詢你的顯示卡是不是適合
https://developer.nvidia.com/cuda-gpus
選擇的顯示卡記憶體要越大越好,因為GPU的運算是利用顯示卡以及他的記憶體在做運算的,所以顯示卡的記憶體越大越不會out of memory。


ParFor的使用就是運用電腦的多核心來計算,所以核心數目越多就可以越分散,可以把一個核心當成一台電腦來看有八核心就是八台電腦在運算。

如何分辨要使用ParFor跟GPU,
簡單的分類如果你的程式需要用到很多for而且每一個for的使用都是一段連續的那就可以考慮使用ParFor的運算 舉一個例子

你可能在切蛋糕 蛋糕都是一樣的 但有一百個 所以你就可以把蛋糕分給4個人 每一個人切25個 這就是使用parfor的概念 原本一個人重複切100個 丟給四個人切 一個人切25個就又快又好了。


而GPU的使用是在於你有頗多的計算步驟,顯示卡的運算環境又可以容納你所指配的變數大小,那這時候丟到GPU計算就會顯示出效果,比如說你要算20個運算符號的方程式,這時侯就可以考慮丟到GPU裡面去算。

或是 有兩個 200*200的矩陣大小要做反矩陣的運算 這時候GPU就是最好的計算環境。

計算時間成本,無論你使用GPU或是PARFOR都有計算成本,PARFOR在事前需要打開MATLABPOLL多核心執行指令,GPU需要將變數從電腦的記憶體輸送到顯示卡的記憶體,因此如果計算量不是很大是不需要用這兩個工具來做運算的,尤其在GPU運算更不能夠重複的搬進搬出記憶體,這樣耗費的時間會遠比你計算的時間多很多。

2013年1月20日 星期日

Matlab的最佳化函數介紹

Matlab的最佳化是最多人所使用的功能之一,舉凡數學中的解N元一次方程式,或是最大值最小值都會用到,在到商學院中的回歸分析,以及投資組合最佳化,效率前緣等都會用到,所以在此簡單的介紹Matlab常用的最佳化函數
最佳化的主要運用到的語法應該分為 單變數以及多變數的最佳化 還有線性以及非線性,再來細分可以分成有限制函數的最佳化以及沒有限制函數,最後最常用的就是解根的方程式fzero


  1. fminbnd : 在固定區間中找出單變數的最小化方程式。
  2. fminsearch: 如果要求解兩個未知數且是沒有限制函數的最佳化方程式就要用這一個。
  3. fzero: 單變數找根的最佳化方程式,舉一個例子就是x^2-5x+4=0求解x的時候需要用到的。
  4. fmicon: 用在有限制是底下時候非線性的多變數最佳化。
  5. fminmax: 在求取最小最大化的條件所需要用到的。
  6. fminucn:在沒有限制式底下的多變數最佳化求解。
  7. fseminf: 多變數中變數又可以區分成兩種空間,比如說有一條方程式a1x1+a2x2=c 針對 a1 a2 以及x1 x2都需要求最佳化的時候,其中有一類變數是有限定區域的。
  8. linprog: 線性最佳化,這是最常用的之一,就是在解N元一次方程式的最佳解。
  9. quadprog:可以寫成Quadratic的函數就可以用這一個方程式來求解。