LoginSignup
6
6

More than 5 years have passed since last update.

FFTWより高速と触れ込みのOTFFTの導入方法

Posted at

はじめに

FFTライブラリとしては,一般的に高速だということでFFTWが使われています.
OTFFTはFFTライブラリの一つで,FFTWの1.3~1.4倍ほど高速だという触れ込みで公開されています.

http://www.moon.sannet.ne.jp/okahisa/stockham/haswell.html
(正直なところ,実験結果としては少しあやしい部分もありますががが)

一応,僕の環境では,fwd0の実行で,2332kサイクル(rdtscで計測)出ました.
60FPSでは3GHzのCPUで50Mサイクル実行可能なので,1FPSあたりのCPU使用率は2%ぐらいということになります(理論値).
1秒間に2^10オーダーで実行できるのは非常にありがたいです.

VC++での導入方法

OTFFTの導入方法は以下のリンクからたどれます.
http://www.moon.sannet.ne.jp/okahisa/stockham/node5.html

ただ,VC++でプロジェクト組んでたりすると,オプションの設定方法が謎なのでこの点を中心に説明します.

OTFFTの最適化

必ずしも必要ではないらしいのですが,もし自分のPCに最適化した状態でOTFFTを実行したい場合は必須です.
(ソフトウェアを公開する目的ならあまりいらないかもしれません)

まず,VC++の開発者コマンドプロンプトを開いてください.
たぶん,メニューバーの[Visual Studio XXXX]-[Visual Studio Tools]の中にあると思います.

次に,OTFFTのディレクトリに移動して,以下のコマンドを実行してください.

cd OTFFTのディレクトリ
nmake ffttune

これで最適化用の実行ファイル(ffttune.exe)が作成されます.
生成された実行ファイルを実行すると最適化が始まります.
最適化するとヘッダファイルの中身を書き換えるみたいなので,もし,最適化前に戻したい場合は再度ファイルをダウンロードして下さい.

プロジェクトの設定

まず,OTFFTをインクルードできるようにしなければなりません.
なので,プロジェクトのプロパティから,[構成プロパティ]-[C/C++]-[全般]の追加のインクルードディレクトリに,OTFFTのディレクトリを指定してください.

次に,各種最適化オプションを付けます.
探すのが大変なので,[構成プロパティ]-[C/C++]-[すべてのオプション]を選んでください.
テキストボックスがありますが,これはオプションのフィルタになっています.

まずは,/archで検索してください.[拡張命令セットを有効にする]というオプションがあるので,Advanced Vector Extensionsを選択してください.

次に,/openmpで検索してください.[OpenMPのサポート]というオプションがあるので,はいを選択してください.

これでプロジェクトの設定は完了です.
ただし,場合によってはAVXやOpenMPのオプションが原因で,他の環境で動かなくなる可能性もあります
その点はまだ未検証ですが,ダメな場合はオプションを外してみるといいかもしれません.

サンプルの実行

適当にサンプルを作りました.
うまく実行できたら成功です.

#include <iostream>
#include "otfft.h"

void main()
{
    using fftmisc::complex_t;
    using fftmisc::simd_malloc;
    using fftmisc::simd_free;

    const unsigned N = 1024;

    auto start = __rdtsc();

    complex_t* x = (complex_t*)simd_malloc(N*sizeof(complex_t));
    OTFFT::FFT fft(N);
    fft.fwd0(x);
    simd_free(x);

    auto end = __rdtsc();

    std::cout << (double)(end - start) / 1000 << std::endl;
}
6
6
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
6
6