首页 > 解决方案 > 在 OpenModelica 中调用外部 C 函数对 CPU 时间的影响

问题描述

我们已经在 C 中实现了一个外部延迟函数,我们想在我们的 Modelica 模型(传输线)中调用它。我们的目标是加速 CPU 时间。不幸的是,它增加了 CPU 时间。
我的问题是:

  1. 与现有的内置延迟相比,调用外部函数是否主要增加了 Modelica 中的仿真时间?

  2. 在 OpenModelica 中使用外部对象会显着增加仿真时间吗?

  3. 如何使用 Open MP 仅编译我们的外部函数(我们如何仅为外部函数添加 -fopenmp 标志)?当我们没有使用上面的标志(如下图所示)时,会产生以下错误(见下图),但是从编译开始就使用该标志,使模拟时间变长,而我们期望的模拟时间更短。PS:我们的函数被编译为一个包含 -fopenmp 标志的库。 在此处输入图像描述 在此处输入图像描述

标签: openmpmodelicaopenmodelica

解决方案


  1. 与现有的内置延迟相比,调用外部函数是否主要增加了 Modelica 中的仿真时间?

不,这是一个非常简单的调用,您只能在 Modelica 中明确定义的时间点使用外部函数调用。但是,如果您引入代数环,您可能会遇到问题。

  1. 在 OpenModelica 中使用外部对象会显着增加仿真时间吗?

不,它只是一个指针。如果某些东西很慢,它是在外部对象本身或它是如何使用的。

  1. 如何使用 Open MP 仅编译我们的外部函数(我们如何仅为外部函数添加 -fopenmp 标志):链接源文件时?当我们没有使用上述标志时,会产生以下错误,但是从编译开始就使用该标志,使仿真时间变长,而我们期望的仿真时间更短。PS:我们的函数被编译为一个库,我们在其中包含了 -fopenmp 标志。

您提前编译库并将 -fopenmp 标志添加到链接器标志或外部函数的库注释中。在 OpenMP 中仅使用 1 个线程时代码运行速度会变慢吗?编写快速并行代码很困难,而且 OpenMP 隐藏了很多细节,因此很难知道为什么它运行得更慢。


推荐阅读