Parallel Universeへようこそ―マルチコアプロセッサー向けのソフトウェア開発―

この記事を読むのに必要な時間:およそ 6 分

まとめ

並列プログラミングは新しいものではありません。長年,ハイパフォーマンスコンピューティング(HPC)の分野でよく研究され,使用されてきました。今日,マルチコアプロセッサーの普及に伴い,並列プログラミングは主流となりつつあります。今こそ,まさにインテルParallel Studioの出番と言えるでしょう。

インテルParallel Studioはソフトウェア開発者が並列化プログラミングへ挑戦する機会をもたらすツールであり,ソフトウェア開発者が並列処理の世界に足を踏み入れる際の障壁を劇的に減らします。まだ試したことのない方はぜひインテルParallel Studioの30日無償評価版をインストールして,並列化と支援ツールの可能性をお確かめください。

お問い合わせ先

エクセルソフト⁠株⁠

【COLUMN】マルチコア向け 並列プログラミングの8つのルール

マルチコアプロセッサー向けのプログラミングは新しい挑戦です。ここでは,Intel Corporationソフトウェア開発製品部門のチーフエバンジェリスト兼ディレクターJames Reinders氏が提唱する,マルチコアプログラミングで成功するための8つのルールを紹介します。

① Think Parallel(並列化を考える)

並列処理を意識しながら,すべての問題にアプローチします。並列化の場所を理解し,それを適用する考えを整理します。その他の設計や実装の決定を下す前に,最も良い並列アプローチを決定します。

② 抽象化を使用してプログラミングする

並列化を表現するコードの記述に重点を置き,スレッドやプロセッサーコアを管理するコードの記述を避けます。ライブラリー,OpenMP,インテルTBBなどは抽象化を使用している例です。rawネイティブスレッド(pthreads,Windowsスレッド,Boostスレッドなど)は使用しないようにしてください。問題に対応するプログラミングを行えるよう,コードは十分にレベルの高いものである必要があります。

③ スレッド(core:コア)ではなく,タスク(chore:仕事)をプログラミングする

スレッドやプロセッサーコアへのタスクのマッピングは,プログラムの中で明確に分離された処理にしておきます。使用する抽象化は,プログラマの代わりにスレッド/コア管理を行ってくれるものであることが望ましいでしょう。プログラムには多くのタスク,またはプロセッサーコア間で自動に処理されるタスク(OpenMPループなど)を作成してください。

④ 並列処理をオフにするオプションを付けて設計する

デバッグ作業を簡単にするには,並列処理を行わずに実行できるプログラムを作成します。デバッグの際に,最初は並列処理をオンにて実行し,その後オフにすることで,両方の実行で失敗するかどうかを調査できます。並列実行時のみ不具合が生じることがわかれば,追跡中の不具合がどのような種類のものかを特定する手がかりになります。

⑤ ロックの使用を避ける

ロックは極力使用しないでください。ロックはプログラムの実行速度を低下させ,スケーラビリティを減少させ,並列プログラム中の不具合の原因になります。問題の解決には,暗黙的な同期化を使用します。明示的な同期化が必要な場合は,アトミック操作を使用します。ロックは最終手段としてのみ使用します。

⑥ 並列化に役立つツールとライブラリーを使用する

古いツールで「頑張らない」ようにします。並列化をどのように呈示し,そして並列化とどのようにかかわるか,という観点から,ツールに対して批判的になってください。ほとんどのツールは並列化の準備ができていません。スレッドセーフなライブラリーを探してください。並列化を活用するよう設計されたものが理想的です。

⑦ スケーラブルメモリアロケータを使用する

スレッド化プログラムではmalloc( )ではなくスケーラブルメモリアロケータを使用することで,グローバルボトルネックが排除され,スレッド間でメモリを再利用してキャッシュを有効利用し,適切なパーティショニングによってキャッシュラインの共有が回避され,アプリケーションの速度が向上します。

⑧ 作業負荷に応じてスケーリングするよう設計する

年々,プロセッサーの処理能力は向上する一方で,プログラムが処理すべき作業は増加していきます。そのための準備が必要です。スケーリングを念頭において設計しておくことで,将来プロセッサーコアが増えてもより多くの作業を処理することができます。