ビジネス/エンタープライズ ›  HPC リソース・センター › 
インテル® チューニング・コンテスト 2006
結果概要
 

インテルは2006年8月、インテル® アーキテクチャー上でのチューニング・テクニックを競う「インテル® チューニング・コンテスト 2006」を実施しました。応募者の中から優秀な結果を収めた上位 3 名の参加者が、2006年9月7日に開催された「インテル® HPC プラットフォーム・テクノロジー・セミナー」で表彰されました。今回受賞された方 (代表者) は以下のとおりです。

1 位: CBRC (産総研) 蓬来 祐一郎 様

2 位: 独立行政法人 科学技術振興機構/東京大学 額田 彰 様

3 位: 光成 滋生 様、東京大学大学院理学系研究科 似鳥 啓吾 様

今回のコンテスト参加者および、セミナーの参加者の皆様より受賞者のプログラムコードとチューニング手法を参考にされたいという要望を承りました。そこで、本コンテストに受賞された方々の実際のプログラムコード、それらに使われているチューニングのポイントを紹介させていただきます。

 
 
 
関連情報
 

 
コンテスト概要
 

チューニング対象プログラムコードとして、格子 QCD 計算の性能評価に使う "理研 QCD コード" を使用しました。チューニングを行うハードウェア環境は、デュアルコア インテル® Xeon® プロセッサー 5100 番台(開発コード名: Woodcrest)搭載システム 1 ノード (2 ウェイまで) で、必要に応じて参加者の方々にインテルのリモートアクセス環境を提供いたしました。利用可能なプログラミング言語は、C / C++ あるいは一般に公開されている言語に準拠するプログラムとし、計算に利用する問題サイズ・データ量が同じであり有意に同じ結果が得られること、また最適化系のコンパイル・オプションは非改造と改造後で同じものを使用することをルールといたしました。

参加者は、該当ハードウェアのポテンシャルを効果的に引き出し、チューニング前とチューニング後の実測時間の速度向上率を上げるように、プログラムコードをチューニングしました。

 
 
各受賞者のチューニング後プログラムコードのダウンロード
 

※コンパイル・オプション等の要件に関しましては、同梱の をご参照ください。

ファイル名 (ZIP 形式) ファイルサイズ 受賞者
1 位 Contest1.zip 21 KB CBRC (産総研) 蓬来 祐一郎 様
2 位 Contest2.zip 6 KB 独立行政法人 科学技術振興機構/ 東京大学 額田 彰 様
3 位 Contest3.zip 9 KB 光成 滋生 様、東京大学大学院理学系研究科 似鳥 啓吾 様
 

ファイルダウンロードの注意点:
ダウンロード可能なファイルは、チューニング箇所がふくまれるファイルのみです。実際にコンパイル・実行に十分なファイルではございません。インテル株式会社、理化学研究所、コンテスト審査員、オリジナルの QCD コード作成者、また受賞者のいずれも、ダウンロードされたファイルについてのご質問、コンパイルや実行におけるサポートは行いません。

本資料のすべての情報は、明示、非明示にかかわらず、現状のまま提供されるにすぎず、何らの保証もいたしません。また、本資料に含まれる情報の誤りや、それによって生じるいかなるトラブル (PC パーツの破損などを含むがこれらに限られない) に対しても一切の責任と補償義務を負いません。

 
 
受賞コードのチューニング・ポイント
 

今回受賞された方々のプログラムコードは、オリジナル・プログラムコードの実行時間と比較して、いずれも 10 倍前後の高速化を達成しています。ほぼ全員が行っているチューニングとしては、下記のものがあります。

  • 「プリフェッチ命令の挿入」: 配列 u, psi に対してプリフェッチ命令を挿入する。
  • 「ループ順序の変更」: u, psi, chi の配列が [t][z][y][x] という順番に格納されているため、元々 [x][y][z][t] という順番だったループの順番を配列の格納順にあわせる。
  • 「ループ・アンローリング」: 反復回数が 3 や 4 のループについてはすべてアンローリングを行う。

また、上記以外で速度向上への効果が特に期待できるチューニング方法が次の 2 つです。

  1. OpenMP* と CPU アフィニティー・マスク (sched_setaffinity() 関数) の活用によるスレッド配分率の向上
    1. OpenMP によるループ処理の並列化。
    2. デュアルコア インテル® Xeon® プロセッサー 5100 番台の L2 キャッシュを共有するという特徴を生かし、各スレッドが共有データをできるだけ多く利用できるように CPU アフィニティー・マスク (sched_setaffinity() 関数) を使って、OS が認識するコアの順番と、それに対するスレッドの割り当てを最適化する (図1)。


  2. 演算の SIMD 化
    1. intrinsic 関数 (組み込み関数) を使って SSE2 / SSE3 命令に置き換える。
    2. この前処理として、変数宣言で __declspec(align(16)) を指定して、メモリー・オペンランドを 16 バイト境界にアライメントする。
図 1. OpenMP とアフィニティーの活用によるスレッド配分率の向上 (概念図)
図 1. OpenMP とアフィニティーの活用によるスレッド配分率の向上 (概念図)
 
 
番外編 - インテル® Itanium® 2 プロセッサーによるチューニング
 

インテル® Xeon® プロセッサー・ベースの製品で行われたコンテストとは別に、弊社 ソフトウェア & ソリューションズ統括部 分散並列技術部 アプリケーション・エンジニア 小林 広和が、HPC 市場で高い評価を得ているインテル® Itanium® 2 プロセッサーを使用し、同じ理研 QCD コードのチューニングを行いました。

ご参考までに、下記にそのチューニング・ポイントを紹介します。

  • OpenMP や MPI による並列化を行い、複数のコアを効果的に利用できるようにする。
  • メモリー・アクセスのレイテンシー (遅延) を隠蔽するためにプリフェッチ命令を挿入する。これだけで 3 倍の性能向上が期待できます。インテル® Xeon® プロセッサーと違いインテル® Itanium® 2 プロセッサーではハードウェア・プリフェッチャーをもたないので、ソフトウェアにおいて適切にプリフェッチを行うことが非常に重要です。
  • なるべく連続したメモリー・アドレスをアクセスするようにループの順序を変更する。これにより、前述のプリフェッチ挿入が生かされます。
  • 演算がレジスター上で行われるように、コードを変更したり、-no-alias コンパイラ・オプションを指定したりする。
 
 
審査員および来賓各位からのコメント
 
独立行政法人 理化学研究所 姫野 龍太郎 様 独立行政法人 理化学研究所 姫野 龍太郎 様
「結果に目を通すとソース・コードに手を加えなくてもコンパイル・オプション等を変えるだけで、2 倍の性能向上が可能であることがわかります。さらに、チューニングの努力次第では 20 倍の速度向上が期待できます。単純にシステム強化だけで 20 倍の性能向上を目指すのは中々現実的ではありません。そういう意味で、チューニングには "お金に代えられない価値" があると思います。」
 
筑波大学 朴 泰祐 様 筑波大学 朴 泰祐 様
「今後マルチコアが主流になると並列化プログラミングは避けて通れません。本当に重要なのは、コンマ何秒短縮するためのぎりぎりのチューニングに取り組むことではなく、ユーザー・フレンドリー、つまり、チューニングについてそれほど詳しくない人でも、比較的簡単に数倍の高速化ができる方法があることを、多くの人に知ってもらうことです。」
 
スケーラブルシステムズ株式会社 戸室 隆彦 様 スケーラブルシステムズ株式会社 戸室 隆彦 様
「応募してきた方々の知識や技術力には感銘を受けました。今回のようなコンテストは、ユーザーがコンパイラーに求めている機能を知るという点でも、非常に意味のあるものだと思います。」
 
KEK 素粒子原子核研究所 太田 滋生 様 KEK 素粒子原子核研究所 太田 滋生 様
「今回の QCD コードは、クォークの運動エネルギーやグルーオンとの相互作用の計算に使っているものですが、チューニングで簡単に 10 倍くらいの性能向上を実現できる日本の皆さんの技術力は大変すばらしいと思います。」
 
 
謝辞
 

本コンテストの実施にあたり、理化学研究所の姫野 氏ならびに黒川 氏、筑波大学 朴 氏、スケーラブルシステムズ株式会社 戸室 氏、高エネルギー加速器研究機構 太田 氏をはじめ、多くの方にご協力をいただきました。

また、理研 QCD コードに関する連絡担当者である金沢大学 出渕 卓 氏には、今回、本コンテストでの QCD コード使用をご許可いただき、心より感謝いたします。

 
 


先頭へ戻る