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


Winmostar設定
Windows PATH:
D:\msys64\ucrt64\bin
C:\Program Files\Microsoft MPI\Bin
環境変数
OMP_NUM_THREADS=1

ツール
→ 環境設定
→ プログラムパス
→ Quantum ESPRESSO
D:\msys64\home\tkami\qe-7.6\build-msmpi\bin\pw.exe

計算
→ Solid
→ mpiexec (QE)
| 項目 | 設定 |
| ------------------------ | ------------------------------------------------ |
| mpiexec (QE) | `Select` |
| mpiexec.exe | `C:\Program Files\Microsoft MPI\Bin\mpiexec.exe` |
| Options for mpiexec (QE) | `-np %WM_NUM_PROC%` |
| 使用するQEのバージョン | `7.6`または選択可能な最新7.x |

ツール
→ 環境設定
→ 計算
→ Solid
→ QE擬ポテンシャルフォルダ
D:\QE\pseudo

Quantum ESPRESSOキーワード設定
Use MPI: 有効
MPIプロセス数: 4



項目 設定例
Profile Name Ubuntu-WSL2-QE
Hostname localhost
Port 22
Timeout デフォルト、または30
Username Ubuntuのユーザー名
Password Ubuntuユーザーのパスワード
SSH Key 空欄
Queue Run
Solver Quantum ESPRESSO
Options 空欄
Remote Directory 最初は空欄
Prefix for Queueing Commands 空欄

Test Connectionをクリックします。
初回接続でStore key in cache? (y/n)と聞かれたら 'y'。
成功すると、
Connection test succeeded.
と表示されます。

WinmostarからWSL2のtemporary directoryへ転送された *.sh に実行権限がつかないことについて

回避策: /usr/bin/nohup が呼ばれる前に、wrapper を呼ばせる

sudo vi /usr/local/bin/nohup

#!/bin/bash

printf '%s user=%s cwd=%s args=%s\n' \
"$(date -Is)" "$(id -un)" "$PWD" "$*" \
>> "$HOME/winmostar-nohup.log"

chmod u+x -- ./*.sh 2>/dev/null || true

if [[ $# -gt 0 && "$1" == *.sh ]]; then
SCRIPT="$1"
shift
exec /usr/bin/nohup /bin/bash "$SCRIPT" "$@"
fi

exec /usr/bin/nohup "$@"

sudo chmod 755 /usr/local/bin/nohup

/usr/bin/nohup より先に、/usr/local/bin/nohup が呼ばれることを確認:
command -v nohup

Winmostar側のモデル設定

  1. "固体" => "結晶ビルダ" で構造モデルを作成
  2. "固体" => "Quantum Espresso" => "キーワード設定" で設定。
    Use MPIでのMPI数はリモートジョブに引き継がれる
  3. "ツール"=> "リモートジョブ投入"
    Profileで "Ubuntu-WSL2-QE" を選択
  4. "Send & Submit" で実行