2015-08-19 26 views
2

Matlab編碼器是否只能生成單線程應用程序?Matlab編碼器僅生成單線程C應用程序嗎?

我試圖轉換一些用於圖像分析的Matlab腳本,並發現由Matlab編碼器生成的代碼速度較慢。這使我感到困惑,因爲我認爲生成的C代碼至少與M代碼一樣快或更快。然後我檢查了M代碼和生成的C代碼使用了多少個線程。結果是C代碼使用了1個線程,並且有許多線程被Matlab代碼使用。在這一點上,我只能假設圖像處理工具包將其功能實現爲多線程的mex函數。

+0

也許這是有用的http://stackoverflow.com/questions/18730193/when-does-matlab-choose-to-thread-when-using-codegen-and-parforfor 另一個嘗試是使用一些編譯器選項'-lpthread' – Markus

+0

matlab編碼器爲openmp生成編譯指示,也許他們在編譯期間被忽略?你能在你的代碼中找到任何openmp相關的編譯指示嗎?至少一個parfor被轉換爲並行代碼。 – Daniel

回答

1

儘管通常生成的代碼可能會更快,但也有一些例外。 matlab使用的一些實現不適用於生成的代碼。我沒有提及技術背景,但我認爲這些是Fortran和/或彙編程序庫。對於這樣的功能的一個例子是eigwhich is known to produce different (correct) results in generated code.

這個matlab編碼器帶有一個代碼實例explains how a parfor is translated to openmp code。作爲第一步,確保你的代碼包含openmp相關的編譯指示。如果不嘗試使用parfor循環重寫您的代碼。

在最後一步中,確保您的編譯器配置爲使用openmp。