使用 mpicxx 时由于 _noalias 导致 OpenMPI 构建失败
Posted
技术标签:
【中文标题】使用 mpicxx 时由于 _noalias 导致 OpenMPI 构建失败【英文标题】:Build failure of OpenMPI due to _noalias when using mpicxx 【发布时间】:2017-12-25 01:15:42 【问题描述】:我尝试使用 11Aug17 的较新版本在我的部门机器上安装灯。但是,mpicxx 对以下行给出了错误:
mpicxx -g -O3 -DLAMMPS_GZIP -DLAMMPS_MEMALIGN=64 -DMPICH_SKIP_MPICXX -DOMPI_SKIP_MPICXX=1 -I/home/shixx597/codes/kim-api-v1.7.3/lib/kim-api-v1/include -c ../pair_list.cpp
../pair_list.cpp(88): error: expected a ";"
const dbl3_t * _noalias const x = (dbl3_t *) atom->x[0];
^
../pair_list.cpp(89): error: "restrict" has already been declared in the current scope
dbl3_t * _noalias const f = (dbl3_t *) atom->f[0];
^
../pair_list.cpp(89): error: expected a ";"
dbl3_t * _noalias const f = (dbl3_t *) atom->f[0];
^
../pair_list.cpp(114): error: identifier "x" is undefined
const double dx = x[i].x - x[j].x;
^
../pair_list.cpp(160): error: identifier "f" is undefined
f[i].x += dx*fpair;
^
../pair_list.cpp(166): error: identifier "f" is undefined
f[j].x -= dx*fpair;
^
compilation aborted for ../pair_list.cpp (code 2)
make[1]: *** [pair_list.o] Error 2
make[1]: Leaving directory `/home/shixx597/codes/lammps-11Aug17/src/Obj_mpi'
make: *** [mpi] Error 2
同事跟我说是openmpi的问题。所以我尝试为我安装一个新的 openmpi。但是,我收到以下错误,告诉我 automake 没有像这样安装:
cd . && /bin/sh /home/shixx597/codes/openmpi-3.0.0/config/missing automake-1.15 --foreign
/home/shixx597/codes/openmpi-3.0.0/config/missing: line 81: automake-1.15: command not found
WARNING: 'automake-1.15' is missing on your system.
You should only need it if you modified 'Makefile.am' or
'configure.ac' or m4 files included by 'configure.ac'.
The 'automake' program is part of the GNU Automake package:
<http://www.gnu.org/software/automake>
It also requires GNU Autoconf, GNU m4 and Perl in order to run:
<http://www.gnu.org/software/autoconf>
<http://www.gnu.org/software/m4/>
<http://www.perl.org/>
make: *** [Makefile.in] Error 1
When I tried to install automake-1.15, I get the following error:
CDPATH="$ZSH_VERSION+.:" && cd . && "/home/shixx597/codes/automake-1.15/t/wrap/aclocal-1.15"
Can't locate /home/shixx597/codes/automake-1.15/bin/aclocal in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at /home/shixx597/codes/automake-1.15/t/wrap/aclocal-1.15 line 29.
make: *** [aclocal.m4] Error 2
我没有任何 sudo 权限在这台奇怪的部门机器上做任何事情。
即使我尝试在部门机器上完成安装灯,我也想知道我是否可以完成大型粘合力场模型的运行。
【问题讨论】:
如果我不得不猜测,听起来它无法识别_noalias
,这是使用英特尔编译器的 mpicxx 的一个已知问题。如果可以,请尝试将编译器更改为 GCC。您可以在本地安装各种编译器,以避免需要 sudo 权限。 lammps.sandia.gov/threads/msg58203.html
也许您可以添加CPPFLAGS=-D_noalias
、CFLAGS=-D_noalias
或CXXFLAGS=-D_noalias
或类似的方法来使用预处理器删除符号。
从 tarball 构建 Open MPI 时不需要 autotools
。您可能弄乱了某些关键文件的时间戳,make
认为应该再次调用 autotools
。最简单的方法是清除您的源目录,解压缩源,然后再次configure && make
。
【参考方案1】:
其实这是一个比较有名的issue,一共有三种解决方案。
-
使用 GCC 而不是 Intel 编译器(可能不可取)。
在编译时使用
-restrict
标志(我假设在运行make 时附加它,例如make CXX_FLAGS=-restrict
只需从构建中删除这两个文件即可。
如果您真的想尝试,您也可以尝试使用 sed 或 awk 从两个有问题的文件中删除 _noalias
关键字:pair_list.h
和 pair_list.cpp
,或者将 _noalias
定义为空关键字,正如 jww 在 cmets 中所建议的那样。
【讨论】:
非常感谢!我无法使用 GCC 编译器。我会尝试其他两种方法。圣诞快乐!以上是关于使用 mpicxx 时由于 _noalias 导致 OpenMPI 构建失败的主要内容,如果未能解决你的问题,请参考以下文章
使用 VPC 配置添加 AWS Lambda 会导致访问 S3 时超时