世界を動かす技術を、日本語で。

Athlon 64: AMDがインテルに逆転した方法

概要

  • 2003年、AMDが Athlon 64 を発売し、x86アーキテクチャを64ビットへ拡張
  • Intelは当初 x86の64ビット化 に消極的だったが、AMDの成功により方針転換
  • AMD64は 後方互換性 を重視し、多くのユーザーと企業に支持
  • IntelもAMD64互換の Intel64 を導入し、Itanium路線を事実上放棄
  • 両社は以後も 競争と革新 を繰り返し、業界を牽引

x86の64ビット化を巡るAMDとIntelの攻防

  • 2003年9月23日、AMDが Athlon 64 を発表し、x86アーキテクチャ初の64ビットCPUを市場投入
  • Intelは当時、 x86の64ビット化 を望まず、新規設計のItaniumアーキテクチャに注力
  • x86は元々 8ビット設計 から始まり、16ビット・32ビットへと拡張されてきた歴史
  • 強力な 後方互換性 を維持し、古いアプリケーションも長期間動作可能
  • 64ビットWindowsでの16ビットアプリ非対応は 設計上の決定 であり、技術的制約ではない

Intelが新アーキテクチャを志向した理由

  • Intelは 後方互換性 を捨て、より効率的で高クロック化可能な新設計を目指す意向
  • 新アーキテクチャは 特許 で保護され、競合他社の追随を長期間阻止可能
  • 2003年当時、AMDやTransmeta、Cyrixなど複数のCPUベンダーが存在
  • Intelは Itanium を2001年にリリースし、64ビット市場の主導権獲得を狙う

AMDのリスクと戦略

  • AMDは x86を64ビット化 する際の困難を認識しつつも、Itaniumが普及しないことを見抜く
  • Itaniumは特定用途でのみ成功し、 Windowsでの普及は困難
  • AMDは x86互換の64ビットCPU に賭け、32ビットアプリの高速動作と段階的な移行を重視
  • 286→386への移行のように、 ユーザーの負担を最小化 しつつ64ビット化を推進
  • MicrosoftがItanium版Windowsを開発していたことから、 64ビットx86 版にも期待

Athlon 64成功の要因

  • AMD64 は完全な32ビット互換を持ち、既存のアプリやOSも問題なく動作
  • 64ビット版Windowsの普及は緩やかだったが、 実際に利用するユーザーも存在
  • 32ビットから64ビットへの移行は 予想以上に時間がかかった が、32ビット性能の高さが評価
  • 2011年時点でも 64ビットネイティブアプリ は希少

企業市場とAthlon 64

  • Dellなどの 大手PCベンダー がAMD CPUを採用するきっかけとなった
  • サーバー分野でも 省電力性32ビット性能 の高さが評価され、データセンターで採用増加
  • Intel製CPUに比べて 消費電力が低く、発熱も少ない ことが導入の決め手
  • 実運用上の 安定性やパフォーマンス でもAMDが優勢

Intelの方針転換とその後

  • 2004年、Intelは Itanium路線を事実上断念 し、AMD64互換の Intel64 を導入
  • ライセンス契約 上、IntelによるAMD64の利用は合法
  • Itaniumは2020年に 静かに生産終了
  • 以後、 AMDとIntelは世代ごとに優劣を競い合う関係 が続く
  • Athlon 64は、AMDがIntelを再び 技術革新でリードした瞬間

著者紹介

  • David Farquhar はコンピュータセキュリティ専門家・起業家・著者
  • 1991年からプロの技術ライターとして活動、レトロPCやレトロゲームを中心に執筆
  • 1994年からIT業界で活動、 Security+とCISSP 資格保有
  • 現在も 週5回ブログ執筆、1975〜2000年のレトロコンピュータ・ゲームを主に扱う

Hackerたちの意見

自分のAthlon 64マシンのことを思い出すな。最後のWindows XPが動いてたやつだ。

自分にとっての思い出は、Athlon Thunderbirdとその後のAthlon 64 FX-60のPCビルドだね。あのマシンを立ち上げて、すごいパフォーマンスの向上を実感したのは本当に特別な体験だった。

ソルテックのソケット754に、クロームのOCZメモリと9800 ProをXTにフラッシュした構成を組んでたんだ。マザーボードが黒と紫だったのがめっちゃ好きだった。Need for Speed Undergroundをプレイしながら、Bawlsエナジーを飲みたくなるね。

面白い事実: ボブ・コルウェル(Pentium ProからPentium 4のチーフアーキテクト)が最近、Pentium 4には独自の64ビット拡張があって、AMD64より数年早く市場に出せたはずだと明かしたんだけど、経営陣がIA64の売上が減るのを心配して無効にさせたんだ。 > インテルのPentium 4には、独自のx86–64の内部バージョンがあった。でも、それを使うことはできなかった。機能はあったのに、ユーザーが使えないように「無効化」させられたんだ。これはインテルのマーケティングの決定で、彼らはおそらく正しかったと思うけど、新しい64ビット機能をx86で出すことは、自社のネイティブ64ビットのItaniumに逆らうことになると考えていて、Itaniumのチャンスを大きく損なうかもしれないと心配していた。自分は「x86で64ビットに移行する必要性についてうるさく言い続けたら、その場でクビにする」と2回も言われて、64ビットのことは取り下げるように直接命令されたんだ。

最近のことじゃないよ。Yamhillは2002年から知られてた。これに関する詳細な記事が最近出たよ。

「自分を食い潰さなければ、他の誰かがやる。」インテルは市場を完全に読み間違える歴史があるね。

聞いた話(確認はできないけど)では、MicrosoftがIntelの代替64ビットx86 ISAを却下して、AMDのバージョンを実装するように指示したらしい。

Pentium 4(Prescott)がノートパソコンでCentrinoとして売り出されたことを言いたかったんだけど、64ビット機能があったのに32ビット拡張モードとして説明されてたんだ。2005年頃にノートパソコンを買った記憶があって、最初はXPの32ビットで動かして、その後間違ったUbuntuの64ビットDapper Drakeイメージをダウンロードして、64ビットカーネルが動いてて…すごく混乱したのを覚えてる。それに、しばらくの間、IntelはPentium 4をIntel Atomとして再ブランドして、だいたいiGPUを搭載してクロックレートも少し高かった。これが今もそうなのかは分からないけど(Haswell以降の変更後)、10年後に同じような古いコアを持つCPUを買ったことに驚いたよ。ただし、いくつかの修正があって、実際にはCentrinoバリアントよりもL3キャッシュが悪化してた。core2duoとcore2quadは、当時のcorebootハッキングのピークだった。なぜなら、その頃のintelのucodeブロブはかなりシンプルで、もっと現代的なCPU世代が持つようなすべての特異性やエラッタ修正が含まれてなかったから。

でも、それが成功する保証はないよね。AMD64はx86アーキテクチャのいくつかの欠点を解消したし、レジスタが増えたのもその一つ。インテルの同等品も似たようなことをするだろうけど、あまりにも大きな変化だから当然そうするだろうし、AMD64より悪くなる保証はない。ただ、振り返ってみると「良かった」かもしれないしね。それに、当時のPentium 4は広告されたパフォーマンスを出すのに苦労してたから、AMD64 ISAが普及した大きな理由の一つは、最初にそれをサポートしたデバイスが(一般的に)32ビットモードでも優れていたからだと言えるかも。追記:シリコンまで進んだことに驚いてる。AMD64は「発表」され、仕様が公開されたのはPentium 4がリリースされる前で、最初のAMD実装が購入できるようになる3年以上前だった。インテルはそれを公にする必要がないと思ってたのかな?AMD64の拡張は、実装するのにかなりのシリコンとエンジニアリングの努力が必要だったし、Itaniumの計画はP4の設計の後半で変更されたから取り除けなかったのか?それとも、これがすべて、もっと広範囲に及ばない(だからコストも低い)設計だったことを示唆しているのかな?

当時、互換性を壊す64ビットプロセッサをインテルが出すのは本当に馬鹿げてると思ってたし、AMDがそれを守ってくれて嬉しかった。数年後にカーネルの書き方を学んで、インテルが古いものと決別しようとした理由が分かったけど、x86に積み重なった互換性のハックは本当にひどい。だけど結局、顧客はそんなこと気にしないんだよね。自分のものが動けばそれでいい。

世紀の変わり目には、x86がそんなに圧倒的に支配的じゃなかったことは注目に値するね。Alphas、PowerPC、MIPS、SPARCなんかもまだまだ現役だったから、それが理由でx86ソフトを動かすことがあまり優先されなかったのかも。PA-RISCとの互換性の方が優先されていたかもしれないね。

インテルがItaniumのためにそんなに根本的に違う、実際にテストされていないアーキテクチャを選んでいなければ、移行は成功していたかもしれないね。

Itaniumが遅れて、遅くて、インテルとHPのマーケティングがItaniumを使って様々なRISC CPUを排除したのも良くなかった。どれも非常に忠実なファンがいたからね。これには当時多くの技術者が怒ってた。俺は当時、DEC Alphaの大ファンで(FreeBSDをDEC Alphaに移植する手伝いもした)、Itaniumが大嫌いだった。64ビットのMIPSやPA-RISCのファンもいたはずで、彼らもできる限りItaniumの採用に反対してたと思う。amd64が登場した時のことを覚えてるけど、ほんとに理にかなってたよ。

AMDがインテルに逆転したのはどういうこと? どちらかというと、インテルがx86を見捨てた話のように感じる。

少なくともItaniumではIntelは新しいことに挑戦してた。対照的に、Pentium 4アーキテクチャは非常に長いパイプラインを持っていて、高いコア周波数を達成するために余計に悪かった。ブランチミス予測が非常にコストがかかることになってしまったんだ。そして、プロセスが3GHz以上にスケールしないことはすぐに明らかになり、膨大な電力を浪費することになって、長いパイプラインの目的が無駄になってしまった。

自分は64ビット版のWindows XPを使ってた変わり者のユーザーの一人だった。確かAthlon 64 X2で、これが自分が持ってた最初の64ビットチップであり、最初のデュアルコアでもあった。

XP64はWindows Server 2003と多くの共通点があったね。おそらく、今までリリースされた中で最高のWindowsだと思う。

90年代後半にGISシステム用にDEC AlphaでWindows 2000 Professionalを試したことがあるんだけど、突然5000ドルのPCが安く感じられたよね。

ちょっと指摘したいんだけど、著者はWindows 64での16ビット削除がデザインの決定であって、技術的なものじゃないと言ってるけど、それはちょっと違うよ。AMD64が64ビットモードの1つ、つまりロングモード(真の64ビット)や互換モード(32ビット互換の64ビット)にあるとき、16ビットコードを実行することはできないんだ。実現するためのトリックはあるけど、どれもCPUモードを切り替える必要があって、それは安全じゃないし、複雑な実行環境(OSとか)では問題を引き起こす可能性がある。もしMicrosoft(またはLinux、Appleなど)が64ビットOSで16ビットコードをサポートしたいなら、エミュレーターとVM(OTVDM/WineVDMみたいな)を作るか、OSに高額なハックを施す必要があったんだ。

Microsoftはそんなエミュレーターを持ってるよ。Windowsのソースコード漏洩を通じて、32ビットWindowsバージョンのNTVDM(Virtual DOS Machine)が64ビットWindows向けに構築されたんだ。[0] Microsoftがそれを廃止した理由が分からない。彼らのバックワードコンパチビリティに関する性格には合わないと思う。[0] https://github.com/leecher1337/ntvdmx64 編集: NTVDMx64がリリースされたときのいいディスカッションがあったよ: https://www.vogons.org/viewtopic.php?t=48443

64ビットコードから16ビットコードを呼び出すコードを書いたことがあるけど、Linuxで動くよ(LDTを変更するシステムコールを知ってるのはそこだけだから)。実際、64ビットコードから16ビットコードを呼び出すのは、64ビットコードから32ビットコードを呼び出すのと同じくらい簡単なんだ。ただ、ファーリターンをする必要があるけど、逆方向はスタックアライメントの問題で難しい。32ビットと16ビットの主な違いは、OSが32ビットコードをサポートするために32ビットコード用のGDTエントリを持っているのに対し、16ビットコードをやるにはLDTをサポートしなきゃいけないことだ。Windowsは64ビットに移行する際にLDTのサポートをやめたみたいだね。他の難しさ(もし詳細が合ってればだけど)は、割り込みから16ビットコードに戻るのが、32ビットや64ビットコードに比べて正確かつ原子的に行うのが非常に難しいってこと。

16ビットコードを動かすというよりは、ハードウェアに直接アクセスするDOSプログラムのような、ベアメタルで動かしたいものを動かすことが問題なんだ。21世紀に入ってもDOS仮想化ボックスを維持するのは、たぶん価値がなかったんだろうね。 > Windowsの64ビットビルドはすぐには利用できなかった。AMD-64のリリースと、それをサポートする最初のMicrosoft OSの出荷の間には1年ほどのギャップがあった。[1] Intelは、Intelが互換性のあるハードウェアを持つまでMicrosoftにAMD-64をサポートさせたくなかったという噂があった。誰か知ってる?その間、AMD-64用のLinuxは出荷されていて、Linuxはデータセンターでの市場シェアを増やしていたんだ。[1]

記事にいくつかの詳細が抜けてるね。- インテルは「EM64T」という名前でamd64の実装を静かに導入したんだ。後になって「Intel64」という名前を使うようになった。 - 初期のItaniumプロセッサには、IA-32実行レイヤー(動的バイナリ変換とマイクロコードアシスト)を実装するためのハードウェア機能、マイクロコード、ソフトウェアが含まれていて、32ビットのx86コードを実行できた。ELは直接のソフトウェアエミュレーションよりも速く動くことが多かったけど、ネイティブx86のパフォーマンスには通常及ばなかったし、特定のワークロードや初期のプロセッサステッピングでは、高度に最適化されたエミュレーターよりも悪化することもあった。

友達に勧められた小さな店に行って、インテルがまだ主流なのにAMDを買うように説得された。家に持ち帰って調べてみたら、最近のCPUの中で価格に対するパフォーマンスが一番良いことに気づいた。やっぱり信頼して良かったなって思ったよ。

Itaniumは新しい64ビットアーキテクチャだった。AMD64は32ビットのインテルアーキテクチャに追加されたもの。Itaniumは成功しなかったから、今のx86プロセッサは8080までの後方互換性を持ってる。過去のことは置いといて!これからのIntelコアとNvidiaグラフィックスを搭載したSoCのリリースが楽しみだよ。

私が楽しみにしてるのは、IntelコアとNvidiaグラフィックスを搭載した未来のSoCリリースだよ。私の知る限り、あれはまだx86で、Nvidiaのダイが追加されるだけなんだ。

実際、AArch64は多くの人に好まれてるみたい。Appleは32ビットのレガシーをすべて捨てて、64ビットだけを実装して大成功を収めてる。富士通も、かつて世界最高性能のスーパーコンピュータで同じことをしたよね。もしIntelがARMを買収して、Athlonの時代にそのアーキテクチャを推進してたら、状況はかなり違ってたかも。

AMDが64ビット開発の準備とテストのためにx86_64の「エミュレーター」をリリースしたことには触れてなかったね。オプテロンについても。著者がどう感じたかの話のように思える。編集:調べたら、AMD SimNow!って呼ばれてるんだ。2000年に最初にリリースされたのをはっきり覚えてる。www.x86-64.orgが存在してたのも。