采用intel编译器并行编译执行杂化函数计算CP2K

2024-03-24 10:58

本文主要是介绍采用intel编译器并行编译执行杂化函数计算CP2K,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在采用intel的ifort编译支持hybrid functional计算的CP2K时,尽管编译得到了cp2k.popt的可执行模块,但是在运行时常遇到如下的错误:
HFX_MEM_INFO would be printed out:
forrtl: severe (174): SIGSEGV, segmentation fault occurred
Image PC Routine Line Source
cp2k.popt 0000000001321BCE Unknown Unknown Unknown

经过多次的尝试,找到了一种解决办法,似乎是intel的ifort(至少11.1.072)还不支持ISO_C_BINDING。

下面将成功编译得到支持hybrid functional计算的CP2K的步骤给列出来,以作备份。
我用的编译器是intel的11.1.072/bin/intel64/ifort,并与openmpi/1.4.2绑定的mpif90,
用intel的编译器编译得到的fftw-3.2.2;
scalapck、lapack、blas库等用的是intel/11.1.072/mkl/lib/em64t带的。

1、下载libint-1.1.4.tar.gz ,它可从
http://libint.valeyev.net/
http://sourceforge.net/projects/libint/files/v1-releases/
下载到。

下载解压后运行该目录下的./configure。整个命令如下,
./configure --prefix='被安装到的目录' --with-libint-max-am=5 --with-libderiv-max-am1=4  F77=ifort 
这里“被安装的的目录”,根据自己的程序安装要求自行设置它的实际路径。
比如我实际的命令:
./configure --prefix='/home/zh/soft/libint-1.1.4' --with-libint-max-am=5 --with-libderiv-max-am1=4  F77=ifort 
然后就是
make
make install
这样就将编译好的libint 1.1.4版本安装到了所指定的目录。

2、下载CP2K。

http://cp2k.berlios.de/download.html
下载最新版本的CP2K。
我目前安装的版本是CP2K version 2.2.263 (Development Version)和CP2K version 2.1.397 (Development Version)。
下载解压后,进入cp2k/tools/hfx_tools/libint_tools目录下,参考该目录里面的“README_LIBINT”,运行如下的命令:
g++ -O3 -c libint_cpp_wrapper.cpp -I/'path_to_libint_include'
由于我将libint库安装到了/home/zh/soft/libint-1.1.4目录中,我实际运行的命令为:
g++ -O3 -c libint_cpp_wrapper.cpp -I/home/zh/soft/libint-1.1.4/include

然后进入CP2K的arch目录,即cp2k/arch,编辑里面的Linux-x86-64-intel.popt,它的里面的设置为:
# by default some intel compilers put temporaries on the stack
# this might lead to segmentation faults is the stack limit is set to low
# stack limits can be increased by sysadmins or e.g with ulimit -s 256000
# furthermore new ifort (10.0?) compilers support the option
# -heap-arrays 64
# add this to the compilation flags is the other options do not work
# The following settings worked for:
# - AMD64 Opteron
# - SUSE Linux Enterprise Server 10.0 (x86_64)
# - Intel(R) Fortran Compiler for Intel(R) EM64T-based applications, Version 10.0.025
# - AMD acml library version 3.6.0
# - MPICH2-1.0.5p4
# - SCALAPACK library          1.8.0
#
#
CC       = cc
CPP      =
FC       = mpif90
LD       = mpif90
AR       = ar -r
DFLAGS   = -D__INTEL -D__FFTSG -D__parallel -D__BLACS -D__SCALAPACK -D__FFTW3 -D__LIBINT -D__HAS_NO_ISO_C_BINDING
CPPFLAGS =
INTEL_INC = /usr/apps/isv/intel/11.1.072/include
LIBINT_INC = $(HOME)/soft/libint-1.1.4/include
FFTW_INC = /usr/apps/free/fftw/3.2.2_i/include
FCFLAGS  = $(DFLAGS) -I$(LIBINT_INC) -I$(INTEL_INC) -I$(FFTW_INC) -O2 -xW -heap-arrays 64 -funroll-loops -fpp -free
FCFLAGS2 = $(DFLAGS) -I$(LIBINT_INC) -I$(INTEL_INC) -O1 -xW  -heap-arrays 64 -fpp -free
LDFLAGS  = $(FCFLAGS) -I$(INTEL_INC)

FFTW_LIB = /usr/apps/free/fftw/3.2.2_i
INTEL_LIB = /usr/apps/isv/intel/11.1.072/mkl/lib/em64t
LIBINT = $(HOME)/soft/libint-1.1.4
LIBS     =-L$(INTEL_LIB)/ -lmkl_scalapack_lp64 -lmkl_blacs_openmpi_lp64 -lmkl_intel_lp64 -lmkl_sequential -lmkl_core \
           $(HOME)/soft/cp2k-2.1/tools/hfx_tools/libint_tools/libint_cpp_wrapper.o \
           $(LIBINT)/lib/libderiv.a \
           $(LIBINT)/lib/libint.a \
           -lstdc++ \
           $(FFTW_LIB)/lib/libfftw3.a

OBJECTS_ARCHITECTURE = machine_intel.o


graphcon.o: graphcon.F
        $(FC) -c $(FCFLAGS2) $<

qs_vxc_atom.o: qs_vxc_atom.F
        $(FC) -c $(FCFLAGS2) $<


编辑好了之后进入makefiles目录,然后运行如下命令:
make ARCH=Linux-x86-64-intel VERSION=popt
运行cp2k编译器来较慢,等10来分钟后,就可以得到可执行模块。

然后就是测试cp2k/tests/QS/regtest-hybrid目录里面的例子,比如CH3-hybrid-HSE06-lsd.inp,看能否正常运行。对于hybrid functional的计算,通常需要很大的内存。

这篇关于采用intel编译器并行编译执行杂化函数计算CP2K的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/841391

相关文章

C++统计函数执行时间的最佳实践

《C++统计函数执行时间的最佳实践》在软件开发过程中,性能分析是优化程序的重要环节,了解函数的执行时间分布对于识别性能瓶颈至关重要,本文将分享一个C++函数执行时间统计工具,希望对大家有所帮助... 目录前言工具特性核心设计1. 数据结构设计2. 单例模式管理器3. RAII自动计时使用方法基本用法高级用法

Python实现精确小数计算的完全指南

《Python实现精确小数计算的完全指南》在金融计算、科学实验和工程领域,浮点数精度问题一直是开发者面临的重大挑战,本文将深入解析Python精确小数计算技术体系,感兴趣的小伙伴可以了解一下... 目录引言:小数精度问题的核心挑战一、浮点数精度问题分析1.1 浮点数精度陷阱1.2 浮点数误差来源二、基础解决

Java实现远程执行Shell指令

《Java实现远程执行Shell指令》文章介绍使用JSch在SpringBoot项目中实现远程Shell操作,涵盖环境配置、依赖引入及工具类编写,详解分号和双与号执行多指令的区别... 目录软硬件环境说明编写执行Shell指令的工具类总结jsch(Java Secure Channel)是SSH2的一个纯J

Java Stream 并行流简介、使用与注意事项小结

《JavaStream并行流简介、使用与注意事项小结》Java8并行流基于StreamAPI,利用多核CPU提升计算密集型任务效率,但需注意线程安全、顺序不确定及线程池管理,可通过自定义线程池与C... 目录1. 并行流简介​特点:​2. 并行流的简单使用​示例:并行流的基本使用​3. 配合自定义线程池​示

从原理到实战解析Java Stream 的并行流性能优化

《从原理到实战解析JavaStream的并行流性能优化》本文给大家介绍JavaStream的并行流性能优化:从原理到实战的全攻略,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的... 目录一、并行流的核心原理与适用场景二、性能优化的核心策略1. 合理设置并行度:打破默认阈值2. 避免装箱

GO语言中函数命名返回值的使用

《GO语言中函数命名返回值的使用》在Go语言中,函数可以为其返回值指定名称,这被称为命名返回值或命名返回参数,这种特性可以使代码更清晰,特别是在返回多个值时,感兴趣的可以了解一下... 目录基本语法函数命名返回特点代码示例命名特点基本语法func functionName(parameters) (nam

Python Counter 函数使用案例

《PythonCounter函数使用案例》Counter是collections模块中的一个类,专门用于对可迭代对象中的元素进行计数,接下来通过本文给大家介绍PythonCounter函数使用案例... 目录一、Counter函数概述二、基本使用案例(一)列表元素计数(二)字符串字符计数(三)元组计数三、C

python 线程池顺序执行的方法实现

《python线程池顺序执行的方法实现》在Python中,线程池默认是并发执行任务的,但若需要实现任务的顺序执行,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋... 目录方案一:强制单线程(伪顺序执行)方案二:按提交顺序获取结果方案三:任务间依赖控制方案四:队列顺序消

Python文本相似度计算的方法大全

《Python文本相似度计算的方法大全》文本相似度是指两个文本在内容、结构或语义上的相近程度,通常用0到1之间的数值表示,0表示完全不同,1表示完全相同,本文将深入解析多种文本相似度计算方法,帮助您选... 目录前言什么是文本相似度?1. Levenshtein 距离(编辑距离)核心公式实现示例2. Jac

Go语言连接MySQL数据库执行基本的增删改查

《Go语言连接MySQL数据库执行基本的增删改查》在后端开发中,MySQL是最常用的关系型数据库之一,本文主要为大家详细介绍了如何使用Go连接MySQL数据库并执行基本的增删改查吧... 目录Go语言连接mysql数据库准备工作安装 MySQL 驱动代码实现运行结果注意事项Go语言执行基本的增删改查准备工作