fortran教程用什么书比较好(运行fortran程序的步骤)

大家都知道,MATLAB中有个Profiler,可以帮助我们剖析M文件,找出瓶颈所在以便优化。如果优化后在MATLAB中运行时间还是难以忍受,这时如果没有更好的算法供选择,可以考虑用MATLAB的外部程序接口来试试。如果程序中的循环和矩阵操作比较多,同样的程序转成Fortran MEX后速度通常会有10x甚至100x以上的提高。

如果MEX运行时间还比较慢怎么办?能不能类似于MATLAB中剖析M文件那样,对MEX进行剖析并找出瓶颈予以优化呢?几经摸索,笔者终于发现了两个不错的方法。

MEX有C和Fortran两种。下面的方法针对Fortran MEX文件的剖析,对C MEX可能也适用。需要的软件如下:Microsoft Visual Studio 专业版、MATLAB、Intel Visual Fortran、Intel Vtune Performance Analyzer或Intel VTune Amplifier。

方法一:利用Visual Studio 的性能工具

  1. 在MATLAB中用mex编译得到MEX文件(扩展名.mexw32或.mexw64)。注意要用-g开关来编译。例如:mex -v -g source.F。只有这样才剖析时才会分析其中调用的各subroutine。
  2. 打开VS,依次选择工具->性能工具->性能向导
  3. 从下拉框中选择“分析动态链接库(.DLL)”,点击“下一步”
  4. 点击“DLL路径”文本框右侧的按钮,从下面文件类型框选择“所有文件”,找到要剖析的MEX文件,点击“确定”。也可以直接输入路径。例如:C:\\……\\source.mexw32
  5. 点击“可执行文件路径”文本框右侧的按钮,找到matlab.exe文件,点击“确定”。与上一步一样,也可直接输入路径。例如:C:\\Program Files\\MATLAB\\R2008a\\bin\\matlab.exe
  6. 点击“下一步”,选择“采样”,“下一步”,“完成”。只有选“采样”才能附加到MATLAB进程。
  7. 在VS右侧的“性能资源管理器”中右击最顶层,选择“附加/分离”,然后从弹出来的对话框中选择MATALB进程,点击“附加”。
  8. 在MATLAB中运行你的程序,在程序结束后返回VS,在“性能资源管理器”中右击最顶层,选择“附加/分离”,然后从弹出的对话框中选择MATLAB进程,点击“分离”。
  9. VS会给出性能报告。点击“函数”标签,找到你的MEX文件,点右边的+。此时就会看到详细的分析报告。Exclusive Percent 较大的函数就是你源代码中需要设法优化的目标

这个方法的分析结果只能统计到函数,不能统计代码行的调用次数和耗时。要剖析到代码行可以用下面的方法。

方法二:利用Intel Vtune Performance Analyzer

  1. 修改mexopts.bat:该文件默认位置为C:\\Documents and Settings\\你的用户名\\Applilcation Data\\MathWorks\\MATLAB\\R2008a\\mexopts.bat。找到并打开该文件,在文件中找到 set OPTIMFLAGS= …… 在其后添加 -Zi。
  2. 用-g开关mex你的Fortran MEX源文件。如 mex -v -g source.F
  3. 打开Intel Vtune Performance Analyzer(IVPA)并建立分析项目。在IVPA中选择File-New Project,选择Quick Performance Analysist Wizard,点击OK。在弹出的对话框中,选中No Application To Launch。此时先不要点Go。
  4. 打开MATLAB,运行程序调用你要剖析的MEX文件。运行后返回IVPA,点击GO。
  5. IVPA会对CUP中运行的所有进程进行分析,所以分析是最好少开其他程序。默认的分析时间是20秒。如果感觉时间不够,可以在Tuning Browser中右击项目名称,选择Properties,然后修改Duration值。
  6. IVPA分析完成后,从Process列表中找到MATLAB双击。一层层的双击进入,直到找到你的MEX进程。双击进入,然后点击右键,选择View As – Horizontal Bar Chart,就可以找到最耗时的子程序。双击子程序的名称,就会调查源码。通过右边的Clockticks和Instructions Retired列中的数字就可以查找代码中的瓶颈所在。

方法三:利用Intel VTune Amplifier

  1. 修改mexopts.bat:该文件默认位置在C:\\Documents and Settings\\你的用户名\\Applilcation Data\\MathWorks\\MATLAB\\R2008a\\mexopts.bat。找到并打开该文件,在文件中找到 set OPTIMFLAGS= …… 在其后添加 -Zi。
  2. 用-g开关mex你的Fortran MEX源文件。如 mex -v -g source.F
  3. 打开Intel VTune Amplifier 。选择File-New-Project;Project Name栏中给project取个名字,比如叫MexProfile;Location栏是分析结果保存位置,保持默认或选一个位置;点击下面的Create Project按钮。
  4. 在弹出的xxx – Project Properties对话框中的Target面板中,Target type选Attach to Process;然后到Windows任务管理器中查一下MATLAB的PID(如果没有启动MATLAB,先启动;如果任务管理器中没有PID,点击查看菜单-选择列-选中PID),输入PID后点击OK。
  5. 点击工具栏上的New Analysis图吧(向右箭头);在MATLAB中运行包含要剖析MEX的程序;然后点击AM中的Start开始剖析。
  6. 剖析一段时间或程序结束后点击Stop,软件会自动分析剖析结果。 分析完成后切换到Bottom-up面板,双击你要查看的函数名称,即可查看各代码行的耗时分析结果。找到瓶颈进行优化。

纯个人摸索出来的方法,可能上面的步骤并非最佳,但至少可以实现MEX程序代码的剖析了。不足之处大家欢迎指正。谁有更好的方法也欢迎拿出来分享。

(0)
小多多的头像小多多创始人

相关推荐

发表回复

登录后才能评论