2015-08-19 25 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。