SSE命令によるC#2008自作プログラム(FFT+FIRフィルター)の性能UP(64bit Windows 環境のみ)

y_takeuchi2008-06-01

ソフトの完成はもうそろそろ、と言ったところ。ただ完成の後には検証という作業が残っているのだが。
この自作ソフトが持つ機能のうち、生波形の出力とかレベル波形の出力とFFTについては、そんなに処理に時間はかからないのだが、1/1,1/3オクターブバンド分析となると1つの波形に対して何回ものバンドパスフィルターをする事となるのでえらく時間がかかってしまう。

スレッド処理にしてCPUの数の恩恵を受けようかと思ったが、プログラムの構造が複雑になる。CPUの性能としては浮動小数点演算能力で処理の時間に違いが出るのだろうが、それならばSSEを使用できればもっと高速化できるのではと思い調べたが、かなり面倒くさくて諦めていた。しかし、ふと調べていたら、64bitコンパイラではx87 FPUは使用せず、SSEしか使わないという情報を得た。コンパイラがSSEを使うようになっているのなら簡単にその恩恵を得られる。

そこで対象CPUをx64にしてビルドして走らせてみると、劇的に処理が速くなっている。使用したPCのCPUはAthlon64x2だから、SSEが高速化されている45nm世代のCore2やPhenomだったらもっと速いのだろうか。ただ難点なのは64bit Windows限定という事だ。