如何确定 c-mex s-function 中的输入序列?

Posted

技术标签:

【中文标题】如何确定 c-mex s-function 中的输入序列?【英文标题】:How to determine input sequence in c-mex s-function? 【发布时间】:2014-12-27 17:22:05 【问题描述】:

我正在 simulink 中实现一个 c-mex 函数来加速两个矩阵的乘法。 到目前为止它正在工作,但我发现输入排序/序列取决于连接的命名模式,例如常数。 我附上两张图片来解释: 首先,我将输入命名为 Constant 和 Constant1。然后,输入序列符合预期。 将 Constant 更改为 Constant2 时,输入序列会发生变化,因此我的 c-mex 函数不正确。 现在,我的问题是如何改变这种行为? 如果不可能,我该如何解决,因为矩阵乘法的顺序通常非常重要。

【问题讨论】:

您似乎向 c-mex 接口传递了错误的参数。在第二种情况下,我们可以清楚地看到矩阵是正确的,但排列成不同的顺序。我建议你仔细检查接口,特别是指定矩阵中元素的顺序。 这不是 s-function 的预期行为,我假设您的代码中存在实现错误。请将您正在使用的代码添加到问题中。 嗯,重点是:matA 是昏暗的 8x4,matB 是 4x2。我使用 printf 查看天气端口 [0] 在这两种情况下都是 4x2,但事实并非如此。那么为什么 c-mex 文件中的顺序会根据连接的常量的名称而改变呢?这两张图片只是为了可视化命名模式在某种程度上很重要。到目前为止,我还没有找到任何有关此的信息... 【参考方案1】:

我找到了解决方案。当您还在 mdlSetInputPortDimensionInfo 中打印端口时,您会看到根据命名模式,调用顺序是不同的。 我的解决方法是根据我用 ssGetInputPortDimensionSize 读回的 InputDimension 在 mdlSetDefaultPortDimensionInfo 中设置输出端口尺寸。

完整的代码可以在 Github 上找到: https://github.com/steffenmauch/Simulink-Eigen3

【讨论】:

以上是关于如何确定 c-mex s-function 中的输入序列?的主要内容,如果未能解决你的问题,请参考以下文章

用S-function函数如何将十六进制转换十进制

simulink error:Error in default port dimensions function of S-function ‘XXXXXXXXXXX’. This function

MATLAB C S-Function不能在simulink实时编译

Simulink 和 DLL

如何在保证仿真精度的情况下提高仿真速度

加速框架 iOS - FFT 输入