none
Windows8.1 64Bit のシステム要件にある PrefetchW に付いて

    質問

  • Windows 8.1 64Bit/Windows 2012R2 のシステム要件では、CPUが下記の拡張命令に対応している事を必須にしていると思います。

     CMPXCHG16b、PrefetchW、LAHF/SAHF

    この3要件のうち PrefetchW は AMDの3DNow!系命令セットの様で、IntelのCPUですと2013年のAtom(Silvermont)/Avotonや2014年の Haswellが “最初に実装されたCPU” の様で、それ以前にIntelから発売されたCPUはCPUIDで対応フラグを立てている場合であっても NOP(つまり何も行わない)命令に置き換えているだけで実際には機能していない様です。

    AMD製であればSocket F以降のOpteronは3要件を全て実装している様です。

    Intel製のCPUは2015年1月現在、一部の最新CPU以外は全てNOP又は未実装の様です。

    PrefetchW を NOP実装している(機能しない)XEONでもWindows 8.1/Windows 2012R2は正常に動作しますか?

    また、3Dnow!系のIntel CPUとは互換性が低く実際には何もしていない PrefetchW をシステム要件にした理由は何でしょうか?

    2015年1月20日 23:00

すべての返信

  • チャブーンです。

    この質問の本意ですが、「仕様確認」なのでしょうか?であればですが、ご要望の答えは有償サービスでないと得られない内容ですので、ここで答えを得るのはムリだと思います。ちなみに、実装の採用理由については一般的に非公開の内容(仮にMSサポートに聞いてもわからない)だという認識です。

    一般ユーザーが対応可能な方法があるとすれば、したのページで「動作保証されたコンピュータ(サーバ)」一覧をチェックし、そのサーバに搭載されたCPU仕様を確認することで「動作に問題がないことを推測する」レベルだと思います。

    http://www.windowsservercatalog.com/results.aspx?&chtext=&cstext=&csttext=&chbtext=&bCatID=1333&cpID=0&avc=10&ava=80&avq=0&OR=1&PGS=25&ready=0

    2015年1月22日 6:26
  • 「仕様確認」とはなんでしょうか?

    システム要件に付いて質問しています。内部仕様や内部構造について質問する意図はありません。

    最後の1行に付いては回答頂かなくても大丈夫ですが「PrefetchWがNOP実装のXEONでもシステム要件に適合していますか?」と質問し直した方がよいでしょうか?

    サーバも知りたいですが、どちらかと言えばワークステーションとしてWindows8.1 64Bitを使う場合に付いて主に知りたいです。

    別スレッドを立てて質問のニュアンスを変更して再度質問する必要がありますか?

    2015年1月22日 9:14
  • チャプーンさんがおっしゃられているのは下記の内容かと思います。システム要件についての確認だと思われますが、この内容に正確に答えるには MS のサポートへ投げるのが適切だと私も思います。また、PrefetchW をシステム要件の理由とした背景も、MS に問い合わせするのが正しいかと思います。(我々で答えられものではないかと)

    PrefetchW を NOP実装している(機能しない)XEONでもWindows 8.1/Windows 2012R2は正常に動作しますか?

    また、3Dnow!系のIntel CPUとは互換性が低く実際には何もしていない PrefetchW をシステム要件にした理由は何でしょうか?

    補足です。ご存知かもしれませんが、こちらの条件は Windows 8.1 であれば 64bit バージョンのみの要件となります。

    • 編集済み HotakaMVP 2015年1月22日 10:08
    2015年1月22日 9:53
  • 判りました、MSのサポートへ購入前/導入前の質問として電話で問い合わせてみます。

    PrefetchWがシステム要件である事は周知の事実ですが、IntelのCPUはPrefetchWを本来の仕様通りには実装してない訳ですから、システム要件に明記された命令が本来の仕様通りに動作していないNOPに置き換えられているCPUでもWindows8.1 64Bitは導入してよいのか?正常に動作するのか?皆さん疑問に思わないのかな?

    2015年1月22日 10:13
  • ご購入のご相談というフリーダイヤルのWindows8.1購入相談窓口へ電話してみました。

    結果、32Bit版のWindows8.1でしたら大丈夫ですという回答を頂きました。

    仮にWindows8.1 64Bit版のインストールに成功したとしても、利用中に異常動作やBSODなどが起きるかも知れず・・・

    Adobe Premiere Pro CS5.5 のシステム要件は64BitのOSが必須ですから Windows7 64Bit を使い続けようと思います。

    2015年1月23日 2:05
  • 何も確認してませんが、この PREFETCHW 対策をやめたんじゃないでしょうか。

    ... Intel hardware was released that supported x64. Of course, that hardware did not support the PREFETCHW instruction. Given this and the fact that the instruction does not modify data, registers, or flags, the Windows team added support to handle the illegal instruction -- i.e. the offending 0f 0d modrm PREFETCHW encoding is modified, likely becoming 0f 1f modrm which is a multi-byte NOP...

    http://connect.microsoft.com/VisualStudio/feedback/details/697740/amd-only-prefetchw-instruction-is-generated-in-x64-optimized-code

    2015年1月23日 2:43
  • なるほど、対策を辞めたからCPU側でちゃんと実装してくれって事で、2013年頃からIntelもPrefetchWを実装する様に変更し始めたって事でしょうかね・・・

    LGA2011のCore iやXEONは今年(2015年)以降に発売されるBroadwell-E/Broadwell-EPからの対応ですから、現行のXEONでWindows 8.1を使うのはあきらめた方が良さそうですね。

    たぶん、とりあえずは動作するのでしょうけど、仕事中に突然BSODはWin98の再来みたいなもので、もう経験したくありません。


    2015年1月23日 3:50
  • えーと、Windows がやっていた対策というのが「PREFETCHW を NOP で上書きするだけ」なので、
    Windows 8.1 がそれをやめた(ntoskrnl.exe を少し眺めた限りでは Windows 7 でやっていた上記対策をやめてるように見えます)として、CPU に求められるのは、
    ちゃんとした実装ではなく、PREFETCHW で例外を起こさない実装だけ(NOPでよい<ちゃんとした実装だろうがNOPだろうがパフォーマンス以外に影響ないから)だと思うのですが。



    2015年1月23日 4:04
  • なるほど、そういう事ですか・・・

    つまり、PrefetchWは、キャッシュライン或いはパイプラインにプリフェッチするだけ?の命令だからNOPでも機能上は問題なし・・・って事でしょうか?


    2015年1月23日 4:18
  • 3DNow! のことは何も知りませんが、最初の引用で Visual Studio Support Team が「どうせ何もしない命令だから、動いたらもうけもの、動かなくてエラーになったら Windows に NOP で上書きしてもらっている」(意訳)と言っているので、そうなのでしょう。
    2015年1月23日 4:35
  • 貴重な情報を提供して頂いた事に非常に感謝しております。

    しかし、3DNow!で導入されたPrefetchWに付いて熟知していないと、この件(つまりWin8.1 64Bitのシステム要件)を正確には把握出来ないと思いますが、Visual Studio Support Teamは「どうせ何もしない」ではなく「データ、レジスタ、フラグは変更していない」と書いていると思います。もちろん両者は同義というか「表面上は何もしていない」といったニュアンスを伝えようとして書いたのであろうと思いますが、データ、レジスタ、フラグを変更する以外に何かあるのでは?という点が気になっています。

    PrefetchWがシステム要件として掲載されているのですから CPU に求められるのはPrefetchWを表面上であれエミュレートしなければならず、CPUID命令の戻り値で対応フラグが立った状態を常に返す(しかしフラグを変更している訳ではない、なぜなら定数だから)などの本来のPrefetchWと見かけ上は等価な状態を演出しなければいけないと思うのです。それがNOPだけで良いのであれば、Intelは何故にWin8.1の発表に合わせるかの様にNOPではなく、ちゃんとした実装を取り入れ始めたのか?それが少々気掛かりな点でもあります。

    Coreinfo(MicrosoftがWindows Sysinternalsで公開しているツール)を使うとCPUがPrefetchWに対応しているか判断出来ますが、他のCPUIDから得られる情報とは一行空けて別枠っぽく表示しているのでもしかしたらCPUIDではない方法で対応/非対応をチェックしているのかもしれません。このツールはNOP実装のXEONでも対応しているように表示しています。

    とは言え、私が知りたいのは内部動作ではなく、“PrefetchWがNOP実装のXEONでもWindows8.1 64Bit版のシステム要件に適合していますか?”という、ただ1点のみです。大丈夫かもしれない?で導入してみたらやっぱり正常には動作しなかったので元に戻すというのは非常に労力を使うので避けたいのです。

    この1点に付いてMicrosoftの“ご購入のご相談”というフリーダイヤルのWindows8.1購入相談窓口へ電話したところ「32Bit版のWindows8.1でしたら大丈夫です」という回答を頂いています。

    Adobe Premiere Pro CS5.5 のシステム要件は64BitのOSが必須ですから、やはり Windows7 64Bit を使い続けようと思います。

    2015年1月23日 18:40
  • > Visual Studio Support Teamは「どうせ何もしない」ではなく「データ、レジスタ、フラグは変更していない」と書いていると思います。

    だからわざわざ「(意訳)」と付けました。

    > データ、レジスタ、フラグを変更する以外に何かあるのでは?

    When the original port of our compiler to target x64 was done, only AMD hardware existed. And, at that time, the PREFETCHW instruction was deemed beneficial, so we emitted it.

    とも VS の人たちが言ってるんだから、ちゃんと実装されていたらパフォーマンスは上がるのでしょう。

    そもそも OS が illegal opcode の例外を拾って NOP でパッチしてという手間が省けるだけで、パフォーマンスが上がるでしょう。

    > やはり Windows7 64Bit を使い続けようと思います。

    どうぞ。

    2015年1月24日 4:01
  • 度々貴重な情報を有難うございます。

    残念ながら私にはMicrosoft Connectへのアクセス許可が得られないため、提示して頂きましたリンク先を直接見る事が出来ないのですが、こうして内容をコピペして頂いた事で、私がアクセスする事の出来ない情報に触れる事が出来ました。

    つまり、Visual Studio で x64 バイナリを生成するコンパイラを作成した当初はAMDのCPUしかなかったのでPrefetchW命令を生成する様な実装になっているという事ですね。

    その為、結果的に Visual Studio でコンパイルしたバイナリはPrefetchWを含んでいると・・・

    > データ、レジスタ、フラグを変更する以外に何かあるのでは?

    具体例として前回のコメントでCPUIDを挙げてみましたが、それ以外にはNOP実装と比較し表面上なにも違いが無く、影響は純粋にパフォーマンスだけという事なのでしょうかね?

    > そもそも OS が illegal opcode の例外を拾って NOP でパッチしてという手間が省けるだけで、パフォーマンスが上がるでしょう。

    たぶん、Dempsey以降のXEONはNOP実装しているので illegal opcode exception が発生しませんから例外を拾うアクションも起きないと思いますので、パッチの手間を省いてもパフォーマンスは上がらないと思います。逆に exception が発生するCPUでは、パッチしない訳ですからパフォーマンスの改善ではなく、異常終了するのではないかと思います。といいますか、インストール出来ないのでしたね。

    恐らく、セキュリティ強化の為に例外を拾って継続実行させる事を辞めたのではないかと想像しています。

    しかし私が知りたいのは内部的な仕様というより、Microsoftの公式見解としてNOP実装でもシステム要件に適合しているといった趣旨のシステム要件に関するコメントなり公式文書なりが有ると、私も安心してWin8.1 64Bitを利用出来るのですけれども・・・

    言い換えれば、システム要件に掲げられているPrefetchWは、NOP実装を含むのか含まないのか?を知りたいです。
    Yes か No か、含むのか?含まないか?

    現状では、私が友人などからWin8.1 64Bitの導入アドバイスを求められた際には、XEONに関してはグレーだとしか回答出来ません。

    2015年1月24日 8:56
  • 結局、お答えした内容に戻るのですが お知りになりたい内容は MS に問い合わせるしかないと思います。

    (プロフェッショナルサポートで)

    2015年1月24日 12:10
  • 最初からご自分で答えだしてると思うのですが。

    > といいますか、インストール出来ないのでしたね。

    http://www.microsoft.com/Language/en-US/Search.aspx?sString=prefetchw&langID=ja-jp

    2015年1月25日 0:35
  • > 最初からご自分で答えだしてると思うのですが。

    > > といいますか、インストール出来ないのでしたね。

    いえ、これは PrefetchW を NOP実装さえしてない(例外が起きる)XEONの事、具体的には Irwindale と Paxville の事に付いて書きました。

    私は PrefetchW を NOP実装している(機能しない)XEONに付いて質問しています。具体的には Dempsey から Haswell までのLGA(Land Grid Array)形状のXEONに付いてです。

    2015年1月25日 19:02