Intel Developer Forum Japan (2日目)



二日目のレポートです.二日目は主に開発環境を聴講してきました.

1. 「Itanium 2 プロセッサ用アプリケーションプログラムの最適
   化」 池井満

プログラムの最適化にはメモリの最適化が重要である.メモリ最適
化を行うためには,メモリ・システムの構造を理解し,かつ測定を
通した定量的なチューニングが必要となる.

セッションでは,まず Itanium 2 のメモリアーキテクチャ及び性
能測定のためのパイプライン周りのカウンタの説明を行い,行列積
のプログラムを通して手動チューニング及びコンパイラ最適化によ
る効果のデモンストレーションを行った.最適化は,「手動プリ
フェッチ挿入」「自動プリフェッチ挿入」「ループ・アンローリン
グ」「バンク・コンフリクト回避」「データの再構成(転置)」
「TLB最適化」を順に適用し,元の性能(理論性能の 0.03)から各々
の最適化で0.07,0.16,0.35,0.54,0.75,0.91,0.95の性能を達
成した.

バンク・コンフリクトの回避とは,Itanium 2 の L2 キャッシュの
構造に起因する性能低下を回避する方法である.Itanium 2 の L2
キャッシュは,16バイト幅の16個のバンクにより構成されている.
二つのメモリアクセスが同一バンクに対して行われた場合,どちら
かのメモリアクセスは待たされることになる.これは,たとえば隣
接した配列要素に対するアクセスを行うか,256バイト離れた要素
にアクセスするような場合に行う.ループ内で連続した配列要素に
アクセスするような状況では,適当にメモリアクセルの順番を入れ
替えることにより,バンク・コンフリクトが回避できる.

TLB最適化は,この場合は単にページサイズを大きくしてTLBミスを
減らしてしまうということである.

2. 「インテル Centrino モバイル・テクノロジ最適化方法と
     2004 年ノートブックPCのビジョンについて」 小林永欣

Centrino とは,インテルのモバイル向け製品であり,Pentium M
プロセッサ,855チップセット及び インテル PRO/Wireless2100 の
3つのコンポーネントからなる.このセッションでは,これらのコ
ンポーネントと将来のノートPCのビジョンを提示した.

Pentium M のパイプライン構成など細かい部分は謎であるが,新し
い機構として「マイクロOpsフュージョン」「アドバンスト分岐予
測」「専用スタックマネージャ」がある.また,オンチップの1MB
L2 キャッシュを搭載している.マイクロアーキテクチャの拡張に
関する説明は以下のMYCOM等,各種ニュースサイトが詳しい.
    http://pcweb.mycom.co.jp/special/2003/centrino/
        (若干疑問に思う個所もあるが,全体的に分かりやすく書
	いてある)
セッションでは,Pentium 4 等のプロセッサと比較して Pentium M
用の最適化で気をつけなければならない点を,ループアンローリン
グの展開数,キャッシュ最適化,SIMD 命令(SSE/SSE2)のデータレ
イアウト等に関する説明があった.これらの情報はインテルが提供
している各種マニュアルにも掲載されているとのこと.
    http://developer.intel.com/design/mobile/manuals/

その後,モバイル・コンピューティングにおける快適な接続性の確
保,バッテリー駆動時間の延長,セキュリティの確保等の話題があっ
たが,それらの中でも Location Aware Computing は興味深い内容
であった.これについては3日目の「将来のモバイルアプリケーショ
ン」で詳しく書く予定である.

3. 基調講演

以下のページに詳しい.
# さすがに,聴講したときとったメモを今読み返すのは厳しい.
# おもしろいデモはいろいろやっていたが,Pentium 4 デスクトッ
# プ--Centirnoモバイル--XScale PDA間で情報をやり取りするデモ
# は特に印象深かった.
    http://pcweb.mycom.co.jp/news/2003/04/14/06.html
    http://pcweb.mycom.co.jp/news/2003/04/14/07.html

4. 「ハイパー・スレッディング・テクノロジにおけるソフトウェ
   ア最適化」 岩本成文
ハイパー・スレッディングを利用したアプリケーションの最適化に
関するセッション.はじめに,アムダールの法則などの並列処理に
関する基本的なおさらいをして,次に画像処理を行う簡単なマルチ
スレッド・アプリケーションを例にハイパースレッディング (以下
HT) のチューニングのデモンストレーションを行った.

デモは二つあり,最初のデモでは,インテルのコンパイラに適切な
最適化オプションをつけることで,どこまで性能が上がるかという
ものであった.Visual C++ では FPS値 (frames per second) が
23.5 (HT-off),26.5 (HT-on) であったものが,インテルコンパイ
ラでプロファイル結果を使った最適化を使うことで 29 (HT-off),
35.5 (HT-on), また SSE2 によるベクトル化により 37 (HT-off),
43 (HT-of) まで性能が向上した.

二つ目のデモは,Pentium 4 の 64K aliasing に関するものである.
Pentium 4 の L1 データキャッシュではレイテンシ削減のため,タ
グチェックをまず仮想アドレスの下位16ビットで行う.そのため,
64KBの距離にあるアドレスは同一ラインを使用してしまう.
Windows はスレッドのを作成する際,1MB境界に配置するためこの
問題が顕在化する.これを回避するために,スタックに 2KB のパ
ディングを行った.この結果,FPS値は 47.5 (HT-on)まで向上し
た…….

Pentium 4 の L1 データキャッシュは 8KB/4way セットアソシアティ
ブ/ラインサイズは64バイトである.聴講時にはうまくごまかされ
てしまった 64K aliasing の問題が,やっぱり良くわからなかった
ので調べてみた.インテルの資料には細かいところまでは書いてい
なかったが,以下のページを読むと,アドレスの12--15ビットは
way prediction に使われているようであり,つまり完全な 4way
セットアソシアティブではなく 64KB 周期で同一ラインを共有して
しまうものであるらしい.このページの情報がどこからきたものだ
か良くわからないが,チップの写真から演算器単位でフロアプラン
を割り出してしまうような人たちのページなので,それなりに信用
できるであろう.
http://www.chip-architect.com/news/2003_03_26_Prescott_clues_for_Yamhill.html
http://www.chip-architect.com/news/2003_03_06_Looking_at_Intels_Prescott.html

5. 「インテル コンパイラ V7.0 を使用した並列化プログラム開発
   手法」 清水良直

インテル コンパイラの紹介.特に,OpenMP サポートを強調してい
た.インテルの OpenMP サポートあるいは拡張として,Irregular
な並列性やパイプライン並列処理をサポートする workqueuing モ
デルや,ネスト並列のサポートが挙げられた.また,コンパイラに
は Pentium III,Pentium 4 などの世代依存の最適化が用意されて
いるが,いくつかの世代の最適化されたコードを全て実行オブジェ
クト中に埋め込んで,実行時にどの最適化コードを実行するか決定
する auto dispatch 機能の紹介もあった.

セッションの内容は,Intel Technology Journal や IPDPS の論文
とほぼ同一のようである.
http://www.intel.com/technology/itj/2002/volume06issue01/art04_fortrancompiler/p01_abstract.htm

X. Jian, Y. K. Chen, M. Girkar, S. Ge, R. Lienhart, S. Shah,
"Exploring the Use of Hyper-Threading Technology for
Multimedia Applications with Intel OpenMP Compiler",
Proc. of IPDPS'2003, April 22-26, 2003


6. 「Linux 向け VTune パフォーマンス・アナライザの新機能」
    久保寺陽子
インテルのパフォーマンスチューニングツール.コールグラフやパ
フォーマンスカウンタ等の実行プロファイルの集計及び表示を行う
ことができる.ただし,Linux 用ツールの GUI は未完成(今年末か
来年頭に出荷予定とのこと)なので,データを Windows に送信して
そちらのツールで可視化することができるということで,そのデモ
ンストレーションを行った.

集計データの転送は,Linux 側がサーバ,Windows 側がクライアン
トとなるような環境で行う.サーバはサーバプログラムとカーネル
モジュールのインストールが必要.あとで聞いたところ,カーネル
モジュールのソースコード,及びLinux--Windows間のプロトコルは
公開されているようなので,他の用途でも使えそうである.

-- 
                                       keiji Kimura
                                       kimura@oscar.elec.waseda.ac.jp