c++ - 如果瓶颈是大矩阵乘法,我能否使用 MEX 文件加速我的 MATLAB 代码?

标签 c++ matlab

我有一个项目,要求我在 while 循环内多次设置两个大矩阵的乘积。对于较大的矩阵,代码运行起来会很慢。

我很好奇此时使用 mex 和 .cpp 文件是否真的可以提高程序的速度。内置的MATLAB矩阵乘法不是已经很不错了吗?

最佳答案

如果没有关于您的问题的更具体的信息,任何人都无法说出具体的事情。在某些情况下,MEX 函数绝对可以提高性能,而在某些情况下则不能。矩阵乘法是 Matlab 的优势之一,简单地将矩阵乘法移动到 MEX 函数中不太可能使您的代码运行得更快。

也就是说,有一些提高性能的通用策略:

  1. Profile你的代码。确保矩阵乘法实际上是罪魁祸首。根据我自己的经验,性能问题可能有多种来源,包括临时变量的粗心使用。这应该始终是您的第一步。

  2. 如果您的矩阵具有任何类型的结构,请利用它。 Matlab 对 sparse 有很好的支持和 banded矩阵。如果您的矩阵具有结构,使用它可以大大降低矩阵运算的成本。

  3. 如果您确实编写了 MEX 函数,请尝试将整个 while 循环移动到 MEX 函数中,以避免多次跨越 Matlab/MEX 边界。重复调用 MEX 函数的代价可能非常高,而在 MEX 函数内执行整个循环通常同样容易(或更容易),尤其是在循环是简单迭代的情况下。

关于c++ - 如果瓶颈是大矩阵乘法,我能否使用 MEX 文件加速我的 MATLAB 代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15317669/

相关文章:

c++ - 获取一年中的星期几开始于

python - 有没有办法定期保存您当前正在使用的 Simulink 文件?

excel - 如何将字符串从 Excel 导入 MATLAB?

c++ - 单例实现和对::GetInstance 的 undefined reference

c++ - 在C++中初始化struct的数据成员

c++ - 如何在程序中改变多维数组的大小?

Matlab:在循环中绘制带有保持和保持关闭的子图,而不总是调用 xlabel、ylabel、xlim 等

python - MATLAB 多维矩阵到 NumPy 矩阵的转换

matlab - matlab中多个矩阵求和

c++ - boost::none_t 实现的基本原理是什么?