0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

# Windows 11 で FFTW3 をマルチスレッド対応 DLL ビルドする(MSYS2/MinGW)

Last updated at Posted at 2025-09-14

Windows 11 で FFTW3 をマルチスレッド対応 DLL ビルドする(MSYS2/MinGW)

🎯 対象読者

  • Windows 11 環境で FFTW を使いたい人
  • Visual Studio / .NET / C++ から FFTW を呼び出したい人
  • マルチスレッド対応 DLL (libfftw3-3.dll, libfftw3_threads-3.dll) を作りたい人

1. MSYS2 のインストール

  • MSYS2 公式サイト からインストーラをダウンロード。
    msys2-x86_64-YYYYMMDD.exe
  • インストール先(例: C:\msys64)を選択してインストール。
  • MSYS2 MSYS ターミナルを起動し、まず全体を更新します:
pacman -Syu

更新後に「ターミナルを閉じて再起動してください」と出たら必ず従う。


2. 開発ツールチェーンの導入

  • MSYS2 MinGW 64-bit ターミナルを起動。
    (スタートメニューに「MSYS2 MinGW 64-bit」があります)

必要なパッケージをインストール:

pacman -S --needed base-devel git mingw-w64-x86_64-toolchain

動作確認:

gcc --version

3. FFTW ソースの取得

安定版 tarball を使うのが確実です(例: 3.3.10)。

cd ~/source
curl -LO http://www.fftw.org/fftw-3.3.10.tar.gz
tar xvf fftw-3.3.10.tar.gz
cd fftw-3.3.10

4. ビルドディレクトリ作成

ソース直下でビルドせず専用フォルダを作ります:

mkdir build-mingw64
cd build-mingw64

5. configure

FFTW を マルチスレッド + SIMD 最適化 でビルドします。
このときツールを明示的に指定するのが重要です。

AR=ar RANLIB=ranlib NM=nm STRIP=strip DLLTOOL=dlltool \
CC=gcc CXX=g++ \
../configure \
  --host=x86_64-w64-mingw32 --build=x86_64-w64-mingw32 \
  --prefix=/mingw64 \
  --enable-shared --disable-static \
  --enable-threads --with-combined-threads \
  --enable-sse2 --enable-avx --enable-avx2 \
  --with-our-malloc16

主なオプション解説

  • --enable-shared … DLL を生成
  • --disable-static … 静的ライブラリは不要
  • --enable-threads --with-combined-threads … マルチスレッド対応
  • --enable-sse2 --enable-avx --enable-avx2 … SIMD 最適化を有効化
  • --with-our-malloc16 … FFTW 独自の 16 バイト境界 malloc を使用(SIMD 安定動作)

6. ビルド & インストール

make -j"$(nproc)"
make install

成功すると以下が生成されます(例: C:\msys64\mingw64\bin):

  • libfftw3-3.dll
  • libfftw3_threads-3.dll
  • libfftw3f-3.dll(float 版, 任意)

7. 確認

スレッド対応が有効か確認するには:

strings /mingw64/bin/libfftw3-3.dll | grep fftw_init_threads

fftw_init_threads が表示されればマルチスレッド対応です ✅


8. 必要な DLL

FFTW をビルドしたあと、アプリ実行時に以下の DLL が必要になります。

  • libfftw3-3.dll
    FFTW 本体(double 精度版)。本記事でビルドした DLL。

  • libfftw3_threads-3.dll
    --enable-threads でマルチスレッド機能を有効化した場合に生成されます。
    ただし、--with-combined-threads を付けてビルドした場合は libfftw3-3.dll にスレッド機能が同梱されるため、この DLL は不要になります。

  • libwinpthread-1.dll
    MinGW のスレッドランタイム DLL。マルチスレッド FFT 実行時に必須です。

🎉 まとめ

MSYS2 を使えば Windows 上でも簡単に FFTW3 のマルチスレッド対応 DLL をビルドできます。
.NET や C++ アプリに組み込む際は、fftw_init_threads() を呼んでから fftw_plan_with_nthreads() でスレッド数を指定してください。


📝 ライセンス補足

FFTW は GPL v2 ライセンスで配布されています。
そのため以下の点に注意が必要です:

  • オープンソースや研究用途など、ソースコードを公開できる場合は GPL に従って自由に利用可能です。
  • ソースコードを公開せずに商用アプリへ組み込む場合は、開発元から 商用ライセンスの購入が必要です。

詳細は FFTW 公式サイトのライセンス情報をご確認ください:
👉 http://www.fftw.org/pricing.html

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?