またまた Windows 8 は 32bit か64bit か

Windows7 は 32bit か 64bit かという記事を3年前に書きました。まだ人気があるようで、本業よりこっちの記事の方がまだ読まれています。

islandcenter.jp

--
Windows 8 の comsumer preview には色々文句付けたいことがあるのですが、 驚いたことは

32 bit バージョンの安定性です。

何しろ Windows NT 6.2 ですからね。

Microsft は Windows 7 を出荷するに当たり、「最後の32ビットOS」と言っていたのいのですが、やっぱ完全に64ビットに移行できないことがこれで明らかになったと思います。

となるとサードパーティソフトウェアメーカーの動向が気になります。

お付き合いはないけどAdobe はなんとかいくつかの製品では64ビット化を果たしたようです。

Photoshop キラーといわれるフリーウェアの gimjp もベータではあるが64ビット版が出てきました。しかしまだ他に64ビットレジスタのパワーを生かすようなフルスペックのキラーアプリケーションが出てきません。たとえばビデオエンコードや、我々の知らないプロ用のソフトウェアなどですね。

それと、x64 じゃないとインストールもできないというグリグリのゲームソフト。

一般ユーザ用途ではブラウザとメールが使えればいい、ということになればソフトウェアベンダーが容易に64ビット版アプリケーションを出荷するとは思えません。

ブラウザ以外にも一般的な業務アプリケーション(会計だとか給与計算だとか)があるのだけれど、これらが完全に64ビット化するには、あとワールドカップ3回くらい見ないとダメでしょう。

Windows 8 が出荷されて5年はメインストリームサポートを続けるとなれば、こういったアプリケーションがは2017年以降も存在し続ける可能性があるわけですね。これらの64ビットパワーを使わない業務用アプリケーショベンダーとしては当面32ビットでコードを書いてコンパイルして販売するでしょう。わざわざ動いているものをリスクを負って64ビットでコンパイルしなおすはずはない。

マイクロソフトも初めて Windows 7 x64 で16ビットアプリケーションを「排除」しました。

3年前 Windows 7 の RC 版が出たとき、お勧めは 32 ビット版だ、と書いきました。なぜか転載されて随分この記事はお読みになった方が多いようです。

この3年間で随分事情も変わり、ノートブックにもオプションで8Gのメモリが積めるマシンが出るようになりました。私が今使っているノートもそうです。

しかし、3年前に買った Core 2 Duo 4G メモリマシンと今の Core i3 4スレッドのマシンを使い分けてみると、なぜだか古いノートの方が軽快に動作しています。たとえば、「ようこそ」画面やスリープ状態からパスワードを入力する際だとかです。コンピュータのキーボードを叩いているというより、タイプライターを使って文書を作成するくらい軽快さがありません。アプリケーションの起動も

「今なんか押した?」

ってくらいなぜか重かったり、急にアプリケーションがハングアップするケースも32ビット版より多いように思えます。それはお前のマシンが遅いからだろって言われそうですが...一つ一つの操作に一呼吸必要な隔靴掻痒さを感じます。

まだ、あんまりアプリケーション入れていない、ウブなマシンなんですけどね。色々アプリケーションを仕込んでは削除を繰り返してレジストリがでっぷり太った古女房のような Windows 7 32 bit 版の方がまだ使いやすいし安定して安心して使えます。

スタートアップにタスクマネージャを入れているのですが、タスクマネージャが起動してCPU利用率が「落ち着く」までの時間が随分違います。圧倒的に古い32ビット版 Windows 7 のノートブックの方が軽快なんですね。慣れもあるのでしょうけど。

一般の雑誌やライターさんたちは、よくベンチマークを使いますがベンチマークは「靴を履いて紐を結んでよーいドン」で実行されます。

あるテレビ番組でクルマのベンチマークテストでBMWを0-400mするのに「何分かかるか」とやっていました。BMWでキーをひねって I-Drive の設定に3分。ところが隣のフィアットかなにかは、エンジンかけてアクセル踏むだけなので20秒ほどで完走します。まぁ、コンビニに買い物行くにはちょうどいい距離かもしれません。

私たちが普段PCで仕事をするときは Radiko でラジオを聴きながら文書を書き、ウェブで検索し、こうして Evernote でアイディアを書き、 SSH 端末でサーバを管理し、という作業では圧倒的に32ビッ版が有利な気がします。

よく「32ビットCPUは4Gしかメモリを認識しない」とありますが、一部では正しく、一部では誤解です。なぜなら Windows 2003 Server Enterprise Edition は 32 ビット版でも 32Gb のメモリを使うことができます。

なぜ Windows 8 32ビット版にはこの機能を組み込まないのでしょうか。

これはページのエミュレーションを使う PAE を使えば簡単にできることです。ページ切り替えにかかるCPUのオーバーヘッドはかかり、64ビットアドレスをリアルアクセス出来ないためオーバーヘッドはかかりますが、64ビットネイティブのコードより、32ビットコードの方が、プログラムサイズが小さい分、圧倒的にキャッシュやディスクの負担が減ります。


-オペランドの長さが動作に影響する-

前回、オペランドの長さがどう影響するのかというご指摘をいただきました。


たとえば次のような単純なレジスタにメモリからデータを読む命令でも64ビット命令の方がオペランドが長いのがわかります。

 
mov ax,[XX;XX] - x86 (3 bytes命令)
mov eax,[XX:XX:XX:XX] - x386 (5 bytes命令)
mov rax,[XX:XX:XX:XX:XX:XX:XX:XX] - x64 (9 bytes命令)


他になにかプリフィックスがつくかもしれませんが、明らかに64ビットの方がプログラムが大きくなります。
コードが小さくなった分、ページエミュレーションで拡張したメモリにデータを置けば、16Gでも32Gでも 32 bit OS でもメモリは有効に使えます。

コンピュータの機能には大きく二つあります、「演算」と「制御」です。「演算」というのはプログラマの経験者だったら一度は書いたことがあるソートであるとか、サーチであるとか、文字列の一括変換とか、よく演算処理のベンチマークである円周率の計算などです。こういった処理は「バッチ処理」です。イマドキのパーソナルコンピュータでこのあたりの「処理が重い」と思ったことはないでしょう。ベンチマークソフトも一種のバッチ処理の能力を示すものです。青色申告ソフトの「再計算」なんて処理もこれですね。

一方、ユーザである私たちが一般にやる操作は「制御」が90%以上だと思います。マウスを動かすとか、キーボードを触れるとか、印刷を開始するとか、アプリケーションを起動したり切り替えたりです。

このあたりの処理はCPUの演算能力より、「いかに小さく効率よくロジックを作ってコードを書くか」がプログラマに求められます。したがってプログラマであれば、わざわざ64ビットの長いコードを書くより32ビットの短いコードを書きたがると思います。結果CPUキャッシュに入るデータの大部分は、フェッチしたコードだったり、ルーチンのスタック変数だったりします。こうなるとプログラムサイズが小さいほうが圧倒的に性能がいいはずです。

たとえば Windows 7 Pro の 32 ビット版の ISO ファイルは 2.3G 64 ビット版は 3.2G、別に64ビットだから面白い”オマケ”が付くわけではありません。それだけコードやライブラリ、APIのサイズが大きくなっているだけです。それだけ、インストールに時間もかかるし、コードを読み込むにも、メモリからCPUキャッシュに入るまで、負担がかかるということですね。

-二つの目的を一つにする不合理さ-

やはり、 Windows 8 はタブレット専用OS、あるいはARMで使って。という位置付けで、ホームエンターテイメント、ビジネス用途には Windows 7 でよろしいという裏のメッセージが読めて仕方ありません。

とは言え、今の時代、「メモリが多ければ早い」という誤解がはびこっている以上、

「プログラムの肥大化」=「メモリ増設」

という図式は変わらないのでしょうね。

Windows XP は驚異的な期間利用されたOSといわれましたが、たぶん Windows 7 の 32bit 版もそういうことになるでしょう。 Windows 8 に 32bit 版が存在する以上、互換性が必要となるのです。

64ビット版で一番困るのは、32bit 64bit 混在している状況でライブラリも混在しているという点です。当然アプリケーションも64ビット版と32ビット版のライブラリを用意するのでしょうが、32ビットアプリケーションから64ビットライブラリを間違えて呼び出して

「動きません」

というケースがよくあることです。さらに ARM 版が加わるのだから、話はややこしくなります。

-中国雑技団じゃないと使えないインターフェース-

よく90年代の Microsoft ジョークに「マイクロソフトがクルマを作ったら」というのがありました。
「アンテナをつかんでドアノブを引っ張りながらキーを回してエンジンをかける」というやつです。

まさかとは思うけど、キーボードをマウス以外に、遠くにあるタッチパネルを使うのに両足の靴下を脱がないとワイプだとかズームだとかを行わなければならないインターフェースはないでしょうね。24インチのタッチスクリーンでそれをやるとなると、さらに口でモップを咥えて体を支えなければならない。

まぁ、デスクトップならそれでいいけど(良くないって...)、ノートブックだったら、鼻と舌で「面白い顔」でスクリーンを動かさなければならないとなれば、爆笑ものでしょう。

まぁPCと言う普通名詞とパソコンという普通名詞が Windows8 8 以降変化していく過程を作っていくのだな、というぼんやりした将来が見えてきます。当然タブレットPC版では Windows Store のようなものからでなければ、新しいアプリケーションはインストールできないでしょう。それでいいと言う消費者、利用者がいる一方で、パソコンを趣味と捕らえる人、小回りが利くツールとしてフェリーウェアやバッチ処理を自分でプログラミングしてカスタマイズできる機械と考える二極化が始まるのでしょう。

そのような二つの目的をひとつの Windowsd 8 という一つのカテゴリーで包みあげること自体無理があるだろうと思います。

で、結局のオチなんですが、私がほしい Windows 8 は32bit 版で、メモリが32G認識できて、今までどおり、マウスとキーボードで操作できるPCではなく「パソコン」用のシステムです。

おそらく無理でしょうけどね。

メモリの値段も安くなったし「64ビットは早い」といううそみたいな「神話」がある以上、64ビット版しか選択肢はないのでしょう。Hyper-V

islandcenter.jp


PS: 製品版にしてからプリンタドライバが見事に x64 対応版がなかった。プリンタメーカーの対応予定なし。 x64 版はドライバ証明書がないと Windows 7 の x64 用も動かない。Facebook アプリは見事に文字化け。Windows7 用もインストールできず。x64 が使えるメリットって、Hyper-V が使えるくらいなのかなぁ。XEN なら動いたのにHyper-V も動かない。結局苦労して x64 入れた甲斐がなかった。32 Bit にもどすか、印刷するときは Windows 7 x86 用に切り替えるしかないみたいだ。やっぱり x86 版のほうがフツーのヒトには無難なようだ。

さてその顛末は
結局 Windows 8 の製品版を入れてみた。 Windows 32 と 64 の違い

お問い合わせは
islandcenter.jp
Commented by 名もなき冒険者 at 2013-04-20 09:53 x
>Windows 2003 Server EE
付け加えるなら Windows Server 2000 Advanced もそうです。
PAE対応しています。
Commented by islandcenter at 2013-04-21 14:54
コメントありがとうございます。そういえば 16ビットの時代からページエミュレーションってありましたからねぇ。
Commented at 2014-04-07 19:14 x
ブログの持ち主だけに見える非公開コメントです。
Commented by islandcenter at 2014-04-08 11:27
コメントありがとうございます。まぁ無理してPAEを組み込む必要もなかったのでしょうね。
Commented by ななし at 2021-08-07 10:55 x
門外漢なのですが、偶然このページを発見していくつか気になったので、よろしければお答えください。
ここで挙げられている「64ビット命令の方がオペランドが長い」という問題点は2021年現在でも実質的な問題としてあり続けているのでしょうか?
Commented by islandcenter at 2021-08-09 16:03
コメントありがとうございます。全てコンパイラが決める事なので何とも言えないのですが、一般的には 32 ビットバイナリの方が 64 ビットバイナリの方がサイズは小さいですね。例えばソフトウェアのインストーラなどでも 64 ビットの方がサイズは大きいですし、Windows そのものの ISO サイズも64ビット版の方が 20~30% 大きいようです。ただ、世代が新しいCPUで最新のコンパイラを使うと、短い便利な命令を使ったりするようです。(だから速いというわけではないようです)実際こういう記事書いて自信が持てなかったので、64ビットと32ビットでどれだけコード差があるのか試してみた記事もご参考下さい。

32ビットと64ビットの逆アセンブル
https://islandcnt.exblog.jp/18457424/

by islandcenter | 2012-02-03 13:19 | Windows 8 | Comments(6)