高速化プログラミング

高速化プログラミング   

高速化プログラミング

このサイトは管理者が仕事上、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 )

■ メモリジャンプを減らす

メモリジャンプと高速化

2次元配列

○ Sample 1: 2次元配列への代入 (C, FORTRAN , JScript)
○ Sample 2: マトリックス・ベクトルの掛け算 (C, FORTRAN , JScript)

構造体の配列

○ Sample 1: 構造体のメンバーのコピー (C, FORTRAN )
○ Sample 2: 構造体のメンバーの和の計算 (C, FORTRAN )

■ 高性能のアルゴリズム

計算量のオーダー

行列とベクトルに関する計算

○ Sample 1: 行列と行列の掛け算 (C, FORTRAN )

■ その他

ダウンロード

更新履歴

リンク集



はじめに

演算数を減らす

メモリジャンプを減らす

高性能のアルゴリズム

その他



4 9 9 6 1 2