[PR]完全無料!おもしろ占い:暇つぶしに最適!ユニーク診断

- SSEによる単精度の数値積分の高速化(改良版) -

yosirin-hello / yosi-s@galaxy.ocn.ne.jp

注 : 本文はまだ完成したものではありません. 文章・図が変更される可能性があります. ご了承下さい.

1. はじめに

 へるみさんのアドバイスで最終的に数値積分は, C言語でコンパイラの最適化をオンにして比較しても, SSEを使った方が約15倍高速に動作するようになりました. こんなにも高速化するなんて, 思ってもいなかったので私自身も驚いています.
 それでは, どのように改良し, 高速化したのか解説していくことにしましょう.
2. 改良した点

 まず, 一番大きな改良がされた部分を説明します. Fig1. を見ると, 従来のアプローチは非常に無駄が多かったことがわかります. 私は, なぜかループ毎に合計の計算をしなければならないと思い込んでいました. しかし, へるみさんの指摘により, ループ毎に合計の計算をする必要がないことに気がつきました.



 この合計計算をループ終了後に行うことで, 積分計算の効率が大幅に向上することができました.

 この他に改良した点は以下の通りです.
   ・SSEのCVTI2SS命令とSHUFPS命令を組み合わせて, XMMレジスタにdiv_countをfloat型に変換してブロードキャストするようにしました
   ・i Generatorx Generatorを統合し, ループ中のコードをコンパクトにしました
   ・ループカウンタ(ECX)をループ毎にデクリメントする方法で使用し, CMP命令を取り除きました

 Fig2. に, 以前のフローチャートと改良したもののフローチャートの比較を示します.



研究中です. しばらくお待ちください.


Copyright © 2002 yosirin-hello All rights reserved.


[PR]当たる!無料占いで運命鑑定:プロの占い師による本格運命鑑定が無料で