miscellaneous此处收录了一些常用的服务器使用技巧。 VIM 编辑器为了编写脚本方便,可以直接使用服务器系统的 VIM 编辑器进行对脚本的编辑。 使用 $ vim <文件名> 可以新建或者打开已有的文本文件。 VIM 编辑器一共有两个主要的编辑模式:普通模式和插入模式。进入 VIM 编辑器后,编辑器处于普通模式。 在普通模式下,VIM 编辑器会将按键解释成命令。
在插入模式下,即可插入文本到光标的位置。按下 Esc 键即可返回普通模式。 使用 MEX 文件MEX 文件在 MATLAB & C 混合编程的过程当中占据了重要角色。由于 MATLAB 不擅长处理循环,因此如果使用 MATLAB 做纯循环效率会很低下。用户可以通过将 C 程序封装成 MATLAB 可执行的文件来为 MATLAB 计算加速。 注:以下操作实例仅适用于 MATLAB R2015b 或更低的版本 以下举一个简单的例子来说明 MEX 是如何工作的。设想我们要实现这样的一个效果:输入一个矩阵 A,而后计算每个元素的 2 倍,然后返回结果。 首先,我们准备一下所需的 C 语言代码。 simple_mult.c
#include "mex.h" void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]){ int i, m, n; double *a, *b; if (nrhs != 1){ mexErrMsgTxt("Usage: B = simple_mult(A)"); return; } m = mxGetM(prhs[0]); n = mxGetN(prhs[0]); a = mxGetPr(prhs[0]); plhs[0] = mxCreateDoubleMatrix(m, n, mxREAL); b = mxGetPr(plhs[0]); for (i = 0; i < m * n; ++i) b[i] = 2 * a[i]; } 以上代码中有以下几点是 MEX 文件的约定:
不同 MATLAB 版本支持的 C 编译器不同。例如 MATLAB R2015b 最高只能支持 gcc-4.7 的编译器。因此在执行编译之前,请确保正在使用的 gcc 版本被 MATLAB 支持。 例如,输入 $ gcc -v 即可查看当前使用 gcc 的版本。如果不符合要求,需要使用 module 命令进行模块的替换。 进入 MATLAB 命令行模式(可使用命令 matn)。在 MATLAB 命令行下,输入 >> mex -setup C 接下来使用 >> mex simple_mult.c 即可编译 MEX 文件,其中 simple_mult.c 为源文件名,必须在当前工作目录之下。 编译成功后,MATLAB 会生成对应的 MEX 可执行文件。在我们的例子里,MATLAB 会生成一个名为 simple_mult.mexa64 的文件。使用此 MEX 函数的方法是 B = simple_mult(A) 小提示 Linux 用户可尝试将本地生成的 mexa64 文件上传至服务器,Windows/Mac用户则需要在服务器上编译 mex 文件。在Windows/Mac系统下生成的 mex 文件无法在 Linux 系统下使用。不过,仍然推荐 Linux 用户在服务器上重新编译 mex 文件,以防止运行环境变化导致程序无法运行。 设置 Intel MKL 编译选项使用 Intel MKL 进行计算时,需要使用 gcc/g++ 编译工具,并将 MKL 库链接到你的目标文件上。 编译所需的命令行较为复杂,推荐使用Intel® Math Kernel Library Link Line Advisor来指导编译和链接。 MKL Link Line Advisor 工具需要用户指定选项才可正确完成链接命令的生成。各个选项的含义如下:
按照如上设置完毕后,即可在下方的输出中看到链接选项和编译选项。直接复制到 Makefile 中即可。 |