神出鬼没のやる気

画像ビューアを作っている。大きい画像をウィンドウに合わせて縮小する必要があり、StretchDIBitsを使ったが速度に若干の不満があった。速さを追求するなら縮小処理を自分で書く必要がある。せっかく楽しくプログラミングしていたのに、話の腰を折られたように感じた。予定外のコードを、それでも書くことにしたが、気分は落ち込んだ。
まず、普通にC++で画像を縮小するコードを書く。まだ、速度をあまり気にせず書いていいのだが、それでも初めて書く内容なので理不尽に時間がかかる。完成すると、StretchDIBitsの数倍遅いものだった。「これならSIMD化で追いつけるな」と安心した。
以前はインラインアセンブラを使っていたが、将来の64bit化も考えるとガチのアセンブラにしないといけない。それも億劫なので組み込み関数を使うことにした。これなら64bit化もコンパイルし直すだけでいいし。
ここも相当な時間がかかった。関数名は一つも記憶していないので調べながらだし、SSEについても調べ直して「アセンブラならこう書く」というイメージを作れるようにならなきゃいけない。C++として書けるのは楽だが、アセンブラのような自由度はないので、感覚がなかなかつかめなかった。しかし、書いたコードが動くようになると楽しい。最初に動いたコードでStretchDIBitsと並んだ。そこから更に高速化を進める。
マルチスレッドにも対応させた。2スレッドにしても倍速にはならないが、確実にタイムは縮む。楽しい。10msのために1日を潰すのは、他では味わえない快感だ。
さて、縮小処理は完成した。再び画像ビューアの作業に戻る。戻りたくない。特に興味のある内容とは見えない。なので、こんなこともあろうかと溜まっていたアニメを消化した(日本語おかしいけどdesignedだよ)。