gpt4 book ai didi

c++ - MATLAB Wrapper 中的 MEX 代码

转载 作者:行者123 更新时间:2023-11-28 08:01:46 25 4
gpt4 key购买 nike

我有以下代码:

for i=1:N,
some_mex_file();
end

我的 MEX 文件执行以下操作:

  1. 声明一个我定义的类的对象,它有 2 个大内存块,即 32x2048x2 double 类型。
  2. 处理此对象中的数据。
  3. 销毁对象。

我想知道在为其对象分配大内存块的循环中调用 MEX 文件时是否需要更多时间。我正在考虑迁移到 C++,这样我就可以只声明一次对象并重置它的内存空间,这样就可以在没有新声明的情况下一次又一次地使用它。这会有所作为还是会成为毫无值(value)的努力?换句话说,在 MEX 文件中分配内存是否比声明一次并重用它需要更多时间?

最佳答案

因此,这里通常的建议适用:分析您的代码(在 Matlab 中和使用 C/C++ 分析器),或者至少在调试器中停止它几次以查看它在哪里花费了它时间。不要再“想知道”它把时间花在哪里了,而是实际衡量它把时间花在哪里了。

但是,我遇到了这样的问题,在 MEX 函数中分配/取消分配内存是主要的性能消耗。但是,您应该通过分析(或在调试器中停止代码)来验证这一点。

解决此类性能问题的最简单方法有两个:

  1. 将循环移动到 MEX 函数中。使用迭代计数调用 MEX 函数,并让您的快速 C/C++ 代码实际执行循环。这消除了从 Matlab 调用您的 MEX 函数的成本(对于大 N 来说可能很大),并促进了第二次优化:

  2. 让您的 MEX 函数缓存其分配/取消分配,如果您将循环移动到 MEX 函数中,这样做会容易得多(也更安全)。这可以通过多种方式完成,但最简单的方法是只分配一次空间(在循环之外),并在循环完成后释放它。

关于c++ - MATLAB Wrapper 中的 MEX 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11264860/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com