Matlab编码器是否只生成单线程C应用程序?

Matlab编码器是否只生成单线程C应用程序?,c,multithreading,matlab,image-processing,matlab-coder,C,Multithreading,Matlab,Image Processing,Matlab Coder,Matlab编码器是否只能生成单线程应用程序 我尝试转换一些用于图像分析的Matlab脚本,发现Matlab编码器生成的代码要慢得多。这让我感到困惑,因为我认为生成的C代码至少与M代码一样快或更快。然后我检查了M代码和生成的C代码使用了多少线程。结果是C代码使用了1个线程,而Matlab代码使用了许多线程。此时,我只能假设图像处理工具包将其功能实现为多线程的mex函数。虽然生成的代码通常会更快,但也有一些例外。matlab使用的一些实现对于生成的代码不可用。我没有关于技术背景的参考资料,但我假设

Matlab编码器是否只能生成单线程应用程序


我尝试转换一些用于图像分析的Matlab脚本,发现Matlab编码器生成的代码要慢得多。这让我感到困惑,因为我认为生成的C代码至少与M代码一样快或更快。然后我检查了M代码和生成的C代码使用了多少线程。结果是C代码使用了1个线程,而Matlab代码使用了许多线程。此时,我只能假设图像处理工具包将其功能实现为多线程的mex函数。

虽然生成的代码通常会更快,但也有一些例外。matlab使用的一些实现对于生成的代码不可用。我没有关于技术背景的参考资料,但我假设这些是fortran和/或汇编语言编写的库。这种功能的一个例子是
eig

matlab编码器附带了一个代码示例。作为第一步,请确保您的代码包含与openmp相关的杂注。如果没有,请尝试使用parfor循环重写代码


在最后一步中,请确保您的编译器已配置为使用openmp

也许这是有帮助的另一种尝试是使用一些编译器选项,如
-lpthread
matlab编码器为openmp生成pragma,也许它们在编译过程中被忽略了?您能在代码中找到任何与openmp相关的杂注吗?至少有一个parfor被翻译成并行代码。