采用fortran进行数值计算的朋友们都应该听说过大名鼎鼎的lapack库,我就不多做介绍了,在此,我只是介绍一个编译好的lapack二进制包ACML(AMD Core Math Library),并且我强烈推荐,有几个原因:

  1. ACML是预编译好的二进制文件,省去了许多重新编译的麻烦;

  2. AMD对ACML中的许多函数针对x86构架进行了优化,执行效率很高;

  3. ACML中有专门针对SMP(不要告诉我你不知道SMP是什么东东)的库,可以实现并行多处理,如果你是多核多线程处理器的话可以最大程度发挥处理器的效能,针对我的电脑我进行了一个测试,分别链接到libacml_mp_dll.dll(支持多处理)和ibacml_dll.dll(不支持多处理),性能提高70%左右(我的只是双核U);

  4. 还有一点ACML是免费的。

  不错吧,使用lapack包的朋友们可以试试,即使你的U是intel的也没有关系,ACML通吃(这里我说明一下ACML对AMD的机器优化的较好,但对于Intel的cpu还不行,如果你是Intel的cpu还是用MKL吧,下面我对MKL的使用也做了说明),呵呵,下面针对windows 7系统我介绍一下ACML的安装和使用过程;

  前提:

  1. Intel Visual Fortran 11(考虑到所使用的win7平台,目前ivf11应该是最好的的选择了,不要给我提cvf6了,太古董了,并且cvf的ide在win7下会崩溃);

  2. Visual Studio 2008 专业版或其它,但不能是速成版,ivf真是太那个了,凭什么不支持速成版啊;

  3. acml-4-4-0-ifort32.exe,下载地址 ;

  安装步骤如下,顺序可不能错哦:

  1. 首先安装visual studio 2008 pro,选择你需要的组件,至少得包含visual c++;

  2. 安装 Intel Visual Fortran Compiler 11;

  3. 安装ACML,记着安装的位置,如我们这里是 "C:\AMD\acml4.4.0",之后我们会用到;

  4. 如果你的处理器是多核的,进入acml安装路径下,并打开ifort32_mp\lib目录,将当前目录位置复制,比如我的是 “C:\AMD\acml4.4.0\ifort32_mp\lib”;

  5. 将之前复制的路径添加到path环境变量,如下图所示:

  6. 我们先测试一下在命令行界面下的情况,新建一个fortran源文件,main.f90, 输入以下内容:

    EXTERNAL         ACMLINFO

    CALL ACMLINFO()

    STOP

    END

    在开始菜单中打开依次打开 Intel(R) Software Development Tools->Intel(R) Fortran Compiler 11.0.061->Fortran Build Environment for applications running on IA-32 输入编译命令,ifort /libs:dll -Qopenmp main.f90 c:\amd\acml4.4.0\ifort32_mp\lib\libacml_mp_dll.lib,编译成功会输出以下内容,则表示设置成功了。

  7. 接着我们在图形界面的IDE下进行配置并测试,打开Visual Studio,新建工程Intel Fortran->Console Application,然后配置编译和链接选项,点Project->Properties,在Fortran的Command Line的Additional Options中填入-Qopenmp /libs:dll,在Linker的Command Line的Additional Options中填上C:\AMD\acml4.4.0\ifort32_mp\lib\libacml_mp_dll.lib,完成后,编译工程即可。

  如果你的机器是Intel的U的话,用Intel自己的MKL中的LAPCK库效率最理想,只需要把mkl的lib路径加入到链接搜索路径,再增加几个链接库文件就可以了,使用mkl需要以下几个库文件:mkl_intel_c.lib  mkl_intel_thread.lib mkl_core.lib libiomp5md.lib。另外,使用mkl时,如果你的U为AMD的话最好禁用优化,即加上选项/Od, 否则可能会出现计算错误,这种情况我就遇到过。

Intel Visual Fortran Compiler 11调用lapack库实现并行多处理计算的更多相关文章

  1. Windows下Fortran编译Lapack库及使用的方法(转自新浪)

    Lapack 是一套被非常广泛使用的线性代数计算工具库,现在的主要编写语言时 Fortran90 .Lapack 基本上可以说是速度最快的线性代数计算库,我们看看官方给出的其被应用的几个地方就可以看出 ...

  2. linux系统下C语言调用lapack ,blas库

    在利用C语言编程,经常调用其他的软件包,其中lapack,blas库是最常用的两个库,这里讲下在linux系统下,C语言编程如何调用这两个库: 1.首先讲下blas库的调用,这里以两个向量内积函数为例 ...

  3. Compaq Visual Fortran生成静态库的方法及使用

    Compaq Visual Fortran 6.5生成lib静态库详细方法: 打开Compaq Visual Fortran,新建Fortran Static Library工程,命名为ForLib: ...

  4. 16位汇编 多文件 intel汇编 编译器masm5.0 调用子程序库即静态库的自定义函数 WINDOWS

    ;以下是16位汇编 创建静态库,并调用静态库中的函数 ;多文件汇编格式 ;编译方法(此处用的是masm 5.0,如果是其他的编译器,有可能不能编译) ;第一种,编译方法 ;1.masm main.as ...

  5. visp库中解决lapack库的问题

    解决的办法是——绕过去,不要用这个库: 使用中发现如下代码抛出异常: //vpTemplateTracker.cpp try { initHessienDesired(I); ptTemplateSu ...

  6. iOS开发:在Swift中调用oc库

    先列举这个工程中用到的oc源码库: MBProgressHUD:半透明提示器,Loading动画等 SDWebImage:图片下载和缓存的库 MJRefresh: 下拉刷新,上拉加载 Alamofir ...

  7. windows下Qt Creator5.1.0编写程序以及调用OpenCV库

    系统说明 最近使用opencv编写程序,程序编的差不多就学习使用QT加个界面,首先声明下本人的系统和使用的软件版本, 系统: windows xp QT IDE:QT Creator5.1.0 Ope ...

  8. C语言中复数运算及调用blas,lapack中复数函数进行科学计算

    C语言中常用的数据类型主要int, float ,double ,char 等,但在科学运算中复数扮演着重要角色.这里讲下C语言中的复数运算以及如何调用blas,lapack库中的复数函数来进行科学计 ...

  9. 简单的调用OpenCV库的Android NDK开发 工具Android Studio

    前言 本博客写于2017/08/11, 博主非专业搞安卓开发, 只是工作的需要倒腾了下Android NDK相关的开发, 博文中有什么不正确.不严格的地方欢迎指正哈    本文后续也许还会有删改, 就 ...

随机推荐

  1. ServletContext与ServletConfig的详解及区别

    转自http://hi.baidu.com/huaxuelili/item/1704a03dbb5cd7f22784f4c6 一.ServletContext详解ServletContext是serv ...

  2. 动态设置form表单的元素值

    因为经常用到的功能,所以我想到封装一个函数,用起来更方便快捷.. 先来看效果图如下: var data = {a:'aaaa', b:'2', 'c':[1,2,4]} 这就相当于 ajax 返回的j ...

  3. Objective-C专题,是学习iOS开发的前奏(转)

    第一个OC的类 来源:http://www.cnblogs.com/mjios/archive/2013/04/06/3002814.html 本文目录 一.语法简介 二.用Xcode创建第一个OC的 ...

  4. json学习系列(1)-使用json所要用到的jar包下载

    内容来源于互联网. json是个非常重要的数据结构,在web开发中应用十分广泛.每个开发者都应该好好的去研究一下json的底层实现.在使用json之前首先要明白需要哪些jar文件,初次使用的时候很容易 ...

  5. HUST1024 dance party(最大流)

    题目大概说有n男n女,男的每回合要和不同女的跳舞,男女都有自己喜欢一起跳舞的对象,他们最多能容忍和k个不喜欢的人跳舞,问舞会最多能进行几个回合. 二分枚举回合用最大流判断:男和女各拆成两点i.i'和j ...

  6. BZOJ4155 : [Ipsc2015]Humble Captains

    第一问最小割,第二问: 设du[i]表示i点的度数,则要最小化$\frac{|1集合的du[i]之和-2集合的du[i]之和|}{2}$, 压位01背包即可. #include<cstdio&g ...

  7. BZOJ3658 : Jabberwocky

    考虑将某线段下方的点取走: 将所有点从低到高排序 每扫描到一条水平线,对于上面每个点,找到它下面同色的前驱后继,统计中间点的个数 然后再把线上所有点插入数据结构中 最后再统计相邻的同色的点之间的点个数 ...

  8. cordova的android notify消息通知插件

    最近在学习用CORDOVA(PHONEGAP)结合SENCHA TOUCH开发应用,想实现一个安卓下的消息通知功能,这个可以通过CORDOVA的插件来实现. 插件目录结构如下: notifyplugi ...

  9. js上传图片预览

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  10. python中迭代器和生成器

    l=[1,2,3,4] for n in l: print n 在看上面这段代码的时候,我们没有显式的控制列表的偏移量,就可以自动的遍历了整个列表对象.那么for 语句是怎么来遍历列表l的呢?要回答这 ...