2013-08-07 100 views
1

我使用matlab編寫一個包含許多迭代的程序。由於每次迭代中的數據處理都與前一次迭代中的數據處理有關,因此無法進行矢量化。mex代碼如何運行比matlab代碼更慢

然後,我使用內置MATLAB編碼器將matlab代碼轉換爲mex,結果速度更低。我不知道我是否需要自己編寫mex代碼,因爲它看起來mex代碼沒有幫助。

+0

的可能重複的[Matlab的MEX文件被緩慢相比,其直的等價的C](http://stackoverflow.com/questions/5228388/matlab-mex-file-is-slow-compared-to-its-straight- C-當量) – TheCodeArtist

+0

我不認爲它是一個重複的,這個問題正在處理,其中放緩的MEX-MATLAB網關級別(根據接受的答案這是固定R2011a)發生的特定情況下,再加上OP甚至沒有使用MX-API functinos。鑑於這是使用* MATLAB編碼器*代碼生成。這就是說這個問題無法以目前的形式得到合理回答,我們需要看到一些代碼(例如什麼是原來的MATLAB代碼,什麼是生成的C代碼).. – Amro

+2

您是否嘗試過使用Matlab的Profiler工具和時鐘功能在C中找出哪些部分佔用最多時間? Amro的權利,請張貼一些代碼。 – MattG

回答

0

我建議如果可以,請聯繫MathWorks以徵求他們的建議。如果你無法做到這一點,那麼我建議你真正閱讀文檔並在放棄之前嘗試所有你找到的東西。

我發現對實現MATLAB代碼的方式進行了一些小的修改,並且對項目設置進行了一些小的修改(例如禁用對Ctrl-C的響應,將外部調用返回給MATLAB)生成的代碼中的速度差異在一個數量級或更多。 MathWorks以外的人並不多,他們能夠就確切地說明哪些變化對您有價值/明智的做法提供很好的建議。

我應該說我只在一個項目上使用過MATLAB Coder,而且我根本不是一個專家(實際上甚至不是一個稱職的)C程序員。儘管如此,我設法生成的C代碼的速度是原始MATLAB代碼的10-15倍。我通過以下方法實現了這一點:a)只是擺弄所有不同的設置,看看發生了什麼; b)有條不紊地查看文檔,看看我的MATLAB代碼中是否有位置可以應用我遇到的任何構造(如coder.nullcopy,coder.unroll等)。當然,你的代碼可能差別很大。