パスワードを忘れた? アカウント作成
この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。

Microsoftがやっとx86-64への対応を発表、Sunは可能性を示唆」記事へのコメント

  • 一番乗りは誰だ (スコア:2, 参考になる)

    by nobuhiro (5244) on 2003年04月10日 15時52分 (#296086) ホームページ
    本家のBSD セクションにはFreeBSD はブートに成功 [slashdot.org]なんてものあって、x86-64 への対応は急速に進んでるみたいですね。

    AMD の狙いは、現状の 32ビットアーキテクチャと連続性を持たせ、しばらくは高性能な x86 として素早く普及を図りつつ、搭載した 64ビットアーキテクチャの性能を引き出すソフトの充実を待つ、と言ったところでしょうから、かなり目論見通り展開しているように見えます。

    %% 早く普及価格帯に降りて来てくれないかなぁ。

    --
    • by zeissmania (3689) on 2003年04月11日 0時02分 (#296378)
      画像処理とか動画処理だと、メモリが4GBでは足りない、というのが切実な問題ですから、その手の方面のソフトが真っ先に充実するんじゃないでしょうか?
      ファイル容量も64bit長で管理するのが既に当たり前ですが、このファイルI/O周りが高速化されるなら、DB関係などには非常に恩恵があるでしょうね。特にOracleみたいにRAW I/O使ってると、検索速度の高速化に効きそう。
      親コメント
    • by chi (11062) on 2003年04月10日 16時08分 (#296096) 日記
      個人的には64ビットという響きを聞くと、わくわくしてしまいますが。実際のパフォーマンスでは、32ビットも64ビットも差がない気がするのですが、どうでしょう。

      64ビット化すると、恩恵の出るアプリは除外してっ事ですけどね。
      親コメント
      • Re:一番乗りは誰だ (スコア:1, すばらしい洞察)

        by Anonymous Coward on 2003年04月10日 16時24分 (#296108)
        >64ビット化すると、恩恵の出るアプリは除外してっ事ですけどね。

        それって除外しすぎて意味の無い比較になってますよ。

        実際のスピードでは軽自動車もフェラーリも差が無い気がするのですが、どうでしょう。
        60km/h以上出せる道は除外してって事ですけどね。

        というようなもんで、差が無いという実感は正しいけど、その条件下で比較する意味は無い。

        親コメント
      • by Y.. (7829) on 2003年04月10日 18時27分 (#296195) 日記
        ん~
        身近なところで文字列のコピーなんかは普通に高速化できそう
        体感できるかどうかは微妙だけど
        恩恵のでないアプリはなさそうですよね
        親コメント
        • by Anonymous Coward
          memcpyは速くなるだろうけど、strcpyは変わらない(orより遅くなる)んじゃないかな?
          もちろんアルゴリズムとかCPU内部でのcharの取り回しのアーキテクチャに拠るだろうし、体感できるほど差は無いだろうけど。
          • by chi (11062) on 2003年04月10日 19時12分 (#296218) 日記
            そうですね。
            memcpyは早くなるな。

            元々言いたかったのは、16ビットから32ビットに以降したときの様な、必然性は感じられないって事。
            でもmemcpyが早くなるなら、やっぱりわくわくするかも。
            親コメント
            • by ed-beta (4425) on 2003年04月10日 19時48分 (#296234)
              SSE2なら128ビット長長整数レジスタが使えます。
              やったことないので分かりませんが、SSEのレジスタを
              ごそっと使ってmemcpyすると結構、速いかもです。
              親コメント
              • by Anonymous Coward
                それと同じことをやって高速化を図っているのがWinXPですね。

                プログラム起動時のメモリクリアに使用中。
            • by babie (6656) on 2003年04月10日 20時05分 (#296245)
              せっかく速くなるんだから
              memcpyからmemmoveに乗り換えましょう:-)
              親コメント
            • by Anonymous Coward
              16→32の時は、プロテクトモードが付いたとか16ビット時代に既にアドレッシング可能なメモリの限界いっぱいまで使っていて、アドレスバス幅も増えたとか、そういう単なるデータバス幅の倍加以外のメリットがありましたからね。

              それと、32bit-intは使うことが多いので1opで実行できる事がメリットとなりましたが、64bit-intってあんまり使う事が無

            • by Anonymous Coward
              メモリの複写・初期化くらい、DMAとかでガーッとやれるアーキテクチャになってくれないのだろうかと思うんだけど、どうなんだろう?
              #CPUの話からは外れるけど
              • by 505 (12538) on 2003年04月11日 16時48分 (#296805)
                上でもかかれてますが、NULL文字を判定してそこまで転送…といったような、転送データの内容によって転送条件があったりすると、一般的なDMA(転送元/転送先/転送ワード数程度の設定しかできない)だと対応できないっすよね。

                ん~ ENDマーク自己認識機能きDMAコントローラか… こんどのシステムボードのFPGAの隙間(^^;)におしこんでテストしてみるかな…(^^;)

                親コメント
              • へ?

                汎用のDMAC(DMACとして売られているLSI)だったら、転送終了のための
                データを設定出来たりしますよ。
              • by 505 (12538) on 2003年04月16日 18時50分 (#299638)
                不勉強でもうしわけありません。
                私がいままで使ったことのあるDMAは、そのような機能をもったものがないので、具体的なメーカー名と型番を教えていただければありがたいです。よろしくお願いいたします。
                親コメント
          • by 505 (12538) on 2003年04月10日 22時02分 (#296307)
            >memcpyは速くなるだろうけど、strcpyは変わらない(orより遅くなる)んじゃないかな?
            実際のライブラリがどのような処理をしているかはわかりませんが…
            ハード的にはただのメモリ間データ転送ですよね?
            であればCPUのレジスタのビット長やコアの内部バスのバス幅はあまり関係なくて、CPUの外部メモリバスのバス幅や速度で決まってくるのではないかと…
            で、すでにPentium以降のCPUは、外部バス幅は64ビットになってますので、あとはFSBの差しかないかと…
            親コメント
            • by Anonymous Coward

              ハード的にはただのメモリ間データ転送ですよね?
              であればCPUのレジスタのビット長やコアの内部バスのバス幅はあまり関係なくて、CPUの外部メモリバスのバス幅や速度で決まってくるのではないかと…
              で、すでにPentium以降のCPUは、外部バス幅は64ビットになってますので、あとはFSBの差しかないかと…

              ん? んん?
              何の話? OpteronはメモリコントローラをCPUに内臓してるから、FSBがどうたらとか無関係ではないの

              • すでに現在でも、20万円も出せば64bit CPUを積んだ新品のワークステーションが買えますよ。ご自身で確かめられては?(ニヤリ)

                >んで、ここでの話題は物理的なメモリ速度なんか全然関係無くて、CPU内部での論理的なメモリ操作の話をしているのではないかなと。

                少なくとも普通のプログラム(SSEやVISみたいなSIMD命令群がメインで動かないようなプログラム)では、 64bitアドレス空間で動かしたほうがポインタのサイズが大きくなったり、 ページテーブルのキャッシュミスが増えたりするため、実行速度は遅くなります。

                参考程度ですが、メモリコピーを行うプログラムを同一マシン上で 32/64bitアドレス空間それぞれで動かしたので、 結果を張り付けておきます [srad.jp]。

                親コメント
              • by 505 (12538) on 2003年04月11日 16時54分 (#296809)
                あぁ~そうか、NULL文字とかを判定しながら転送とかしてるから、単なるDMAとはちがいますもんね。
                親コメント
              • by chi (11062) on 2003年04月11日 21時12分 (#296963) 日記
                結果拝見しました。
                最適化を掛けていないので、memcpyとmemmoveの差がでない様な気がするのですが、いかがですか?

                gccで下手に最適化掛けると、確かmemcpyとかはインライン展開されてしまうので、inline抑制有/無で結果出していただけるとありがたいです。

                #お前がやれって?
                #ごもっとも
                親コメント
              • 最適化・inline化を切り替えて やってみましたが [srad.jp]、特に変化なしです。 コード見ても律儀にライブラリを呼び出しているだけで、 inline化するための条件を満たしていないみたいです。

                まあいずれにしろ、inline化したところで変化するのは関数コールのオーバヘッドの分だけのような気がするので、元々のメモリ転送速度の話とは切り放して考える必要があると思います。

                親コメント
              • by chi (11062) on 2003年04月12日 12時56分 (#297314) 日記
                結果拝見しました。
                有意な差は出ていないようですね。

                ありがとうございました。
                親コメント
          • by Anonymous Coward
            え、なんで?
            #本当にわからないのでAC
            • by SteppingWind (2654) on 2003年04月11日 1時36分 (#296436)

              strcpyだと末尾の'\0'を判断して, その先は送り先側にはコピーしないようにするので, 何も工夫していないプログラムでは1バイト毎の転送となってしまい, 8バイト分の幅がある64bitバスの有効性が活かせない. 下手をすると1バイト単位という特殊なアクセスの為, 効率が極端に落ちるのではないか. ということだと思います.

              ただstrcpyみたいな非常によく使われる関数でそんなおばかなインプリメントがされるわけは無く, 例えば基本的には64bit単位での転送を使い, 文字列末尾の8バイトブロックだけ特殊な処理を行う様になっているはずです.そのため, ほとんど全ての文字列の長さが8バイト未満というような場合を除き, 効率は上がると考えて良いと思います.

              親コメント
              • by Anonymous Coward

                ただstrcpyみたいな非常によく使われる関数でそんなおばかなインプリメントがされるわけは無く, 例えば基本的には64bit単位での転送を使い, 文字列末尾の8バイトブロックだけ特殊な処理を行う様になっているはずです.

                glibcなんかはi586以上はsysdependなコードがありますが、i386は無いので「おばかなインプリメント」がされています。
                Linuxの多くのディストリビューション

              • by Anonymous Coward
                訂正:
                誤:IA64用のコード
                正:x86-64用のコード
        • とりあえず、リソーク空間は広がってMSプログラムの
          リソース不足によるトラブルがなくなる事を期待したい。

          大量のデレクトリとかファイルとかエクスプローラで扱おうとすると
          リソース食って遅くなったり、不安定になったりするからね。
          • その辺は32bitでも対処出来るのでは?

            ちなみに、Windowsでいうところのシステムリソースなら、NT系で
            すでに3MBがデフォルトになっていますが、さらに増やすと
            管理の手間が増えてパフォーマンスが落ちるらしいです。
      • なので、64Bit化して搭載メモリ上限を増やしたい事じゃないですか。
        普通の方はメモリの上限が迫ってるって意識されていませんので、遅い64BitCPUより速い32BitCPUを支持し、いつまでたっても64Bit化が進まない今ままでの状況が続くと思います。
        親コメント
        • PC分野では割と無視されてるのですが、Pentium Pro(P6)以降、
          x86の物理メモリアドレスは36ビットです。通常は4GB止まり
          (32ビット)で使われていますがLinuxやWin2K/XPは36ビットアドレス
          に対応済みですね。
          ですので今すぐ限界がくる、という言い方は不正確かと。
          この手法で物理メモリ空間を拡大することも不可能ではないです。
          あまり効率は良くありませんがね。

          元ネタの後藤さんは分かって書いておられるようなので問題ないん
          ですけど。
          親コメント
          • P6以降は36ビット…という話は聞いていますが、具体的にはどのようにメモリマップされているのか、もしよろしければ教えて下さい。

            現状のメインメモリが1Gや2Gバイトまでのマシンの場合、低位アドレス側にはメインメモリがそのまま見えますよね? それを超えると、PCIバス空間(AGPなど含む)にアクセスしに行きますよね?
            例えば4G以上のメモリを積める場合は、PCIメモリ空間はどこにマッピングされるんでしょうか?
            (PCIメモリ空間のアドレッシング能力も、一般的には32ビットですし…)

            親コメント
            • PSE-36とPEA-36という2つの方法が用意されています。
              PSE-36はページサイズを拡張して36ビットアドレスを参照します。
              一方、PAE-36はページディレクトリテーブルを使ってアドレスを
              拡張します。
              リニアアドレスは32ビットのままで、36ビットの物理アドレス空間
              に32ビット仮想アドレス空間がマッピングされているという風にイメー
              ジすればわかりやすいと思います。

              詳しくはインテルが出しているマニュアルを参照してください。
              たしか日本語版もPDFでダウンロードできます。
              親コメント
            • またまたFreeBSD-CURRENTの話になっちゃうのですが, 丁度本家の記事 [slashdot.org]でも4GB越えの実装が行われたことについて取り上げられています.

              まあ4GB越えと言っても単一プロセス内では32bitアドレスのままなので, 科学計算等の用途ではmmap等を使ってアクロバティックなプログラミングをすることにならざるをえないと思いますが.

              親コメント
              • 見ていないうちに流れてしまったトピックスですのでレスしてもアレかも
                しれませんが・・

                >アクロバティックなプログラミングをすることにならざるをえないと思いますが.
                おっしゃる通りです。仮想アドレスは32ビットのままですから。
                なにやらWindows 3.1時代を彷彿とさせますね。
                関連してPCIのアドレス等は物理アドレス的には下位4GBにマップされます。
                これも実は「いつか来た道」で、ISAバスのDMAやISAバスのバスマスタデバイスは
                4GBの下位16MBにしかアクセスできませんでした。
                親コメント
            • 物理アドレスと論理アドレスを分離して考えられれば特に疑問に思わないかと。
              • 物理アドレスと論理アドレスの違いですか…
                となると…PCIバスマスタは、メインメモリに対しての転送でも、物理アドレスを指定した転送しかできないので、その場合はどうなるんでしょうね?
                例えば4Gバイト以上のメインメモリを実装できるサーバーなどの場合は、4Gを超えたアドレスのメモリにはPCIバスマスタはバスマスタ転送できないのかな??
                (すいません、飲み込みが悪くて…^^;)
                親コメント
    • by Anonymous Coward
      > x86-64 への対応は急速に進んでるみたいですね。

      すでに x86-64 が NetBSD 1.6 のサポートアーキテクチャの中に
      入ってたりするくらいには急速ですな。

      基本的に IA32 のすなおな拡張なので、新しいことやりたがりの
      INTEL よりは手っ取り早く実用的なのかもしれず。
      巧遅は拙速にしかず。

日々是ハック也 -- あるハードコアバイナリアン

処理中...