• Accelerating Matlab


    Matlab is a very useful programming environment, but it also has many inefficiencies. You might think that these are unavoidable, but in fact it is possible to fix most of them, without significantly changing your programs. This page describes some easy ways to modify the Matlab environment to make programs run faster.

    1. Install Marcel Leutenegger's package of elementary functions. They speed up functions like exp and log by a factor of 3 or more, with no loss of accuracy. They directly replace the functions in Matlab, so no program modification is required.
    2. Run mex -setup and select a good compiler. The default compiler (lcc) does not produce very good code.

      To use Microsoft Visual Studio .NET 2003 version 7.1, you will first need to install a patch. Unfortunately, while Visual Studio 7.1 generally produces good code, it has a performance bug in the intrinsic exp function. To get around this, edit the mex options file (C:MATLAB6p5p1inwin32mexoptsmsvc71opts.bat) to read:

      set OPTIMFLAGS=/MD -O2 -Oy- /Oi- -DNDEBUG

      After changing the compiler, you should re-compile your mex files, and re-install any packages including mex (such as lightspeed).

    3. Install lightspeed. It provides optimized implementations of common operations, including a C replacement for repmat.m.
    4. Profile your code to find bottlenecks:
      profile on
      myfun;
      profile report
      
    5. Avoid loops by writing 'vectorized' code. See the MathWorks' Vectorization Guide, Marios Athineos's tips and tricks, and the routines in lightspeed (such assqdist).

    Efficient ways to do common tasks

    Manipulate sets of integers

    The fastest way to do this is with sparse logical vectors. If you want to use sorted arrays of integers instead, beware that the Matlab functions setdiff, union, etc. are not optimized for this case and will be a bottleneck. Optimized functions for the sorted case are included in lightspeed.

    Represent a graph

    Use a sparse logical adjacency matrix, and use matrix operations whenever possible. For example, if G is symmetric (i.e. an undirected graph) then G*G gives the number of neighbors in common to nodes i and j, for all (i,j). See Kevin Murphy's graph toolbox.

    Sample random numbers from various distributions

    Use the functions provided in lightspeed.

    Read XML

    Peter Rysadter's XML parser was the fastest, but is no longer available. Check out the links at Undocumented XML functionality.

    文章转载自 Tom MinkaAccelerating Matlab

  • 相关阅读:
    mysql 时间戳 转 时间
    VSCode搭建VUE 开发环境
    虚拟通信
    JavaScript 获取客户端计算机硬件及系统信息
    Thinkphp关联模型BELONGS_TO
    docker部署rancher踩坑篇
    青龙面板 脚本 依赖库下载安装
    Linux 随记
    Tekton DAG代码
    手写Spring valar
  • 原文地址:https://www.cnblogs.com/VVingerfly/p/4722449.html
Copyright © 2020-2023  润新知