大量の計算を高速化するには

シーケンスデータの計算で、最もボトルネックになるのはハードディスクやSSDなどの記憶装置にアクセスする部分、disk I/Oの部分である。最近のコンピュータはたくさんのCPUコアを持つため、たくさんの計算を同時にこなすことができる。しかしたくさんの計算を同時にすると、巨大なファイルの入力や出力に時間がかかる。一定の量は、メモリに蓄えられるが、メモリが足りなくなると、OSは Swap 領域というストレージ装置を利用しはじめる。メモリへのアクセスに対して、ストレージ装置へのアクセスは遅いので、計算スピードも下がる。計算を投入したら、top コマンドを利用して、Swap の空き容量を確認しながら、無理のない量の計算をすることが重要である。

図. Swap の値をチェックする

Swap を使わないようにするには、物理的にメモリを大きいものにする方法が根本的な解決ではある。また、なるべくディスクに書き込む回数を減らすのも重要である。そのためには、大量のデータをファイルに出力するときはなるべく圧縮しながら出力する、という方法がある。CPUが比較的空いているのであれば、圧縮にCPUをメモリを使いながら、ストレージ装置に書き込まれる量を減らすことで、速度を稼ぐという考えである。例えば、、、 する場合は、シェルのパイプ機能を使えば、ファイルを圧縮してから、ストレージに書き込むことができるため、ストレージ装置へのアクセスを減らすことが可能である。