アクセス解析
レンタル掲示板

2012年03月04日

IntelのTransactinal Memory(TSX)の関連特許のlink

IntelがHaswellでTSXと呼ぶhardware transactional memoryのsupportを明らかにしました。これに関連するとみられる特許(出願)を5件程見つけています(半年以上前に見つけたものだが、Haswellで本当に来るか疑っていた)。

残念ながらこれらの特許の内容を読んで解説することは、今の私の手には余ることなので誰かが詳しい解説をしてくれることを祈りつつlinkを飾っておきます(block図を眺めているだけでもワクワクできるし)。

[US Patent] Transactional memory in out-of-order processors
http://www.freepatentsonline.com/20070260942.pdf

[US Patent] Post-retire scheme for tracking tentative accesses during transactional execution
http://www.freepatentsonline.com/20080065864.pdf

[US Patent] LATE LOCK ACQUIRE MECHANISM FOR HARDWARE LOCK ELISION (HLE)
http://www.freepatentsonline.com/20090119459.pdf

[US Patent] Concurrent Execution of Critical Sections by Eliding Ownership of Locks
http://www.freepatentsonline.com/20110225375.pdf

[US Patent] TRANSACTIONAL MEMORY IN OUT-OF-ORDER PROCESSORS WITH XABORT HAVING IMMEDIATE ARGUMENT
http://www.freepatentsonline.com/20110153960.pdf

尚、TSXに関する今のところ詳しい解説は、公式documentの他、下記のReal World Techと国内の安藤さんの解説があります。

[RWT] Analysis of Haswell's Transactional Memory
http://www.realworldtech.com/page.cfm?ArticleID=RWT021512050738

[Ando] 1.IntelのHaswellはトランザクションメモリをサポート
http://www.geocities.jp/andosprocinfo/wadai12/20120218.htm

また、TSXのsupportをはじめに明らかにしたIntelのblog記事の翻訳が下記のlinkにあり、割りとわかりやすいです。

[iSUS] Haswell のトランザクション同期
http://www.isus.jp/article/transactional-synchronization-in-haswell/
タグ:Haswell
posted by intelfanboy.jp at 20:19| 東京 曇り| Comment(0) | TrackBack(0) | Haswell | このブログの読者になる | 更新情報をチェックする

2012年02月25日

いまさらSandy Bridge 1: RWT編

[RWT] Intel's Sandy Bridge Microarchitecture
http://www.realworldtech.com/page.cfm?ArticleID=RWT091810191937

Real World TechのIntel's Sandy Bridge Microarchitectureという記事を適当に要約しました(今回から試験的にkindle(.azw)形式も用意しました)。

IFB002_いまさらSandy_Bridge.pdf
IFB002_いまさらSandy_Bridge.azw


また、以下に、主にRWTの解説でしか書かれていない部分ついて、少し私的な補足と感想を書きました。

導入
まず、Sandy BridgeというcodenameはP6, Pentium 4, GMAの橋渡しの暗喩になっているとDK氏は言っています。この解釈は無理があるように思ったのですが、もっと最近の情報で、Silvermont世代のAtomのserver版で Avadon or Abadonというcodenameが出てきました。
[SA] Exclusive: Intel 8-core server Atom gets a name and date
http://semiaccurate.com/2011/11/01/intel-8-core-server-atom-gets-a-name-and-date/

調べてみると、
[wikipedia] アバドン(Abbadon)
http://ja.wikipedia.org/wiki/%E3%82%A2%E3%83%90%E3%83%89%E3%83%B3
>『ヨハネの黙示録』に登場する奈落の王で、ヘブライ語で「破壊の場」「滅ぼす者」「奈落の底」」を意味する

というのが見つかります。Abbadonは、Gesher(=Sandy Bridge)と同じヘブライ語seriesであり、ARMのserver進出の対抗馬としてcodenameがその暗喩になっているのではないかという想像もできます。また、Abaddonはcodenameがヘブライ語であることから、従来のようにTexas teamの開発ではなく、Israelのdesignの可能性もありそうです(とは言え基になっているSilvermontがIsraelじゃない気がするが)。

また、DK氏は、Westmereが最後のP6派生品で、Sandy BridgeからようやくP6ではなくなるとしてSandy Bridgeをヨイショしていますが、この解釈には反対です。確かにSandy Bridgeはschedulerや実行unitの割り振りが大きく見直されていたり、uop cacheがあるなど、Merom→Nehalemの時に比べれば大きな変更が加えられていますが、P6起源の拡張路線であることに変わりはないでしょう。

命令fetch
分岐予測はNehlaemと同等の資源の量で分岐先を2倍(4倍?)保持できるようになったとしています。NehalemではL1, L2に分岐先buffer(BTB)が分かれていましたが、それは単一階層に統一されたようです。分岐は近くの命令へ飛ぶものの頻度が多いので、遠くへ飛ぶものを別管理にすることでBTBのsizeを節約しているようです。

ちなみに実測を基にdocumentを書いているagner氏によると、Sandy Bridgeの分岐予測の実力は報道とは裏腹に残念なことにNehalemよりも劣っていて、おそらくuop cacheに対応するためにそうなってしまったのではないかという話です。分岐予測を一からやり直したのも本当はuop cacheに対応するためにすぎないという気がします。

また、これまで知らなかったのですが、Nehalem世代から分岐予測をmissしたときにはpipelineを完全にflashすることなく、誤って投機したpath上のuopだけを選択的に捨てることができるようになっていたそうです。事実だとすると、選択的復帰(selective branch recovery)はNetBurstの時代に論文としてIntelから出ていましたが、知らぬ間に実装されていたということになります。

---
696 名前:* :2006/07/09(日) 19:11:34 ID:euVMFGdC0
Reducing Branch Misprediction Penalty via Selective Branch Recovery
ttp://www.hpcaconf.org/hpca10/papers/27gandhia.pdf

Intel ORによるSBR(Selective Branch Recovery)の論文。
分岐予測をミスったときに既にパイプライン中に入っている命令は全て破棄するのが普通だが、
よくわからないけどこれは分岐のあとに収束した先のブロックはミスってもミスらなくても共通で実行するというのを利用して、選択的分岐復帰を行う。収束先のブロックの命令は破棄されずに再利用(reuse)され、fetchやrenameを再実行せずに済む。
---

Out-of-Order実行
OOOは、従来のP6と同じく、整数、FP、SIMDでunifiedなRSを持っていますが、ROB, RRF周りについては、ROBが物理register(PRF)とstatus arrayに分離されてPRFで値を一元管理する云々で、dataの移動が削減された、ということで、この辺は他のsiteでの解説にもある通りです。元々、P6でROBがPRFの役割も兼ねていたのを、一度、NetBurstでPRFとRATによるrenamingの方法に変更していました。その後、NetBurstがこけてPen Mの後継に当たるMeromが主力のuarchになってしまったことに付随して、また旧ROBの方式に先祖返りしていましたが、Sandy Bridgeでまた一新して結果的にNetBurstっぽくなったという経緯になっています。しかしながら、PRF basedの設計自体はBobcatやBulldozerも採用しているし、古くはPOWER1@1990やAlpha 21264@1998もあるので特に新しい技術でも何でもありません。単純にこの方式の方が電力的においしいから最近の事情に適合するというだけでしょう。

他にはSandy Bridgeではどのregisterが実際に使用されているかどうかを追跡していて、context switchの際には本当に使用されているregisterのみを選択的にsave/restoreするということができるようです。x86-64では、register状態は700Bytes強のdata量になるのでこれが軽減できるのは大きいようです。

実行unit
実行unitには、Intelの特許にもありましたが、どうもSandy Bridgeは、実行unitの上位概念として実行stack(整数、FP、SIMD)という単位の設計を持っていて、実行stack間でdataの受け渡しが必要な場合にはdataがstack間を横断するのに1〜2 cycle追加のpenaltyが生じるという構造になっているようです。目的はやはり電力削減のためで、整数、FP、SIMD間でのdataの受け渡しが生じるcaseは比較的少ないので、この設計が電力性能比的に正当化されるというわけです。

実行portはそれぞれ128bitのdata pathの設計になっているが、256bitのAVXのときは国内の後藤氏の記事にもあるように、整数SIMDとFPの2つのportのdata pathを流用するというケチケチな仕組みを採用しています。
(これらの詳細は公式の最適化manualの方が正確そうなので、あまりこの記事について深入りしても仕方なさそうです。)

Sandy Bridgeでは、128-bit load x2, 128-bit store x1の実行unitを持ち、L1Dの帯域も最大48B/cycleの設計ですが、AGUが2つ分しかないため128-bitの3つ同時accessは持続できず、主な目的は256-bitのaccessのためと書かれてています。この話はagner氏の最適化manualでも同じです。

load/storeは256-bitのmemory accessでも1 uopで実行できると書いてあります。その仕組みは、以前に当blogで持ちだしたIntelの特許ネタと同じに見えます。とすると、下位128-bitのaccessがMOB(Memory Ordering Buffer)で生成されるという末端小手先の実装が味噌です。

L3 cacheとring interconnect
Sandy Bridgeでは電力と周波数のdomainが、core-L3 cache, IGP, system agentの3領域にわかれているそうです。このうち、core-L3とIGPの2つについてはDVFS domainになっていて、system agentだけは固定電圧、周波数になります。

共有L3 cacheは、core毎に2MB単位のsliceに分割されていて、Nehalemでは35-40 cycleはだったaccess latencyが、Sandy Bridgeでは26-31 cycleへと大幅に削減されました。何故こんなに減ったのかこれまで不思議に思っていましたが、理由は、各sliceが2MBと小容量なのでaccess latencyを減らしやすいというのと、Sandy Bridgeでは先述の通りcoreとL3は同じ電力と周波数のdomainに属しているので、analog levelで異なるdomainを横断する必要性がなくなったためとあり、納得しました。

各component間を結んでいるring busは、面積を節約するため、L3のmetal層の上を引き回しされているそうです。

System Agent
Sandy BridgeのTurbo Boostは、既に各所で言われている通り、熱容量による温度上昇の遅延時間を活用して、その遅延の期間にTDPよりも実際の電力(周波数)をovershootできる制御になっています。Sandy Bridgeでは、最大で25秒間持続できるようで、何年か前にslideで出ていた最大1分という話よりも短くなっています。また、Nehalem世代のArrandaleではGPUの電力管理はdriver levelでしたが、Sandy BridgeではGPUも単一のdieに集積されたことでPCUで電力管理されるようになり、精度、latency、柔軟性が改善されています。

media engineについては、decodeが固定機能のHWだけでできるようになりました。また、encodeはL3 cacheを介して、この固定機能のdecoderとprogrammableなIGPのcoreと協調することで低電力化と高速化を計っているようです。個人的にはCPUとGPUのようにtargetとするapplicationの性質が大きく異なり、相互通信も頻繁には発生しないであろう異種core間でL3を共有するのは反対なのですが、共有L3を採用している理由は、今のところこのmedia engineとGPU間の通信のような特化した使い方が主な成果なのかもしれません。
タグ:Sandy Bridge
posted by intelfanboy.jp at 09:53| 東京 雨| Comment(2) | TrackBack(0) | Sandy Bridge: Sandy Bridge-NX, Sandy Bridge-EP | このブログの読者になる | 更新情報をチェックする

2012年02月04日

Ivy Bridgeのまとめ

[Anand] Intel's Ivy Bridge Architecture Exposed
http://www.anandtech.com/show/4830/intels-ivy-bridge-architecture-exposed


AnandTechが2011-09-17にIvy Bridgeに関する記事を書いていました。昨年のIDFの情報が基になっているので古い情報ですが、IVBについては今のところ一番詳しい記事なので、今更ながら例によって個人的に興味のある部分を要約しました。PDF形式でupします。
PDF

また、Intelの公式slideは下記のURLにあります。
[Intel] Technology Insight : Intel Next Generation Microarchitecture Codename Ivy Bridge
http://www.intel.com/idf/library/pdf/sf_2011/SF11_SPCS005_101F.pdf
タグ:Ivy Bridge
posted by intelfanboy.jp at 20:02| 東京 晴れ| Comment(0) | TrackBack(0) | Ivy Bridge | このブログの読者になる | 更新情報をチェックする

2012年01月07日

Sandy Bridgeの最適化マニュアル

RWTのSandy Bridgeの記事も怪しいので、公式documentもありますが、かのagner氏のsiteにある最適化マニュアル3の8章を訳してみました。
全文の中でSandy Bridgeについて記載のある一部分だけです。
色やlayoutをblog記事上で再現するのが面倒なため、PDF形式で公開します。掲載許可をくれたagner氏に感謝!

assembly言語が判読できないand英語が苦手な人が訳しているので、内容の精度は推して知るべしです。
assembly言語を真面目にやっている方や、英文に耐性のある方は素直にoriginalのdocumentを参照してください。

originalのdocumentは、下記のURLよりdownloadできます。
http://www.agner.org/

尚、今後、他のdocumentの翻訳をしていく計画はありません。

日本語訳
posted by intelfanboy.jp at 21:04| 東京 晴れ| Comment(1) | TrackBack(0) | Sandy Bridge: Sandy Bridge-NX, Sandy Bridge-EP | このブログの読者になる | 更新情報をチェックする

2010年09月20日

駄文: uop長とuop cache

先日、IDF2010でSandy BridgeがUop Cacheを備えていることが明らかになりました。

NetBurstではUop Cacheではなく、Trace Cacheと呼ばれる方式が採用されていました。

Trace Cacheは1995年にIntelから論文が出ていて、program上の高頻度の実行経路を動的に抽出しながらcacheするものです。分岐をまたいで命令をcache→fetchすることができ、一般にprogram中の分岐命令の出現頻度は高いので、使わずに捨てられる命令が少なくなり、高バンド幅のfetch設計でも無駄を減らすことができるというものです。また、x86の場合は、decode stageでx86命令をuopへと変換しているので、Trace Cacheの配置は、decode済みuop cacheとしての役割も兼ねることになります。
実際のところNetBurstの場合、Trace Cacheの出力帯域が3 uop/cycleしかなかったため、高バンド幅のuop fetchが目的というよりも、8 stageもあるfront-endをbypassするためのdecoded uop cacheとしての役割を狙ったものだったのではないでしょうか?

一方、Uop Cacheの方は2001年にIntelのIsrael teamから論文が出ています。命令の実行経路を格納するTrace Cacheに対して、Uop Cacheはdecode済みのuopをcacheする構造にで、この単純さからTrace CacheやXBC(拡張Block Cache, TCよりも高度)と比べて消費電力でmeritがあるようです。論文はfront-endがprocessor全体の28%の消費電力を消費していて、Uop Cacheを導入すればfront-endの消費電力を最大40%削減し得るというものです。

[paper] Micro-operation cache: a power aware frontend for variable instruction length ISA
http://www.cs.york.ac.uk/rts/docs/SIGDA-Compendium-1994-2004/papers/2001/islped01/pdffiles/p004.pdf

 といってもこの論文の内容がまんまSandy Bridgeの実装かといわれるとそうでもありません。10年近く前の論文であり、なかなか製品に実装されないのでUop Cacheはこの論文にあるような研究だけで終わるのかと思きや、再び最近になってIsraelがUop Cacheの実装例の特許を出しています。

[US Patent] EFFICIENT METHOD AND APPARATUS FOR EMPLOYING A MICRO-OP CACHE IN A PROCESSOR
http://www.freepatentsonline.com/y2009/0249036.html

個人的には、Sandy Bridgeで実装される可能性は低めなのではないかと思ってthroughしていましたが、IDFのslide資料を見る限り、この特許がほぼそのままの形で実装されていると考えられます。

NetBurstではUop Cacheというか実行Trace Cacheが12,000uopを格納できるようになっています。それに対して、次世代のSandy Bridgeの実装では1,500uopと、1/8の数のuopしか格納できません。NetBurstは最初期の実装がWillametteですので、180nmのprocess技術での投入を前提にしているuarchであるのに対し、Sandy Bridgeは32nmのprocessが前提のuarchです。両者を比較するとprocess技術に五世代もの開きがあります。Intelはこの後に及んで相当ケチなんだなと思いたくなります。しかし、Sandy Bridgeのuop cacheがNetBurstの実行Trace Cacheと比較して小さくなってしまうのには、それなりの根拠が2つ見つかります。

1つめは、NetBurstでは実行Trace CacheはL1I cacheとしての役割も兼ねていることです。NetBurstの場合、Trace CacheをmissしたらL2から命令をfetchしなければならないので、trace cacheのhit率は高くする必要があります。しかも、命令fetch〜decodeの遅延が高clock狙いの設計のため、ただでさえ長いのに1 uop/cycleの帯域しかもっていません。NetBurstは、Trace Cacheにhitする前提の割り切ったfront-end設計のuarchだったわけです。
対してSandy BridgeはIDFでもL0Iとして説明されているように、1.5k uop cacheと32kB L1I cacheの出力はMUXされていて、miss-hit時でも従来通りL1Iが働く構造になっており、帯域的にもCore 2以降のfront-endの強力さをSandy Bridgeでは踏襲していて、uop cacheに期待されているhit率は低くても性能的にはあまり影響がないと考えられるためです。

2つめは、(というかこれがこの記事の本題なのだが、)Pentium M以降のIntel x86は、uop長が非常に長いことです。NetBurstとPentium Mのuop長を推測するのに有力なsoruceとして下のIntelの論文があります。

[paper] Clustering-Based Microcode Compression
http://iccd.et.tudelft.nl/Proceedings/2006/paper_203.pdf

論文ではNetBurstのuop長が75-bitであると言及されていて、その他Pentium Mなどもmicrocode ROMのcolumn sizeから命令長が推測できてしまいます。
その他のsourceも含めて現在判明しているIntel系x86 processorのuop長は下の表のようになります。
processoruop長
Pentium Pro118-bit
NetBurst75-bit
Penium M234-bit
Dothan?236-bit
Yonah?240-bit
Bonnell60-bit

Pentium Proのuopである118-bitからPentium Mの234-bitではいきなり2倍近くになっていることについて、uop fusionが影響しているのではないかと推測しているsiteがありましたが、今はもう消えました。論文にある”Mobile”という分類の2つの謎のprocessorは、236-bit, 240-bitのuopを持っているようですが、論文が書かれた当時の背景からいくと、それぞれDothanとYonahを指していると考えています。

このようなuop長の変化から察するに、現代のx86は命令をuopに変換する方式をうまく利用して、uarchの制御上都合が良いようにuopのformatを世代ごとに最適化して定義しているのかもしれません (制御情報を低い密度で持つことによって内部で扱いやすくなる代わりに、命令長が長くなるのかも) 。
そして、Core 2(Merom)、Nehalem、Sandy Bridgeでは、EM64T/SSE4/AVXや物理register数の増加など、様々な拡張を続けているので、更に長いuop長を持っているのではないかと推測されるわけです (32bit長のRISCなんて古典です) 。

仮にSandy Bridgeのuop長を256-bit(32B)であると仮定して計算すると、1.5k uop cacheの容量は、
256-bit * 1500uops = 47kB
となりL0Iと説明されていながら、その容量はL1Iの32kBよりも大きくなります。また、uop cacheの出力帯域としても、4 uop/cycleを想定すると、
256-bit * 4 uops/cycle = 1024-bit/cycle
もの広帯域になってしまうので、帯域と容量のtrade-offを考えると、32nm世代とはいっても無闇に容量は増やせなかったのではないでしょうか? (元々Pentium Mのようにuop長が長いuarchは、uopをcacheするのには容量や帯域的に向いていないので、Sandy Bridgeでは特許の実施はないと思ったのです)

NetBurstの場合、論文によればuop長は75-bitと比較的短いので12kuop, 3 uop/cycleなら
12,000uop * 75-bit = 110kB
75-bit * 3uop/cycle = 225-bit/cycle
となり、Sandy Bridgeの仮想定と比べて大分楽そうです。

ちなみに、お馴染みのHans de Vries氏の初期のDie分析ネタで、Trace Cacheの容量を推測したものがありました。

[Chip-Architect] Looking at Intel's Prescott die
http://www.chip-architect.com/news/2003_03_06_Looking_at_Intels_Prescott.html

Northwood Trace Cache: 256 kByte / 2.4 = ~ 106 kByte +/- ?
Prescott Trace Cache: 256 kByte / 1.6 = ~ 160 kByte +/- ?

NorthwoodのTrace Cacheの容量が106kBというHans de Vries氏の推測と、先の論文を元にした計算とはほぼ一致しています(残念ながらHans de Vries氏は、この推測結果を捨ててその後の記事で誤った解釈に進んでしまいますが…)。Sandy Bridgeのuop長については不明ですが、Hans de Vries氏がDie分析してくれれば、Uop Cacheの面積からおおよそのuop長は推測できそうです。

 ちなみにIsrael teamはTrace Cache周辺の論文も多く出しています。その路線の一つの完成形がParrotであり、PC Watchで後藤氏が推測しているように、Intelがcore拡張の路線にもっと回帰すれば将来的に、FTC/MTCやParrotの実装があるのかもしれません。

OOO以降のmicroprocessorはstage間に様々なBufferやQueueを持っているので、最近のIntelの拡張はそれらを大容量化して付加機能をもたせている感じです。Sandy Bridgeで実装されたDecoded Uop Cacheは、Nehalemでの28 uopのLSD Bufferを拡張したという解釈もされています(28uopsって時点で初期P6のRSよりも大容量なのですが)。   renamedなcacheの研究もあるようなので、この調子で行くと将来的にはrename済みのuopまでもがcacheされ、bypassされたりするかもしれません。(現代はpipeline registerじゃなくてpipeline buffer/cacheが当たり前の時代なのだろうか?)
posted by intelfanboy.jp at 18:37| 東京 晴れ| Comment(2) | TrackBack(0) | Sandy Bridge: Sandy Bridge-NX, Sandy Bridge-EP | このブログの読者になる | 更新情報をチェックする

2010年05月05日

単一uopで128b/256bのLoadを実現するSandy Bridge

[US Patent] Method and apparatus for a double width load using a single width load port
http://www.freepatentsonline.com/y2009/0164763.html

内容からしてあからさまにSNBなIntelの特許出願を発見。
殆どこのまま実施されてそうです。

Sandy Bridgeでは256bのdataset幅を持つAVX命令を新たにsupportしています。
そのためかload portが2つに増えることになっていますが、各load portは128bの実装です。
128bの実装で256bのdatasetに対応するため、各load unit内で256b loadを2つに分割するという特許です。
20100505_pipeline.GIF
load unitで最初に128bのloadか256bのloadかを判定し、256bであれば128b x2に分解して、128bのmemory accessを2回分連続するcycleでdata cache unitへdispatchするという仕組みを採ってます。
既に巷で話題になっていますが、SNBでの256bのcache accessはこの実装のためにやや遅くなると見られます。下位128bの内部stackの方がdata cacheにより近い位置に配置されているそうです。

ここで味噌なのは、256b loadを上位128bと下位128bの2つのuopにdecodeして発行するのではなく、単一のuopを発行してload unitの中で分割するという方式を採っていることです。当然1つの256b loadを2つのload portに振り分けることもありません。

また、128bのdatasetであるか256bのdatasetであるかの情報bitをload uopが含んでおり、128bの場合も256bの場合も同じload uopが発行されます。
この理由は、
any increase in the number of micro-operations supported by a microprocessor results in a corresponding increase in area and complexity of the microprocessor
と書いてあるとおり、uopの数を増やすとprocessorの面積と複雑さが増すためです。

内部的には256b loadの場合、上位128b→下位128bの順に実行されます。上位128bに1 cycleのdelayが挿入されているため、
実行unitが結果を受け取るときには上位下位が結合され、同じcycleになるようです。
実効addressは上位128b分はAGUが生成しますが、下位128b分はMOBが生成します。
valid/faultの判定は後に実行される下位128bの結果だけを拾えばよいなどの理由により、RS等OOOのためのqueue/buffer類のentry消費も1 uop分で済むようです。

おまけですが、最後の方に128b→256bのSIMD効果で、多くの手動最適化アプリで+50%の速度up、自動vector化compilerを使用したアプリでは+20%の速度upと書いてあります。
20100505_blockdiagram.GIF
タグ:Sandy Bridge
posted by intelfanboy.jp at 03:07| 東京 晴れ| Comment(1) | TrackBack(0) | Sandy Bridge: Sandy Bridge-NX, Sandy Bridge-EP | このブログの読者になる | 更新情報をチェックする

2010年04月12日

Sandy Bridge: IDF前の悪あがきの小ネタ

IDF Beijing, April 13-14, 2010
http://www.intel.com/IDF/
4/13-14にIDF北京があるようですが、今更ながら直前の悪あがきということで、Sandy Bridgeネタを簡単に。


Sandy Bridgeの性能は新TBの実力とcache周辺のlatencyに大きく依存しているため、予想が難しい。
memory/cache accessがprocessorの性能向上の足かせになっている昨今、個人的には、L1Dのlatencyが3 cyclesか悪くてNehalemと同等の4 cyclesであれば、load portの増えたSNBはIPC面でそれなりに期待できると思いますが、現在のところ5 cycles以上の説が有力ですね。

0.Socket roadmap
blog_sockets100411.png
1. Turbo Boost
http://pc.watch.impress.co.jp/img/pcw/docs/318/033/html/kaigai7.jpg.html
Sandy BridgeのTBは、上のlinkのslide資料によれば、
- Responsiveness
- 37% frequency gain(4 core, up to 1 minute)
- Fully deterministic behavior
となっているので、温度が低ければ、TDPを超えてのOC動作をすることになるのだが、
Fully deterministic behavior == 完全に決定論的な振る舞い
と書かれているので、温度sensorの温度を最初見て、そのあとは電圧・clock・時間を決めうちで判断して最大1分間はOCが可能ということのようである。

Nehalemの場合は、常に温度sensorをmonitorしながらTBをしているので、新しい電圧・clockを反映するのに温度sensorでの計測〜出力、PCU(マイコン)への入力〜演算の遅延があるが、Sandy Bridgeではこれが大幅になくなるので応答性が改善する可能性がある。実際、Responsivenessとかいてある。

それに付随して、Nehalemのように冷却系に依存してTBの動作が変わるという状況は減ると見られる。しかし、一方で冷却系がSNBの想定外の能力だったりとすると温度があがりすぎたり、逆にTBの動作を限界まで引き出せない状況も発生しうるかもしれない。


2. Zeroing Idioms
http://img130.imageshack.us/i/sandybridge.jpg/
上のlink先にあるSandy Bridgeの公式block図では、Allocate/Rename/Retireのところに、Zeroing Idioms(ゼロ化慣用句)というのが
赤枠==SNBでの新機能
として書かれている。これはなにかというと、憶測であるが、XOR EAX,EAX or SUB EBX,EBXのようなzero化のidiomをpipelineの早期に認識して、re-order buffer上にある物理registerのentryをclearすることで実行の代わりにして、消してしまうのではないかと。ちょうどAllocate/Rename/RetireはP6〜Core 2系のcoreではre-order bufferに相当するstageである。
これを行えば、zeroing idiomについてはALUやschedulerを使用しないのでpipeline上のresourceの節約や、電力の節約になる。まあ、これだけだと効果は微々たるものなのでこれ以上の何かであることを期待したい。


3.その他
以下は、Israelの論文や特許などから判断して、もしかするとあるかもしれないレベルの話なので殆ど真に受けない方が身のため。
- cacheのhitやmissを事前に予測器で予測し、しかるべきpipelineの動作ができる
- load unitが2つになるため、L1D cacheの同じbankへaccessが2つのload portで被った場合にはcache accessのpipelineにstallが発生する。これをcrossbarで検出するようにして回避しようとするとcache pipeのstageが増えてL1Dのlatencyが増えるので、Sandy Bridgeではload命令がaccessするcache bankをschedulerの前に予測器で予想して、極力別bankへのload operationになるようにscheduleできる可能性がある(いや普通にcrossbarでSNBのL1D latency増えるかもしれないが…)。

/*今更ながらNehalemではL1Dのlatencyが3→4 cyclesと同process同容量でありながらPenrynよりも増えましたが、RWT説ではSMT対応のためって話だったけど、16B un-alignmentなcache accessのpenalty対策をした副作用が原因かもなあ。

個人的にはIntel IsraelはCore 2でのmemory disambiguationのようにcache/memory access周りで期待している。Sandy BridgeでもAVX対応で単にL1Dのload帯域を32B/cycleにするのではなくて、128bのload portを2つ用意してきており、schedule面での工夫で既存のprogramの高速化のやる気があるのかもと思わせてくれる。まあ、あっても今回のIDFで明らかにはならない気がするけど、投機的なload/storeのschedulingに隠しだまを期待しています。
*/
タグ:Sandy Bridge
posted by intelfanboy.jp at 20:18| 東京 曇り| Comment(1) | TrackBack(0) | Sandy Bridge: Sandy Bridge-NX, Sandy Bridge-EP | このブログの読者になる | 更新情報をチェックする

2008年08月27日

BloomfieldのTDPはBIOS上から190Wにも設定可能?? (Turbo Mode)

[TG daily]Overclocking Nehalem “almost as good as having a second graphics card” - Intel
http://www.tgdaily.com/content/view/38988/135/
At the Intel Developer Forum today in San Francisco, Intel’s Francois Piednoel and Matt Dunford outlined the various issues in benchmarking people will face when testing the new chips.

Turbo mode will dynamically alter the speeds of the four cores once the processor gets out of a thermal envelope. Dunford and Piednoel told reporters that the BIOS menus will have a menu to select thermal dissipation (TDP) numbers. If you have a really good heatsink, you could crank this number to 190 watts. Conversely, an average heatsink would warrant a rating of 140 watts or below. Once the processor detects that it’s going out of this envelope, it will start clocking itself up/down. The processor will also try to move poorly threaded applications to few cores.

先日のIDFでIntelのFrancois Piednoel氏とMatt Dunford氏からTG dailyのreporterが聞いた話だと、BloomfieldのsystemはBIOS上のmenuからTDP値を任意に設定できて、本当に良いheat sinkを使用していれば190Wにも設定可能だろうという。平均的なheat sinkでは140W以下とのこと。

/*
こりゃガセ情報かもしれないけど、Turbo Mode(多分別記事であとで説明)はTDPの範囲内で各coreの周波数を動的に制御するので、190Wに設定すればmulti-threadでも殆どの時間、+2〜+3段階のoverclock状態を維持できる、というようなことも考えられるわけでそりゃすごい。Nehalem以降は冷却系の設計や部品選びで実性能に差がでてしまうのが当たり前ということに。

ちなみに、Nehalemの定格の周波数はTurbo ModeでOCしている時と区別して、Intelでは今のところ"TDP frequency"(TDP周波数)と読んでいるようです(TDPの範囲内でOCしかしないはずなのによくわからん呼称だ)。
*/

[もっと書くかもしれない]

2008年08月23日

BloomfieldがCore i7というbrandnameに

[Intel] Getting to the Core -- Intel's new flagship client brand
http://blogs.intel.com/technology/2008/08/getting_to_the_core_intels_new.php
Believe it or not, this new naming scheme should make it easier for PC buyers to decide which technology is right for them. The “i7” identifier is the first of several new identifiers to come as different Nehalem-based products launch over the next year
〜中略
i7 is only the first identifier in the Intel Core Processor family, noting the highest performing desktop processors in the family.
〜中略


Nehalem Microarchitectureの最初の製品であるBloomfieldは結局Core i7というbrandnameになったわけだけど、Intelの公式Blogによれば、"i7"というidentifier部分は来年launchされる別のNehalem-basedな製品では異なるそうで、high-end desktopを区別するためのもの。

PC購入者がわかりやすいようための新しい命名schemeの一環ということでLynnfield/Havendaleでは異なる識別子になるようです。"i7"という記号と数字の由来には別段意味はないとのことのようです。

// というわけで、CPUIDがどうとかuArch世代がどうとか関係ないからしい。

2008年06月06日

Bonnell Microarchitecture 1

[この記事は書きかけです]

とりあえず、多分、AnandTechの解説が今のところ一番詳しいと思われる。でも、あまり新発見はなかった。解説も無難だし。

[AnandTech] Intel's Atom Architecture: The Journey Begins
http://www.anandtech.com/cpuchipsets/intel/showdoc.aspx?i=3276

とりあえず、page 6〜9まで見て、わかったこと

(1) 1 for 1はNehalemからではなくAtomからだった。
(2) Atomは初めsingle issueとして開発が開始されたが、直ぐに2 issueへとwide化された。
(3) Atomのdecoderには、slow pathとfast pathがある。slow pathは3 cycleにつき1命令しか生成できない。fast pathは1 cycleにつき2命令生成できる。命令は一度Slow pathで実行されるとtagをつけられ、次回からfast pathで扱うことができるようになるらしい。また、fast pathでは投機的なdecodeも一部supportしている。
(4) Safe Instruction Recognition (SIR, 安全な命令認識)のalgorithmによって依存関係を判別し、大きなlatencyを実行中に、続く短いlatencyの命令を先行して実行できる。これで無駄なstallを抑制している。

/*
AtomのSMTって+20%〜30%の性能向上で、実際+20% TDPがあがってるから、ほんと1 for 1だね。ただし、multi-thread限定。

Atomはin-orderだが、未来永劫このsegmentのIntel processorがin-orderだとは思わない。でも、あと5年でOOOはないだろう。…っていうAnandTech(の記者)の意見には同意です。

Atomでよく言われるLoad-op-Storeのpipelineっていうのは、命令を実行するのに、memからdataをLoadして、実行unitでOperationして、WB stageで結果をmemにstoreするという直列的な構成のことを言っているわけ。これは、RISC以前の昔、大型computerやVector型computerの時代ではよく見られたもので、Atomのblock図ではその通りL1Dへのaccessと実行unitが直列的になっている。RISC以降の近代的なpipelineでは、interlockを避けるためにLoad/Storeが実行unitに並列に配置されていて命令も専用化されるようになった。MIPSが、Microprocessor without Interlock Pipeline Stagesの略だったことを思いだそう。RISCの発想が主流になって久しいので、Atomのblock図にはものすごい違和感を感じてしまう。もちろん、P5などでも同じようになっているはずだがAtomの場合pipeline stage数が多いからこういう絵になるのだろう。
*/

//以下、page 6〜9のしょぼ要約の垂れ流し

Intel's Atom: Changing Intel from the Inside
---------------------------------------------------------
長年、Intelでは電力vs性能の経験則はこれだった: 1%のperformance増加のために2%の電力増加ならば設計者はそのfeatureをmicroprocessorへ追加することができる。残念なことに、これはPentium 4やその派生製品で使われたNetBurst architectureをもたらした。

Intel Atomは、この経験則の要求を1%の性能増加に対して、1%の電力増加に再定義して設計された最初のIntel processorである。これは革新的な変更であるし、他のIntel architecture(Nehalemなどが思いつく)でも観られるものだが、Atomが最初である。

Atomはsingle-issue, in-order microprocessorとしてstartしたが、Austin teamは直ぐにdual-issueのcoreへと設計をwide化した。しかしながら、in-orderの決定は変えられなかった。

今日のx86 processorは命令をprogram orderから外れて操作できる。(中略)。OOOE(Out of Order Execution)の能力があるProcessorは、cache上にdataが利用可能でないときに、data待ちでidle状態になる代わりに、他のreadyな命令達をmemoryからdataがfetchされている間に実行することができる。

これらout of order processorの問題は、この命令のreorderingが、追加のdie spaceと電力消費の増加を要することである。Performanceは向上するが、Intelのここでの目標はfastestではなく、fast enoughである。従ってAtomはin-order CPUのままであり、original Pentium processor以来ではIntelの初のin-order x86 coreとなっている。In-order化の決定は、複雑性と電力食いの回路の必要性を解消した。Out-of-order実行からは良好なperformanceが得られるが、それに対応したschedulingの複雑さの増加が単純に45nm Atomには大きすぎたのである。Intel CPUでout-of-order実行がPentium Proまでは相応しくなかったように、transistor sizeが十分に小さくなり、OOOの実装がAtomでも相応しくなるときがくるかもしれないことを覚えておこう。しかしながら、私は次の5年間のうちにそのOOO化の変更が見られるとは思わない。


2-Issue and In-Order: Intel's Version of the Cell's PPE
---------------------------------------------------------
Austin設計teamは、single-issueのin-order coreとして、設計をstartしたが、直ぐにsuperscalarの2-issueな設計へと拡張した。つまり、最大2命令をpipeline中で同時に発送できる。比較すると、殆どのdesktop x86 microprocessorは3または4-issueの設計になっている。

2-issue を供給するためにIntelはAtomに2つのdecoderを設けている。Decoderは命令をL1I cacheからfetchし、1/0の並びを解析して命令がCPUに何をさせるか明らかにする。これらDecoderは命令をdecodeする能力において等価である一方で、命令によって選ばれるかもないslowとfastの2つのpathを持っている。

x86 ISAは以前から、可変長命令をsupportすることに関して多くの批判をされてきた。もし10秒に2個のオレンジが渡すと言われれば、あなたの仕事は10秒に1〜3個のオレンジを渡されるよりも遙かに簡単になるだろう。前者は固定長命令の例であり、後者は可変長命令の例である。残念ながらx86は後者の分類に該当する。

Atomのslow decoding pathは、投機的なdecodeは何もできない。命令は手動で順序され、各bitは(時間をかけて)調べられるが、命令は正確にdecodeされることが保証される。また、命令は次回からはfast pathに送ることができるようにtagをつけられる。

Fast pathは、明らかに投機的なdecodeを複数採用しており、それはslow pathを通った後にsetされるtag bitに助けられている。Slow pathは、3 clockにつき1命令を生成する。一方、fast pathは、1 clockで2命令を生成できる。

IntelがBanias (Pentium M)で学んだように、不正確な投機による電力penaltyは、batteryで駆動するdeviceでは歓迎できない。Atom Processorでは、投機的な性能上の仕掛けが、低電力動作を維持するために犠牲にされる、多くのtradeoffがみられるだろう。

Instructions Gone Wild: Safe Instruction Recognition
---------------------------------------------------------
従来のin-order architectureで最も恐ろしいのは、cache上にないdataを要求する高latencyの命令である。

In-order microprocessorでは命令をin orderに実行しなければならないので、CPUがmain memoryからdataを取ってくる(100 cycles以上)まで実行unitがidleのままになる。問題なのは、このcyclesの間、何も働いていないにもかかわらず電力が浪費されることである。これは超低電力なuPが欲しいということに反している。

OOO processorでは、単純にこの問題を依存命令のschedulingによって逃れている。Schedulerは単純に実行に対してreadyかつmain memory上のdataを他の命令が待っていても仕事ができる命令を選択する。既に完全OOOE coreはAtomには電力を食い過ぎることを確認した。しかし、純粋なin-order設計をあてにすることもまた非効率になる可能性をもっている。Intel Austin teamは、賢い中間解を見つけた。

それは、Safe Instruction Recognition (SIR) algorithmと呼ばれているもので、以下のように働く。Atomが長いlatencyのFP演算を実行している時、続く短いlatencyの整数演算は、伝統的にはFP演算がcompleteするまでstallすることになる。SIR algorithmでは2つの命令を調べ、data依存があるかどうか判別する。もし依存がなければ、Atomはより新しい短いlatencyの演算を、より長いFP演算に先行して開始することができる。

SIRは、極限られた場合についてではあるが、OOOの利点の一部をAtomの完全なin order設計へちりばめる。私はもし将来のAtomで、このようなOOO風のtrickを採用する状況が拡大しても驚かないだろう。

Return of the CISC: Macro-op Execution
---------------------------------------------------------
Pentium Proは、1990年代初頭のRISC vs. CISC論争をついに終わらせた最初のIntel CPUである。ProgrammerにとってみればPentium Proは、それまでのIntel processorのようにまだx86 CISC machineである。しかし、内部的にはx86命令を受け取ったあと、単純で、速く、効率的なRISC coreで実行できるように、より小さなuopへとdecodeしている。

(中略… その後Pentium Mのuop fusionで効率の観点からCISC風のtrendが復活 …のような話 )

Atomは、Pentium Mからさらに一歩推し進めて、殆どのx86命令を分解すらしない。AtomはOOO coreではないため、大量のuopをin-flightに持つことは適切ではない。さらに殆どの命令を単一の操作に保つことによってIntelは、Atomの”width”を効率的に増加させている。

Load-op-storeやload-opの命令formatは、Atomのdecoderでは単一のuopとして扱われる。つまり、dataをloadし、演算し、結果をstoreするある命令は、今、3つのuopに分解される代わりに単一のuopとして扱われる。Pipelineを下るuopは1つだけになる。Atomは、2-issueのarchitectureに過ぎないかもしれないが、ある状況では、はるかにwiderなmachineとして振る舞うのである。

Intelは、RISCのようなより小さい操作にx86命令を分解する機能を完成させて、これらのatomicな操作に対処するcoreを非常に高い性能に構成することに過去の10年間の多くを費やした。しかし、Intelは現在、これらx86命令を多くの場合分解せず、正反対のことをしているのである。

[この記事は書きかけです]
posted by intelfanboy.jp at 23:23| 東京 晴れ| Comment(1) | TrackBack(0) | UMPC/MID: Stealey, Silverthorne, Lincroft | このブログの読者になる | 更新情報をチェックする