Q:什麼是MEX檔案?
A:MATLAB可以直接執行的檔案。
Q:怎麼看出他是MEX檔案?
A:不同的平台的MEX會使用不同的副檔名,請查詢說明書。
我只關注Windows平台:
基本上現在都是64-bit為主流,因此主要關注「*.mexw64」就好了。
Q:怎麼使用他?
A: 直接把他的檔名當作函數名稱呼叫就可以了,用法跟呼叫一般的function完全一樣。許多工具箱裡面滿滿的都是MEX檔案。
找到範例再舉例。
Q:怎麼產生他?
A: 用MATLAB的mex函式去編譯C/C++原始碼(也支援其他語言,請查說明書)。
需求:有安裝Matlab主程式,有安裝可用的編譯器(通常是安裝某軟體,例如VS2010),用mex -setup命令設定編譯器。細節請查說明書。
注意,只要執行MEX檔不需要安裝編譯器,只有要編譯才需要。
困難點:mex的寫法很麻煩,有一定的流程,雖然看起來都是C/C++的語言,但很多地方要配合MATLAB去處理,尤其是使用MATLAB的變數。細節可參考範例。
提示:據說Matlab有個功能叫做Matlab Coder,若設定正確是可以把m檔案轉為C語言原始碼,甚至直接編譯出mex檔案的。等我學會再來說明。
Q:優點?
A:
呼叫很簡單!!光是這個就很值得考慮使用。
理論上使用C/C++編譯的MEX檔案執行時就有C/C++的效率,也就是速度比較快。實際上要看程式設計的技巧。
理論上C/C++可以使用的函式庫都能編譯來用,若手上僅有C/C++原始碼時,很有機會可以改寫為MEX檔按。實際上太複雜的改不動。
理論上編譯後的MEX檔案是不可讀的二進位檔案,具有保護原始碼的功能。所以你最好寫個使用說明,否則很容易忘記MEX檔案怎麼用。
編譯成64bit或32bit幾乎是同一份C/C++原始碼,不太需要修改。
編譯的MEX檔案也可以再與m檔案編譯成獨立執行檔,細節請看其他章節。
Q:缺點?
A:
很難寫,一般人要上手很難。
不容易除錯,開發環境不太友善(至少我不清楚哪個IDE弄得很好)。
64bit與32bit不相容。
Q:什麼時候值得用這個?
A:
確定MATLAB為主要程式語言時。
想加速特定函數的時。例如:程式需要大量迴圈、檔案操作或型別轉換時。
想要移植C/C++為Matlab工具時。例如:很多要付費的Toolbox。