高速化
基本的には処理を減らせば高速化になる。(当たり前)
余計な中間処理を省けば高速化する。
本当に必要な所だけを計算できるならば高速化できる。使わない情報は最初から処理しなければ高速化になる。
例えば、そもそも見えない所は描画しなければ高速化になる。
遅延評価をすれば、本当に必要な所だけが計算される。 並列処理ができれば高速化になる。(並列に実行できる分)
マルチCPU、マルチスレッド、マルチプロセス
CPUのSIMD命令
I/O待ちなどの間に処理をすれば高速化になる。
遅いI/Oを減らせば高速化になる。
高速←CPUキャッシュ←RAM←SSD←HDD←テープ←人間←低速
基本的にCPUキャッシュ上ですべて行うのが良い。次にRAM上。(価格と容量のトレードオフになる)
一度計算したなら、同じ事を二度計算する必要はない。(再利用、メモ化) 計算結果の記憶は、記憶領域とのトレードオフになる。
ループの中で同じ計算を繰り返す、といったことがパフォーマンス低下の原因になりやすい
近似値(の計算)でよいなら、計算が楽になる近似値(の計算)を使えば高速化になる。
数学的等価性を見つけ出して、より簡単な計算に置き換えれば高速化になる。
計算しなくても事前に計算済みの表と精度を満たす程度の補間法を使えば高速になる。
昔の三角関数の計算では表と補間が使われていた。
例えば、三角関数で角度が1度づつの精度でよいならば、90個分の表があればよい。
正解に近いところだけを選択的に計算すれば高速化になる。(枝切り)
正解を導く可能性が低い物は計算を続ける価値が小さい。
ただし全探索するとそれが正解である可能性はある。
正解との差分(より近くなる方)を求められるなら、そちらに向かえば高速化になる。
評価関数として凸関数を作ることができれば、最適化が容易になる。
注意
アルゴリズムが複雑化するが、その割に効果が出ないことがある。