Windows下编译安装ARPACK

ARPACK采用Arnoldi算法求解大型稀疏矩阵特征值。本文拟记录在Windows下编译安装ARPACK的流程。

零、环境

操作系统Windows 10
集成开发环境Visual Studio 2019 Community
CMake3.24.2
Intel oneAPI  BaseKit

w_BaseKit_p_2023.1.0.47256_offline

Intel oneAPI  HPCKitw_HPCKit_p_2023.1.0.46357_offline

一、依赖项

1.1 Intel oneAPI

由于oneAPI HPCKit依赖于oneAPI BaseKit,因此,需要首先下载安装oneAPI BaseKit,然后再安装oneAPI HPCKit

1.2 Ninja

即便将CC、CMAKE_C_COMPILER配置为icl,Visual Studio 2019仍旧使用Visual Studio 2019自带的编译器cl,而不会使用Intel oneAPI的C/C++编译器。

目前oneAPI提供了对CMake Ninja Generator来进行构建的支持。若要使用Intel oneAPI C/C++编译器,需要使用Ninja。目前,Visual Studio 2019已经提供了对Ninja的支持。

二、方案1:使用VS编译ARPACK

2.1 下载ARPACK

git clone https://github.com/opencollab/arpack-ng.git
cd ./arpack-ng/
git checkout -b arpack-3.9.0 3.9.0

2.2 构建工程

打开cmd命令行窗口,通过"C:\Program Files (x86)\Intel\oneAPI\setvars.bat"配置oneAPI环境变量,

 然后再运行"cmake-gui",打开cmake界面,按照以下配置构建项目,

Where is the source codeD:/YouQuan/CaeFrameworks/ARPACK/arpack-ng
Where to build the binariesD:/YouQuan/CaeFrameworks/ARPACK/BUILD/arpack-ng
CMAKE_INSTALL_PREFIXD:/YouQuan/CaeFrameworks/ARPACK/INSTALL/arpack-ng
ICBTRUE
INTERFACE64TRUE

2.3 配置arpack.sln

创建"D:\YouQuan\CaeFrameworks\ARPACK\BUILD\arpack-ng\arpack-ng_exports.def",填写如下内容,

LIBRARY    arpack.dll


EXPORTS
	cmout_
	cvout_
	dgetv0_
	dmout_
	dnaitr_
	dnapps_
	dnaup2_
	dnaupd_
	dnconv_
	dneigh_
	dneupd_
	dngets_
	dsaitr_
	dsapps_
	dsaup2_
	dsaupd_
	dsconv_
	dseigt_
	dsesrt_
	dseupd_
	dsgets_
	dsortc_
	dsortr_
	dstatn_
	dstats_
	dstqrb_
	dvout_
	icnteq_
	iswap_
	ivout_
	arscnd_
	smout_
	zgetv0_
	znaitr_
	znapps_
	znaup2_
	znaupd_
	zneigh_
	zneupd_
	zngets_
	zsortc_
	zstatn_

打开arpack.sln,按照如下配置arpack项目属性,

[Fortran]/[External Procedures]/[Calling Convention]C, REFERENCE (/iface:cref)
[Fortran]/[External Procedures]/[Append Underscore to Extrnal Nam]Yes (/assume:underscore)
[Linker]/[Input]/[Module Definition File]arpack-ng_exports.def

按照如下配置bug_1323、bug_142、bug_142_gen、bug_58_double、bug_79_double_complex、dnsimp_test等项目属性

[Fortran]/[External Procedures]/[Calling Convention]C, REFERENCE (/iface:cref)
[Fortran]/[External Procedures]/[Append Underscore to Extrnal Nam]Yes (/assume:underscore)

将然后在VS中右键"ALL_BUILD"完成编译,然后右键"INSTALL"完成安装。

三、方案2:使用Ninja编译安装ARPACK

3.1 下载ARPACK

git clone https://github.com/opencollab/arpack-ng.git
cd ./arpack-ng/
git checkout -b arpack-3.9.0 3.9.0

3.2 构建工程

打开cmd命令行窗口,通过"C:\Program Files (x86)\Intel\oneAPI\setvars.bat"配置oneAPI环境变量,

 输入以下命令,构建工程,

cmake -DCMAKE_C_COMPILER=icl -DCMAKE_CXX_COMPILER=icl -DCMAKE_INSTALL_PREFIX=D:/YouQuan/CaeFrameworks/ARPACK/INSTALL/arpack-ng -DICB=TRUE -DINTERFACE64=TRUE -GNinja D:\YouQuan\CaeFrameworks\ARPACK\arpack-ng

运行以下命令,编译ARPACK

cmake --build .

运行以下命令,安装ARPACK

cmake --install .

3.3 生成lib文件

将"D:/YouQuan/CaeFrameworks/ARPACK/arpack-ng/VISUAL_STUDIO/arpack-ng_exports.def"拷贝到"D:\YouQuan\CaeFrameworks\ARPACK\BUILD\arpack-ng",然后运行以下命令生成arpack.lib文件,

lib /def:arpack-ng_exports.def /machine:x64 /out:arpack.lib

四、方案3:使用自带VS工程编译ARPACK

实际上,arpack-ng/VISUAL_STUDIO目录已经包含了一个arpack-ng.sln用于构建arpack-ng,但是,该arpack-ng.sln却依赖NetLib实现的BlAS、LAPACK。

为了使用使用Intel oneAPI的BLAS、LAPACK,需要配置自带的arpack-ng.sln,打开arpack-ng.sln之后,右键"arpack-ng",打开其属性配置,在[Linker]/[Input]/[Additional Dependencies]中输入以下依赖,

libiomp5md.lib mkl_core_dll.lib mkl_intel_lp64_dll.lib mkl_intel_thread_dll.lib

然后,在VS中编译arpack-ng项目即可。

网络资料

ARPACKhttps://github.com/opencollab/arpack-ng

ARPACK User's Guide http://li.mit.edu/Archive/Activities/Archive/CourseWork/Ju_Li/MITCourses/18.335/Doc/ARPACK/Lehoucq97.pdf

Get the Intel® oneAPI Base Toolkithttps://www.intel.com/content/www/us/en/developer/tools/oneapi/base-toolkit-download.htmlGet the Intel® oneAPI HPC Toolkithttps://www.intel.com/content/www/us/en/developer/tools/oneapi/hpc-toolkit-download.html

Use CMake with the Compilerhttps://www.intel.com/content/www/us/en/docs/dpcpp-cpp-compiler/developer-guide-reference/2023-0/use-cmake-with-the-compiler.html?wapkw=cmake%20ninja

CMake Generators https://cmake.org/cmake/help/v3.24/manual/cmake-generators.7.html#id12

Ninjahttps://ninja-build.org/

Netlib Repositoryhttps://www.netlib.org/

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值