MATLAB 包装器中的 MEX 代码
MEX code in a MATLAB Wrapper
我有以下代码:
for i=1:N,
some_mex_file();
end
我的 MEX 文件执行以下操作:
- 声明一个对象,属于我定义的类,具有 2 个大内存块,即 32x2048x2 类型的 double。
- 处理此对象中的数据。
- 销毁对象。
我想知道当我在循环中调用为其对象分配大内存块的 MEX 文件时是否需要更多时间。我正在考虑迁移到C++以便我只能声明一次对象并重置其内存空间,以便可以在没有新声明的情况下一次又一次地使用它。这会有所作为还是毫无价值的努力?换句话说,在 MEX 文件中分配内存是否比声明一次并重用它花费更多的时间?
因此,通常的建议是:分析你的代码(在 Matlab 中和使用 C/C++ 分析器),或者至少在调试器中多次停止它,看看它在哪里花费时间。 不要再"想知道"它把时间花在哪里,而是实际衡量它把时间花在哪里。
但是,我遇到了这样的问题,其中在 MEX 函数中分配/解除分配内存是主要的性能槽。 但是,应通过分析(或在调试器中停止代码)来验证这一点。
这种性能问题的最简单解决方案是双重的:
-
将循环移动到 MEX 函数中。 使用迭代计数调用 MEX 函数,并让快速 C/C++ 代码实际执行循环。 这消除了从 Matlab 调用 MEX 函数的成本(对于大型 N 函数来说可能很大),并促进了第二次优化:
-
让您的 MEX 函数缓存其分配/解除分配,如果将循环移动到 MEX 函数中,这将更容易(也更安全)。 这可以通过多种方式完成,但最简单的方法是只分配一次空间(在循环之外),并在循环完成后解除分配空间。
相关文章:
- 为什么这段代码(在 Matlab 的 MEX 文件中使用 OpenMP)给出不同的结果?
- 使用带有 MEX 包装器的帮助程序 C 文件从 MATLAB 2016 调用C++代码时出现问题
- complex_Bessel_function库的编译——与Fortran代码的链接——mex文件
- 为什么在我的 mex 代码中将数组大小标识为零?
- 使用MATLAB通过MEX运行OPENCV代码在VisualStudio上可以使用
- 使用 Matlab Coder 将 Matlab m 文件转换为 C/C++ 代码,包括 mex 文件 (mxArray
- 是否可以将mex代码转换为C++代码
- Matlab在MEX/C代码中阻止或拦截free()吗
- MATLAB 包装器中的 MEX 代码
- 将 C/C++ 代码称为 MEX 文件与纯 C/C++
- Matlab Mex代码未编译
- Visual Studio -如何将matlab中的mex代码转换为c++
- Mex Cuda动态分配/慢速Mex代码
- 如何避免重复初始化.mex (matlab编译代码)
- Mex函数比相同的c++代码更快
- 如果瓶颈是一个大的矩阵乘法,我可以使用mex文件加速我的MATLAB代码吗?
- 如何找到Matlab-mex文件的代码
- 将matlab代码与c/c++代码相结合,使用matlab编码器实现mex函数
- Matlab Mex文件构建:代码更改不再影响mex文件
- 是否可以将C++/MEX(Matlab)代码转换为独立C++