zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    linux 部署项目命令
    List remove方法小坑
    centos7 安装mongoDB
    windows git 清除已保存的密码
    windows平台安装配置Gitblit
    oracle
    Mac 配置多jdk 随意切换
    idea远程调试jar包
    centos7 安装elasticsearch
    正则校验
  • 原文地址:https://www.cnblogs.com/VVingerfly/p/4722449.html
Copyright © 2011-2022 走看看