スキップしてメイン コンテンツに移動

後藤弘茂のWeekly海外ニュース:注目の記事

2010/09/17 なぜSandy Bridgeはそんなにパフォーマンスが高いのか



Intelの次世代CPUアーキテクチャSandy Bridgeの情報が公開された.アーキテクチャの概要は次のようになる.市場への投入は2011年を予定.コア数は,2,4,8の3モデルを用意する.コアとキャッシュをリングバスで接続し,コア数のスケーラビリティを確保している.2,4コアでは,GPUをオンダイでサポート.メモリコントローラはDDR3.



Sandy Bridgeでは,Core MAをベースに,次の改良を加えている.



#フロントエンドクラスタでのuOPキャッシュの追加#実行エンジンクラスタでのAVXユニットの実装と再編成#物理レジスタファイルへの移行とスケジューリングのリソースの強化#メモリクラスタでのロード/ストア機能の強化



第1に,命令デコード回数を減らすため,命令のデコード結果を保持するキャッシュを追加する.電力と時間を食う命令デコードステージの使用回数を減らすことで,電力を削減しつつ,性能を高めるのが狙い.



多くのx86命令は,CPUの内部命令であるuOPにデコードされる.直近のデコード済みuOPを,Sandy Bridgeでは1,500個キャッシュする.Intelによれば,ヒット率は80%以上を達成するとしている.これにより,(1)デコーダの稼働率を20%に落とすことで電力消費を抑える,(2)デコード処理を80%スキップすることで演算速度を向上する,といった改善に繋がる.加えて,キャッシュには過去に実行された命令列が保存されるため,命令のトレースが可能となる.このため,分岐命令に起因するストールの解消などにも利用できる.



第2に,SIMD演算を強化するため,AVX (Advanced Vector eXtensions) を追加する.従来のSSEとは別に新ユニットとして設け,命令セットも合わせて拡張する.AVXでは256bit幅で並列実行する.これはSSEの128bit幅の2倍であり,演算性能が2倍になることを意味する.AVXの高い演算性能を引き出すため,以降で説明する3点目および4点目の改良を加えている.



第3に,命令スケジューリング機能を強化し,演算器の高い稼働率を実現する.加えて,レジスタファイルを物理レジスタファイルにリネームすることで,電力を削減しつつ性能を引き上げる.



第4に,メモリアクセス性能を向上し,プロセッサのストールを防ぐ.具体的には,ロード16byte×2およびストア16byteを同時に実行する.このため,ロード/ストアのパイプラインを統合し,キャッシュのポートを改良.



後藤氏によれば,これらの改良の中で最も重要な拡張は1点目,すなわちフロントエンドクラスタでのuOPキャッシュの追加である.x86命令の欠点は,命令セットが複雑であるため,デコーダをはじめとするフロントエンドが複雑になることだ.従って,この部分は回路規模が大きく,電力消費の根源であり,遅延も大きい.このため,Core MA,Nehalem,Sandy Bridgeと,Intelはフロントエンドの改良に力を注いでおり,今後も継続すると予想されている.


2010/10/01 アーキテクチャ改良で40倍の性能向上を目指すNVIDIAの「Maxwell」



NvidiaのGPUは,Tesla,Fermi,Kepler,Maxwellへと進む.GTC (GPU Technology Conference) でのNvidiaのキーノートスピーチによれば,2013年に投入予定Maxwellでは,第二世代Teslaに対して40倍の性能向上を目指すという.



倍精度浮動小数点(FP)演算のサステイン(持続:Sustain)性能/ワット.これはGPUの性能指標で,同スピーチにてNvidiaが使用したものである.この指標から,Nvidiaの戦略は次のようになると考える.#倍精度演算性能の向上#性能/電力比の向上#持続性能の向上



まず,倍精度演算性能が重視される理由は,GPUの使用用途が変化しているためである.すなわちGPUが必要とされる分野は,従来のグラフィクスだけでなく,ハイパフォーマンスコンピューティングへとシフトしている.グラフィクス処理では単精度が多用されるが,GPUコンピューティングでは主に倍精度が要求される.ここで,倍精度では単精度の倍のデータ量を必要とするため,メモリバンド幅の改良が必要となる.これについては,アプリケーションの要求する「メモリバンド幅/演算性能」を,継続して精査する必要があるとしている.



次に,性能/電力比を重視する理由は,電力の壁の存在もあるが,Nvidiaが主張するところが,徹底した省電力の追求であるためだ.このため,(1)パワーゲーティング,(2)パイプランの浅化・クロック周波数の維持,(3)並列性の向上,といった手段を採用している.



最後に,持続性能を重視する理由は,アーキテクチャの利用効率を上げるためだ.GTCのスピーチによれば,次のように述べている.「持続性能とピーク性能という用語については,前者は実行時の性能,後者はアーキテクチャの理論上の性能,としている.Fermiアーキテクチャの倍精度演算性能においては,ピーク性能で768 GFLOPS,持続性能で500 GFLOPS,である.」持続性能がピーク性能に大きく及ばない理由は,(1)メモリアクセスと演算を同時実行できないため,(2)メモリバンド幅が狭いため,である.これらは,演算器がフルに稼動しないことを意味する.このため,アーキテクチャの利用効率を向上させることで,性能向上の余地がある.


2011/03/16 デュアルCPUコア&デュアルGPUコアになったiPad 2



米国でのiPad2の発売を受け,次の内容について述べられている.



  • iPadと比べたCPUアーキテクチャの改良

  • iPadと比べたGPUアーキテクチャの改良

  • Appleの今後の戦略

  • Sony NGPとの比較



CPUアーキテクチャは,シングルコアからデュアルコアに改良される.命令のデコードは2並列で変化は無いが,インオーダ実行からアウトオブオーダ実行へと変更.パフォーマンスの向上は2倍以上と説明している.製造はSamsung Semiconductorの45nmプロセスへの委託を継続.



GPUについても,シングルコアからデュアルコアへと改良される.コア当たりに16個のスカラプロセッサを格納する.つまり,計32個のスカラプロセッサを集積することとなる.こちらも,2倍以上の性能向上を達成している.



これらの結果,iPad2では電力的にはiPad以上にシビアになる.このことから,iPad2では,消費電力以上に処理性能を重視していることがわかる.これには,iPad/iPhoneにゲームを定着させる狙いがある.得に高い処理能力が要求される3Dゲームを軽快に動かすためとされる.



iPadとiPhoneそれぞれのCPUアーキテクチャは,いずれ分化すると予測される.iPadでは比較的電力に余裕があるため性能を追求できるが,iPhoneではそうはいかないからだ.



類似商品と比較するため,SonyのNGP (Next Generation Portable) との差異について触れている.NGPではCPUコア数およびGPUコア数ともに4コアを搭載しており,iPad2と比べともに2倍である.45nmプロセスで製造を開始し,最終的なターゲットは32~28nmプロセスになる.一方のiPad2では,当初は45nmプロセスで製造し,32~28nmプロセス移行後はコア数を倍増すると見込まれる.

このブログの人気の投稿

TeXマクロプログラミング

2012.03.30 更新 スライド化しました.   新しいマクロ定義 以下に例を示す. \dev\hoge{ほげ}    これにより,\hogeが「ほげ」に変換される.引数を使うには,以下のように記述する. \dev\hour#1{今は#1時です}   別の方法 上に示した処理は,以下のようにも記述できる. \newcommand{\hoge}{ほげ} \newcommand{\hour}[1]{今は#1時です}   defとnewcommand違い defとnewcommandが異なる箇所として,以下が上げられる. 定義命令を定義している処理系 マクロを多重定義した場合の動作 引数のとり方  まず,定義されている処理系が異なる.defはtexで定義されており,newcommandは,latexで定義されている.  次に,多重定義した際の動作が異なる.defでは,新しい定義で上書きする.一方,newcommandではエラーを出力する.  最後に,defでは,引数のとり方としてパターンマッチングを利用できる.例えば,以下のマクロ定義があるとする. \def\Hatchr(#1,#2)(#3,#4)#5 これにより,以下に示すインターフェイスを実現する. \Hatchr(3,4)(7,8){hoge}   マクロの複製 以下の処理では,\hogeの内容を\fugaに複製する. \let\fuga\hoge   マクロの初期化 以下のコードで,\hogeを初期化する. \let\fuga\relax  ここで,\relaxは初期化のために利用する空の定義である.   マクロに文字を追加し再定義 defによる定義は,マクロの多重展開をおこなわない.例えば,以下のコードを考える. \def\hoge{ほげ} \def\hoge{\hogeふぇふぇ}  この後,\hogeを利用すると「\hogeふぇふぇ」と展開される.つまり,一度だけしかマクロは展開されない.  マクロを展開してから定義する際には,以下の記述を用いる. \edef\hoge{\hogeふぇふぇ}  これに

beamerでしおりを付ける

しおり   しおりとは,acroreadなどでpdfを表示する際に,ウィンドウの左側に表示される目次のようなものである.このしおりを使うことで,文章の構成を大まかに把握したり,特定の項目に移動することが簡単にできる.   beamerには,標準でしおりを付ける機能が備わっている.以降では,しおりを付ける方法について述べる. しおりをつける   beamerでしおりを付けるには,次のコマンドをtexの文章中に記述する. section{} subsection{} subsubsection{}   カッコの中に記述する文字列が,しおりの項目名に使用される.また,section,subsection,subsubsectionを使い分けることで,階層化をすることも可能. 文字化け対策   しおりは,標準の仕様ではUnicodeのみがサポートされている.EUCを使う場合は,そのままではしおりの日本語が文字化けする.このため,Unicodeを用いない際には,何らかの対策が必要である.   以下では,EUCを利用する人のための対処策を述べる.ここで,dviからpdfを生成する際の方法によって,対処の仕方が異なることに注意する.具体的には,(1)dvipdfmxを用いる場合と,(2)dvipsおよびps2pdfを用いる場合で,対処の仕方が異なる.以降,それぞれについて述べる. dvipdfmxを用いる場合   次のコードをプリアンブルに記述しておくことで解決できる.これにより,しおりの部分の文字列が,自動でUnicodeに変換される. \ifnum 42146=\euc"A4A2 \AtBeginDvi{\special{pdf:tounicode EUC-UCS2}}\else \AtBeginDvi{\special{pdf:tounicode 90ms-RKSJ-UCS2}}\fi   ただし,実行にはEUC-UCS2というファイルが必要.texをインストールする際に,標準でシステムに入る場合はこのままコンパイルできるが,無ければコンパイルできない.私がこれまで経験したなかでは,Vine 5.0, Mac OSXには含まれているが,Debian lennyには入っていなかった.   システムにEUC-UCS2が無い場合,以下のようなサイトから取ってくる.取って

ssh-agentの管理を自動化する

ssh-start.sh ssh-agentの管理を自動化するスクリプトssh-start.shを紹介する. 詳細 ssh-agentを使うことで,sshでリモートログインする際に,パスワードの入力を省略できる. ssh-agentを利用するためには,ソケットのパスとプロセスIDを環境変数に登録する必要がある.環境変数に登録すべき情報は,ssh-agentの起動時に,以下のように標準出力に出力される. $ ssh-agent SSH_AUTH_SOCK=/tmp/ssh-XTqIvn4918/agent.4918; export SSH_AUTH_SOCK; SSH_AGENT_PID=4919; export SSH_AGENT_PID; echo Agent pid 4919; 上記のように,ssh-agentの出力はシェルコマンドとなっており,実行すれば環境変数がセットされる.このため,多くの解説記事では,次のようにevalを用いる方法が述べられている. $ eval `ssh-agent` Agent pid 4919 しかし,この方法は,同じssh-agentのプロセスを複数のシェルから利用することはできない.上記コマンドを他のシェル上でも実行すれば,動作はするが,次の点で優れた手法とは言えない. ssh-agentのプロセスを複数起動する (本来は1個で充分). 起動毎に秘密鍵の登録,およびパスフレーズの入力が必要となる. 上記の問題は解決するには,1個のssh-agentを複数のシェルから再利用すればよい.例えば2個のターミナルから1個のssh-agentプロセスを利用するには,次のようにする. # terminal 1 $ ssh-agent > ~/tmp.sh $ source ~/tmp.sh Agent pid 4919 # terminal 2 $ source ~/tmp.sh Agent pid 4919 こうすることで,2個のターミナルから同一プロセスのssh-agentを利用できる. 以上の処理を自動化したものが,ここで紹介するスクリプトである. 使い方 環境変数を扱かうため,通常のスクリプトのようには利用できない.このため,sourceコマンドや.(ドット)コマンドで実行する. $ source /path/to/dir/s