高速化プログラミング
このサイトは管理者が仕事上、CAE(Computer Aided Engineering=コンピューターに支援された技術)ソフトウェアのソルバー開発をしている間に身に付けた数値計算のプログラムを高速化するためのテクニックを紹介するものです。
プログラムを高速化させるというと難しそうに思われがちですが、ちょっとしたことでプログラムを数倍高速化できたりするものです。高速化プログラミングができるようになるためには才能よりも経験が重要です。つまり高速化プログラミングのテクニックができるだけ知ることが高速化プログラミングへの一番の近道です。
ここに紹介された高速化プログラミングのテクニックを一度お読みいただければ、自然と誰でも高速なコードを書けるようになると管理者は信じています。
このサイトの構成を説明いたします。最初にプログラムの高速化の簡単な説明と管理者が使用したマシン環境をご紹介します。そして高速化するためのテクニックを2部に分けてご紹介します。前半では演算数を減らす、後半ではメモリジャンプを減らすというテーマで高速化テクニックを分類します。それぞれの部にいくつかの高速化テクニックを列挙します。さらに各テクニックにはサンプルも付いているので、ご紹介したテクニックの具体性が高められるのではないかと思います。最後に高速化前と高速化後のコードを実際に実行し、どのぐらい高速化できたかのデータも提示してあります。検証に使用したコードもダウンロードできる形にご提供していますので、試したい方はどうぞダウンロードしてください。
■ はじめに
■ 演算数を減らす
○ Sample 1: 基本
(C,
FORTRAN
)
○ Sample 2: 応用1
(C,
FORTRAN
)
○ Sample 3: 応用2
(C,
FORTRAN
)
○ Sample 4: テイラー展開
(C,
FORTRAN
)
○ Sample 1: 基本
(C,
FORTRAN
)
○ Sample 2: 割り算をまとめる
(C,
FORTRAN
)
○ Sample 3: 多重割り算
(C,
FORTRAN
)
○ Sample 4: 割り算の和
(C,
FORTRAN
)
○ Sample 1: 基本
(C,
FORTRAN
)
○ Sample 2: 球座標から直座標への変換
(C,
FORTRAN
)
○ Sample 3: 式が一つでも
(C,
FORTRAN
)
○ Sample 1: 無駄な演算
(C,
FORTRAN
)
○ Sample 2: 不要な割り算
(C,
FORTRAN
)
○ Sample 3: 因数分解の利用
(C,
FORTRAN
)
○ Sample 4: 乗数の乗数
(C,
FORTRAN
)
○ Sample 1: 共通項をループの外に
(C,
FORTRAN
)
○ Sample 2: ループの順番
(C,
FORTRAN
)
○ Sample 3: ダミー配列との併用
(C,
FORTRAN
)
■ メモリジャンプを減らす
○ Sample 2: マトリックス・ベクトルの掛け算
(C,
FORTRAN
, JScript)
○ Sample 1: 構造体のメンバーのコピー
(C,
FORTRAN
)
○ Sample 2: 構造体のメンバーの和の計算
(C,
FORTRAN
)
■ 高性能のアルゴリズム
○ Sample 1: 行列と行列の掛け算
(C,
FORTRAN
)
■ その他