MSYS2-GNU-QEインストールメモ

MPI版は正常に動きません

MPI無し版は動きますが、WSL2/MPI版の数十倍の計算時間がかかります

結論(2026-08-23)
- MSYS2+MS-MPI版:実計算で内部データが破損するため使用不可
- MSYS2+OpenMP版:正常動作するが、WSL2+MPI版より数十倍遅い
- 実運用およびWinmostar連携には、WSL2+Ubuntu+MPI版を使用する

以下は、実用禁止・検証記録として残しています。

目的:

OS: 


qe-windows/
├─ bin/
│ ├─ pw.exe
│ ├─ ph.exe
│ ├─ pp.exe
│ ├─ projwfc.exe
│ ├─ libgfortran-*.dll
│ ├─ libgcc_s_*.dll
│ └─ libwinpthread-1.dll
├─ pseudo/
└─ install/
└─ MS-MPI Runtime installer

msys2+mingw+ms-mpi

powershell
[System.Runtime.InteropServices.RuntimeInformation]::OSArchitecture
> X64

MSYS2 (UCRT64): https://www.msys2.org/からDL
スタートメニュー => MSYS2 UCRT64 を実行
$ pacman -Syu
there is nothing to do が出るまで繰り返す

$ pacman -S --needed \
base-devel \
git \
nano \
patch \
diffutils \
autoconf \
automake \
libtool

$ pacman -S --needed \
mingw-w64-ucrt-x86_64-gcc \
mingw-w64-ucrt-x86_64-gcc-fortran \
mingw-w64-ucrt-x86_64-cmake \
mingw-w64-ucrt-x86_64-ninja \
mingw-w64-ucrt-x86_64-openblas \
mingw-w64-ucrt-x86_64-fftw \
mingw-w64-ucrt-x86_64-msmpi

UCRT64環境の確認
$ echo "$MSYSTEM"
$ which gcc
$ which gfortran
$ which mpif90
$ which mpifort
$ gcc --version
$ gfortran --version
$ mpifort --version
$ mpifort -show


MPI無し(OpenMP)版

QE7.6コンパイル
msys2のディレクトリ: インストールディレクトリ/home/ユーザ名

tar -xf qe-7.6-ReleasePack.tar.gz
mv q-e-qe-7.6/ qe-7.6
cd qe-7.6

sys/times.h対策
cd ~/qe-7.6
nano external/devxlib/src/timer.c

#ifndef _WIN32
#include <sys/times.h>
#endif

に修正

/dev/null対策:
grep -n "/dev/null" Modules/environment.f90
sed -i "s|'/dev/null'|'NUL'|g" Modules/environment.f90
再確認
grep -n "NUL" Modules/environment.f90

rm -rf build-ucrt-omp
cmake.exe -S . -B build-ucrt-omp -GNinja \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_C_COMPILER=gcc.exe \
-DCMAKE_CXX_COMPILER=g++.exe \
-DCMAKE_Fortran_COMPILER=gfortran.exe \
-DCMAKE_C_FLAGS="-Wno-incompatible-pointer-types" \
-DCMAKE_EXE_LINKER_FLAGS="-Wl,--stack,536870912" \
-DBUILD_SHARED_LIBS=OFF \
-DQE_ENABLE_MPI=OFF \
-DQE_ENABLE_OPENMP=ON \
-DQE_ENABLE_SCALAPACK=OFF \
-DQE_ENABLE_HDF5=OFF \
-DQE_ENABLE_LIBXC=OFF \
-DQE_ENABLE_ENVIRON=OFF \
-DQE_ENABLE_TEST=OFF \
-DQE_FFTW_VENDOR=FFTW3 \
-DBLA_VENDOR=OpenBLAS

cmake.exe --build build-ucrt-omp --parallel 4

export PATH="/home/tkami/qe-7.6/build-ucrt-omp/bin:$PATH"
export OMP_NUM_THREADS=4
export OMP_STACKSIZE=128M

pw.x -in CaO.inp


MPI版

MS-MPI DL (msmpisetup.exe):
https://learn.microsoft.com/en-us/message-passing-interface/microsoft-mpi#ms-mpi-downloads

msys2 (UCRT64)再起動
export PATH="/c/Program Files/Microsoft MPI/Bin:$PATH"
hash -r

$ nano ~/.bashrc で保存

$ which mpiexec.exe
$ where.exe mpiexec
$ mpiexec.exe -help

テストプログラム作成
mkdir -p ~/mpi-test
cd ~/mpi-test
nano hello_mpi.f90

program hello_mpi
use mpi
implicit none

integer :: ierr, rank, nproc

call MPI_Init(ierr)
call MPI_Comm_rank(MPI_COMM_WORLD, rank, ierr)
call MPI_Comm_size(MPI_COMM_WORLD, nproc, ierr)

write(*, '(A,I0,A,I0)') 'Hello from rank ', rank, ' of ', nproc

call MPI_Finalize(ierr)
end program hello_mpi

$ mpifort hello_mpi.f90 -o hello_mpi.exe
$ ./hello_mpi.exe
$ mpiexec.exe -n 4 ./hello_mpi.exe


QE7.6コンパイル
msys2のディレクトリ: インストールディレクトリ/home/ユーザ名

tar -xf qe-7.6-ReleasePack.tar.gz
mv q-e-qe-7.6/ qe-7.6
cd qe-7.6

rm -rf build-msmpi
cmake.exe -S . -B build-msmpi -G Ninja \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_C_COMPILER=gcc \
-DCMAKE_Fortran_COMPILER=gfortran \
-DMPI_C_COMPILER=mpicc \
-DMPI_Fortran_COMPILER=mpifort \
-DQE_ENABLE_MPI=ON \
-DQE_ENABLE_OPENMP=ON \
-DQE_ENABLE_SCALAPACK=OFF \
-DQE_ENABLE_HDF5=OFF \
-DQE_ENABLE_LIBXC=OFF \
-DQE_ENABLE_ENVIRON=OFF \
-DQE_ENABLE_TEST=OFF \
-DQE_FFTW_VENDOR=FFTW3 \
-DBLA_VENDOR=OpenBLAS

cmake.exe -S . -B build-msmpi \
-DCMAKE_C_FLAGS="-Wno-incompatible-pointer-types"

cmake.exe -S . -B build-msmpi \
-DCMAKE_EXE_LINKER_FLAGS="-Wl,--stack,536870912"

sys/times.h対策
cd ~/qe-7.6
nano external/devxlib/src/timer.c

#ifndef _WIN32
#include <sys/times.h>
#endif

に修正

/dev/null対策:
grep -n "/dev/null" Modules/environment.f90
sed -i "s|'/dev/null'|'NUL'|g" Modules/environment.f90
再確認
grep -n "NUL" Modules/environment.f90


cmake.exe --build build-msmpi --parallel 4

実行
$ ./build-msmpi/bin/pw.x.exe

MPI実行
export OMP_NUM_THREADS=2
mpiexec.exe -n 4 ~/qe-7.6/build-msmpi/bin/pw.x.exe -in scf.in