簡體   English   中英

MATLAB包裝器中的MEX代碼

[英]MEX code in a MATLAB Wrapper

我有以下代碼:

for i=1:N,
    some_mex_file();
end

我的MEX文件執行以下操作:

  1. 聲明一個我定義的類的對象,該對象具有2個大內存塊,即double類型的32x2048x2。
  2. 處理此對象中的數據。
  3. 銷毀對象。

我想知道在為對象分配大內存塊的循環中調用MEX文件時是否需要花費更多時間。 我當時正在考慮遷移到C ++,以便我只能聲明一次對象,而只是重置它的內存空間,這樣就可以一次又一次地使用它而無需進行新的聲明。 這會有所作為還是徒勞? 換句話說,在MEX文件中分配內存要比一次聲明並重用它花費更多的時間嗎?

因此,這里的一般建議適用: 對代碼進行分析(在Matlab中並使用C / C ++探查器) ,或者至少在調試器中將其停止幾次,以查看其花費的時間。 停止“懷疑”它在哪里花費時間,並實際衡量它在哪里花費時間。

但是,我遇到了這樣的問題,在MEX函數中分配/取消分配內存是主要的性能接收器。 但是,您應該通過概要分析(或在調試器中停止代碼)來驗證這一點。

解決這種性能問題的最簡單方法是雙重的:

  1. 將循環移至MEX功能。 使用迭代計數調用MEX函數,然后讓您的快速C / C ++代碼實際執行循環。 這消除了從Matlab調用您的MEX函數的費用(這對於大N而言可能是相當大的),並且有助於進行第二次優化:

  2. 讓您的MEX函數緩存其分配/取消分配,如果將循環移到MEX函數中,這將非常容易(安全得多)。 這可以通過幾種方法完成,但最簡單的方法是只分配一次空間(在循環外部),並在循環完成后將其釋放。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM