システムデザイン
計算高速化ソリューション
高速計算の必要性
コンピュータに求められる計算能力は、日々、より複雑、より大規模なものが要求されています。しかし100件の処理が体感的に一瞬しかかからなければ、データ量が増えてもあまり時間がかからないと誤解されがちです。下の例ではあるアルゴリズムの処理件数と処理時間の関係を示したものです。処理件数が100万件では約2.7時間かかるのが、1000万件では278時間もかかってしまいます。処理件数が10倍になると、処理時間は100倍になるわけです。
このように、計算の大規模化に伴う計算量の爆発においては、単に計算機の性能に任せるだけでなく、アルゴリズム高速化、アーキテクチャ高速化、並列計算による高速化の3つのアプローチによって計算負荷の軽減と効率化を図らなければなりません。現在どれほど効率的に計算されているかにもよりますが、これらの高速化策を講じることで処理時間が10分の1になるなどの改善を図ることができます。
図:データの大規模化に対する処理時間の推移(模式図、両対数軸)
高速化に向けた3つのアプローチ
高速化には3つのアプローチがあります。1つはアルゴリズム高速化、1つはアーキテクチャ高速化、もう1つは並列計算による高速化です。
アルゴリズム高速化
大規模計算においては、計算を実施するための最適なアルゴリズムを選択する必要があります。
例えばよく知られているソートのアルゴリズムについて要素数をnとした場合、もっとも平易なアルゴリズムであるバブルソートを用いた場合、計算速度はn2に比例しますが、クイックソートなど高度なアルゴリズムを用いた場合にはその計算量を最少n.log(n)にまで軽減することができます。また、最短経路探索などでは、もし全点探索をしてしまった場合、ノード数が数十程度ならば数秒で計算が終了しますが、数百になると何ヶ月たっても終わらないといった計算量の爆発が生じてしまいますので、ダイクストラ方等、目的に適したアルゴリズムを選択することが重要となります。
アルゴリズム高速化により、お客様のデータの状況および目的に応じて最適なアルゴリズムを選択・開発し、高速化のご要望にお応えいたします。
アーキテクチャ高速化
大規模計算を処理するためには、最適なアルゴリズムを選択した上で、かつコンピュータ内部の計算処理についても最適化することが効果的です。実装言語の選択、ディスク、メモリ、キャッシュ等のデバイスへのアクセス最適化、CPU内部の処理アーキテクチャを踏まえた計算命令実施フローの選択などがこれにあたります。
アーキテクチャ高速化では、下記の三つの施策によって、より一層の高速化を図ります。
- 開発言語の選択
大規模計算の黎明期において主に利用されていた言語はFortranやCでした。しかし昨今では、より高級で使いやすい言語や計算プラットホームが多く利用されるようになり、例えばExcel+VBAでもある程度の計算ができるようになっています。しかし、計算機の性能をフルに活用するためには重いアプリケーション上のマクロ言語では限界があります。よって、データの量と求められる処理速度に応じた言語の選択を行う必要があります。
- デバイスアクセスの最適化
さらなる高速化への施策として、各種デバイスアクセスの最適化が挙げられます。メモリの動作に対するハードディスクアクセスは非常に遅く、不必要なハードディスクアクセスが発生するだけで処理速度は極端に遅くなります。同様に、大規模計算においては不必要なメモリアクセスの遅ささえも計算時間への大きなダメージとなり得ます。ネットワークアクセスも同様です。よって、不要なデバイスアクセスを減らし、CPUが効率的に計算を実施できるような施策を実施する必要があります。
- CPU処理アーキテクチャの最適化
さらなる高速化のためには、CPUの内部でどのように計算が行われているかを考慮し、最適化を図る必要があります。昨今のCPUでは、スレッドの配置やその投入、先読み処理の実装、コアの個数と配置、キャッシュメモリの配置、システムバスとの関係等、商品毎に様々な高速処理方法が実装されていますが、それを踏まえて最適な計算投入を行えば、CPUの空き時間をさらに減らすことができます。
並列計算による高速化
アルゴリズムとアーキテクチャによって高速化を実施しても、なお計算時間が足りない場合には、複数台のコンピュータが計算を分配して実施する、並列計算が考えられます。計算の種類によっては、並列計算によって投入した台数分の効果を得ることができます。しかし、中には単純な並列化では全く複数台の効果を発揮できない計算も存在します。例えば流体解析や第一原理分子計算等は系全体のパラメータを保持し、瞬間毎にそれを全コンピュータで共有しなければならないため、並列計算効率はそのネットワークアーキテクチャに大きく依存することとなります。
また、並列計算においてはその機器管理も大きな問題となります。10台程度ならば問題にならない並列計算も、数十台、数百台レベルになるとその消費電力、空調、用地、メンテナンス人件費等、様々なコストが発生し、しかもそれは機器購入費に勝るとも劣らないものとなります。
並列計算による高速化により、計算の種類や求められる速度、費用対効果、計算リソース調達の可能性等を含め、お客様の目的に適した並列計算プラットホームを構築します。
費用と期間
| 内容 | フェーズ | 費用 | 実施期間 |
| 計算高速化ソリューション (全アプローチを適用) |
コンサルティング | 100万円~ |
1か月 |
| 開発 | 200万円~ |
1か月~ | |
| アルゴリズム高速化 | コンサルティング | 50万円~ |
1か月 |
| 開発 | 100万円~ |
1か月~ | |
| アーキテクチャ高速化 | コンサルティング | 50万円~ |
1か月 |
| 開発 | 100万円~ |
1か月~ | |
| 並列計算による高速化 | コンサルティング | 50万円~ |
1か月 |
| 開発 | 100万円~ |
1か月~ | |
| 高速計算を前提としたシステム開発 | 2,000万円~ |
6か月~ | |
※費用および期間は対策を講じるプログラムの規模と状況に応じて変動します。
>> HPCホスティングサービス CalcEnergy についてはこちらをご覧ください。
