3DNow!
読み:スリーディーナウ
外語:3DNow!

 AMDが開発し1998(平成10)年に登場したAMD独自のSIMD命令セットで、MMX上位互換機能の名。
目次

概要

目的
 MMXは整数演算のみに対応しており、浮動小数点演算には未対応だった。3DNow!は、MMXの弱点を克服するためにMMX命令に21個の新命令を追加したもので、特に浮動小数点演算処理に重点の置かれた拡張がなされている。
 具体的には、64ビットのMMXレジスターに32ビット単精度浮動小数点数2個を格納し、この2個の数値に対して同時に演算を行なえるようにした。更に、3DNow!は2個のMMXユニットが完全に並列動作でき、実質で最大4個の新たな浮動小数点演算命令の実行が可能となる。
 元々のMMXが同時に演算できるのは整数のみであり、浮動小数点演算を行なうには数値演算コプロセッサー(FPU)に切り替える必要があった。しかも切り替えるのには多くの時間がかかるという弱点もあった。3DNow!はその弱点を改善したものと言える。

共通仕様
 発表当時は、AMD・CyrixIDTの三社が別々の仕様を発表していた。
 しかしこれらはOSの対応が必要な機能であるため、Microsoftを納得させねば実質的に使うことができないが、メーカーごとバラバラではMicrosoftが首を縦に振ることはない。
 そこでAMDは「3DNow!」に規格統一するよう働きかけ、AMD K6-2シリーズの他に、Cyrixは6x86MX、IDTはWinChip 2シリーズから採用を開始した。

機能の有無判別
 機能の有無は、拡張CPUID対応のプロセッサーで、かつEAX=80000001HでCPUID命令を実行した結果EDXレジスターのビット31が1かどうかで確認できる。

特徴

性能
 浮動小数点演算性能では、ピーク時で
 である。参考までに、IntelのMMX製品では、
 なので、同クロック比で優に4倍の3D処理性能を実現させた。
 この拡張により3Dグラフィックス処理の高速化が期待され、MPEG-2動画再生やDVDなどで使われているDolby Digital(AC-3)のデコードも可能になる。

対応環境
 しかし、当然ながらソフトウェアが対応しなければ全く意味がないので、Microsoft MASMや、専用に対応したDirectX/OpenGL APIの提供、更にこの機能のライセンス提供等で積極的に普及に努めた。
 対抗規格であるIntelストリーミングSIMD拡張命令(SSE)とは違い、3DNow!はソフトウェアメーカー等が協力して策定したオープンな規格となっている。Microsoft Windowsでは、DirectX 6.0やOpenGL 1.2より対応されている。

拡張規格

その後
 Bulldozer/Bobcat世代のCPUコアから、3DNow!シリーズのサポートを終了した。
 AMD64アーキテクチャーからSSE/SSE2を標準搭載しており、3DNow!の機能はSSEの機能で代替可能である。その上、現実に3DNow!は殆ど使われていなかった。このため、一つの時代にピリオドが打たれることになった。
 当時のIntelのSIMDコマンドは整数演算のMMXのみで、浮動小数点演算の性能を改善する3DNow!は先進的な試みではあった。CyrixやIDTといった他社にも導入されるなどし、「午後のこ〜だ」などのソフトウェアが対応するなどしたが、やはり独自実装のコマンドは使いにくいものだったようで、普及することは無かった。
 段階的な収束として、SSE登場後にAMDは「3DNow! Professional」としてSSE命令との互換性を取り始め、AMD64アーキテクチャーにSSE2までを統合し、そして3DNow!を廃止することになった。
 3DNow!がなくてもSSEがあれば現実問題として開発者は困らない。但し、3DNow!の機能はprefetchとprefetchw命令として残るため、3DNow!が跡形もなく消えるという訳でも無いようである。
 ちなみに、prefetchとprefetchwのオペコードである0F 0D xxは、Intelの仕様書では「NOP Ev」となっており、NOP命令として定義されている。

再検索