流転工房

シンギュラリティをこの目に

【News】マルチコアのアプリ開発、、難解な。 #gigofront

数年前に休刊したITアーキテクトのコピーが出てきたので読む。

Vol.23 の特集で、マルチコア時代のアプリケーション開発というもの。

CPUの発展とともに、マルチ、メニーコアの時代になっても、アプリの設計が古い(コアをひとつしか使えない等)と、そのメリットを享受できない。

ちなみに、NehalemベースのCPU(最近?の仕組み)だと、コアごとにL2キャッシュ(コアはこのキャッシュとデータとやりとり、なければキャッシュ外に探しに行く)が用意されていて、L2キャッシュの共有キャッシュとしてL3があるらしい。

また、コアごとに2つの論理ステートをもてるから、1物理コアに2仮想コアが設定できると。


アプリケーション側でどうしたらいいか、という点には、マルチプロセス、マルチスレッドの仕組みを使い、コアの能力をフル活用できるのがゴール。

まず、アプリケーションのスレッド数を柔軟に変えられるようにしておく必要がある。
例えば、明示的に4つのスレッドしか使わないように実装されたアプリケーションでは、8コア、16コアとコアの数が増えたときに、それらの能力をフルに使うことはできない。

また、既存のアプリケーションが、CPUを含むハードウェアをどれだけ効率よく利用しているのかを、一度分析してみることも必要だろう。
例えば、メモリにランダムにアクセスし、キャッシュを効果的に使っていないアプリケーションを並列化した場合、複数のスレッドがシングル・スレッドと同じようにメモリを利用してしまい、FSBのバンド幅が限界に達して、パフォーマンス上のボトルネックとなるケースがある。


ちなみに、このあと計測ツールの話が出てきたけど、マルチスレッドプログラミングのデバッガとかOpenMPインテル等によって開発されたAPI)、インテルスレッドチェッカーやインテルスレッドプロファイラー等、各スレッドの関連モニターとか難解すぎた。

とりあえずは、マルチコアのベンダーサーバは比較的お高い(保守含め)から、アプリの仕組みに合わせた調達が必要ということで。