【问题标题】:Does Matlab Coder produces single threaded C applications only?Matlab Coder 是否仅生成单线程 C 应用程序?
【发布时间】:2015-11-12 02:58:53
【问题描述】:

Matlab Coder 是否只能生成单线程应用程序?

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

【问题讨论】:

  • 也许这有帮助 stackoverflow.com/questions/18730193/… 另一个尝试是使用一些编译器选项,例如 -lpthread
  • matlab 编码器为 openmp 生成编译指示,也许它们在编译期间被忽略了?你能在你的代码中找到任何与 openmp 相关的编译指示吗?至少一个 parfor 被翻译成并行代码。

标签: c multithreading matlab image-processing matlab-coder


【解决方案1】:

虽然通常可以预期生成的代码会更快,但也有一些例外。 matlab 使用的某些实现不适用于生成的代码。我没有关于技术背景的参考,但我认为这些是 fortran 和/或汇编程序编写的库。这种函数的一个例子是eig which is known to produce different (correct) results in generated code.

matlab 编码器自带代码示例explains how a parfor is translated to openmp code。作为第一步,请确保您的代码包含与 openmp 相关的编译指示。如果没有,请尝试使用 parfor 循环重写您的代码。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-08
    • 2015-07-15
    • 2011-12-30
    • 2010-10-02
    相关资源
    最近更新 更多