Intel MKL FFTW接口函数的配置和调用

一、Intel MKL库和oneAPI HPC Toolkit的安装

Intel MKL的安装相对简单,网上的教程可以随便找到。一如既往,为减轻各位奋战在各种环境配置的道路上的朋友的痛苦,这里给出一个相对而言比较简单的方法的链接: CFDer工作站配置之OneAPI(现只在Ubuntu系统上测试通过)。

注意:现在MKL库已经集合到OneAPI里面。

二、Intel MKL FFTW接口函数的配置

安装好MKL库后,FFTW接口函数并没有自动配置好,需要进一步手动配置。下面是配置步骤:

  1. 确定FFTW接口版本。
    Intel MKL 支持 FFTW 2.x 与 3.x 的 Fortran 与 C 的接口。相应的接口分别在下面的目录下:
/opt/intel/oneapi/mkl/xxxx.x.x/interfaces/fftw2xc
/opt/intel/oneapi/mkl/xxxx.x.x/interfaces/fftw2xf
/opt/intel/oneapi/mkl/xxxx.x.x/interfaces/fftw3xc
/opt/intel/oneapi/mkl/xxxx.x.x/interfaces/fftw3xf

注意上面的xxxx.x.x是自己安装MKL的版本号,如/opt/intel/oneapi/mkl/2022.1.0/interfaces/fftw2xf

  1. 创建接口函数
    下面是一个用Intel Compiler中的mpicc编译器,在Ubuntu 22.04 LTS平台上创建一个FFT2.x Fortran接口的例子:
cd /opt/intel/oneapi/mkl/2022.1.0/interfaces/fftw2xf
vim makefile
CC = mpicc  # 修改makefile中的93行中CC为Intel C编译器中的任意一种,如果你的系统本来就有icc,这一行不需要修改,修改后保存退出makefile
sudo make libintel64 PRECISION=MKL_SINGLE

编译成功后,FFTW接口函数存储在文件libfftw2xf_single_intel.a中,该文件只是Intel编译器 FFTW2.x Fortran接口,位于路径/opt/intel/oneapi/mkl/2022.1.0/lib/intel64中。

注意:上面CC = mpicc是在makefile文件中修改的,其他的在Linux终端输入。如果你的系统本来就有icc,这一行不需要修改。mpicc编译器在安装好oneAPI HPC Toolkit包后就可以使用,请参考上面给出的链接:CFDer工作站配置之OneAPI。此外,sudo make libintel64 PRECISION=MKL_SINGLEmakefile中有说明,请查看。

三、Intel MKL FFTW接口函数的调用

配置好Intel MKL FFTW的接口函数后,就可以快乐地使用FFTW的内容了。给出链接程序时,只需要链接FFTW接口函数Intel DFT MKL函数。下面是在Ubuntu 22.04 LTS的平台上,使用Intel Compiler的一个例子:

ifort -I/opt/intel/oneapi/mkl/2022.1.0/include/ -I/opt/intel/oneapi/mkl/2022.1.0/include/fftw/ mycode.f -L/opt/intel/oneapi/mkl/2022.1.0/lib/intel64/ -lfftw2xf_single_intel -lmkl_intel_lp64 -lmkl_intel_thread -lmkl_core -liomp5 -lpthread

或者在多个文件的项目中的makefile中使用也可以:

FC          = mpiifort
FLINKER     = mpiifort
OPTFLAGS    = -w -mcmodel=large -i-dynamic
WARNFLAGS   = -w
mklinc = /opt/intel/oneapi/mkl/2022.1.0/include
mklinc_fftw = $(mklinc)/fftw
mkllib = /opt/intel/oneapi/mkl/2022.1.0/lib/intel64
FCCFLAG= -lmkl_intel_lp64 -lmkl_intel_thread -lmkl_core -liomp5 -lpthread

FFLAGS =  $(OPTFLAGS)
EXECS =  parpost
default: $(EXECS)

$(EXECS): *.o
	$(FLINKER) $(OPTFLAGS) -DMKL_SINGLE -I$(mklinc) -I$(mklinc_fftw) *.F90 -L$(mkllib) -lfftw2xf_single_intel $(FCCFLAG) -o $(EXECS)  

*.o: *.F90
	$(FC) $(FFLAGS) -c *.F90 

clean:
	rm -f *.o

参考

使用Intel MKL FFTW接口函数

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值