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

Sunでプロセッサ事業が新部門として復活」記事へのコメント

  • by Anonymous Coward
    オープン系では今や何でもIAサーバに走る傾向があるけど、
    本当にIAだけでいいのかと思うときがある。

    どのアーキテクチャでも得手不得手はあるわけだから、
    単一で賄おうとすることもあるまいに。
    • んー、IA32系の石は、基本が20年前のCISCである8086でそこにどんどん拡張していったのを高速に処理するために内部処理をRISCっぽくしているという感じで、内部構造が複雑ですからね。
      実際組み込みでPPCとかMIPSコアのサードパーティの石の低レベル部分とかをハイエンドアプリ搭載の基板向けに弄っていましたが、クロック対処理能力比でいうとIA32ベースよりも数段上でした(って、基本となるチップの世代が1世代は違いますからね…)

      まぁ、そういう事を考えると、SunがRISC(ですよね?)MPU開発事業を再開したというのは、ハイパフォーマンス市場に対応するために高クロック化しすぎて熱の面で厳しくなりつつあるけどIA系の次にユーザエンドでは使われているPPC系に対抗可能なニーズが確実にある。と読んだのでしょうね。

      # でも、「OSもアプリもJavaで書け」とかなったりしたら(^_^;
      • RISCって、どんなに頑張っても、1サイクルに1命令しかフェッチできませんけど、
        現在のx86は、複数のRISC命令を1つのCISC命令に「圧縮して」主記憶においてる
        ようなもんだから、インストラクションを演算コアに流し込む速度で、絶対的な
        優位があると思います。
        • そのRISCやCISCの定義はどこから出てきたものですか?
          • もともとの、RISCプロセッサの特徴ってこんなのですよね。

            基本思想は
            ・利用頻度の少ない高機能命令の実装をばっさりカット(これが縮小命令セットと言われる理由)
            ・命令が途中でつっかえたりしない効率的なパイプライン運用ができるハードを作る
            ・そのために必要なチューニング等の難しい部分はコンパイラーにおまかせ

            で、

            実際の実装は
            ・単純な命令しか用意しないかわりに、1マシンサイクルで必ず1命令を実行させ、限界までCPIを稼ぐ
            ・命令を処理しやすいように1命令1ワードに納まる固定長の命令セットにする(即値も命令コード内に含める)
            ・マイクロコードによる複雑な命令解析は諦め、直接ワイヤードロジックで制御回路を組んで高クロックで実行する
             (もともとマイクロコードを入れていたはずのメモリ部分は巨大なレジスタセットとキャッシュメモリに充てる)
            ・演算操作はレジスタ間のみに限定、メインメモリは遅くてアクセスが間に合わないのでオペランドにしない
            ・メモリとレジスタ間のデータ転送はロード&ストア命令だけに限定、アドレッシングモードは最小限にする
            ・必要なら、パイプラインをストールさせないために分岐予測や遅延分岐を用いる
            という感じでしょうか。

            現在RISCだと自称するプロセッサのほとんどが、このルールのどれかに違反していますが…。
            PowerPCなんて、物凄く高機能な命令が「これでもか!」というほど用意されてますし。
            組み込み向けRISCプロセッサも多くが16/32Bit可変長命令をサポートしていたりするわけで。
            逆に、単純命令のワイヤードロジック制御による実行なんかは、i486あたりからx86系プロセッサも採用していて、
            CISCプロセッサだとは言われますが、キャッシュにある単純命令を1サイクルで実行可能だったはず。

            メーカーが自社のチップをRISCプロセッサであるとカタログに謳っていたとしても、ほとんどのケースが
            「RISC風味がたくさん入ったアーキテクチャです」という意味にすぎないと言えなくもない。
            結局、「RISCプロセッサです」と書くと、カスタマにも「ワークステーション等に使われているような
            高性能なCPU設計を取り入れた製品だ」と思ってもらえるからでしょうか。セールストークとしては効果的だよね。

            RISCは1サイクルに1命令しかFetchできないって話がありましたが、VLIWなんかは多数の命令を1命令に
            パックしたものなので、等価的に多数の命令を同時実行していると思います。ですが、この方式は
            実行ユニットに命令を埋めていくのが大変らしいとかで。
            例えば、TransmetaのCrusoeは、VLIWチップ本来の命令セットである「ネイティブモード」で動かすと、
            同じ事やらせてもコードモーフィングで変換して実行する時よりも性能が落ちるそうで。
            VLIWは命令が大きくてFetchするのにも大きなバス帯域を喰いますから、それが結構重い負担になるようです。

            となると、CISC的な高機能命令セットでバスに負担をかけないコンパクトな命令列をCPUへ読み込み、
            命令デコーダで複数の内部RISC命令に分割して実行ってのはバス帯域を圧迫しないという点で、
            あながち間違ったやり方ではないのかもしれません。Pentium4なんか内部命令に変換したものを
            そのままトレースキャッシュとしてまるごと保持して次からデコード抜きで実行したりしてますし。

            Athlonみたいに演算ユニットが9つもあって、それをみんなVLIWで制御するとなると、VLIW方式を採用して、
            全てに毎回命令を割り当てて完全な制御下に置くことを考えると、とんでもない長さの命令が必要になりますから、
            結局、今のような実装でいいのかなという気もします。
            親コメント
            • 例えば、TransmetaのCrusoeは、VLIWチップ本来の命令セットである「ネイティブモード」で動かすと、
              同じ事やらせてもコードモーフィングで変換して実行する時よりも性能が落ちるそうで。
              VLIWは命令が大きくてFetchするのにも大きなバス帯域を喰いますから、それが結構重い負担になるようです。

              その話をもう少し聞かせてください。というか、私が思っていたのとアーキテクチャが違うので戸惑っています。

              私が思っていたのは、Crusoe には VLIW 命令セットしかなくて、VLIW 命令セットで実装されたインタプリタが動いている時間帯と VLIW 命令セットにコンパイルされたコードが動いている時間帯があるという動作でした。つまり、いつでも VLIW 命令を Fetch している動作だと思っていました。

              VLIW 命令の中を埋められないのはそうだと聞きましたし、コードモーフィングは実行時情報を使って最適化(そもそも計算をしない、等)もできる可能性もあると聞きます。でも命令セットが2系統あるという話はちょっと。

              親コメント
              • 別にアーキテクチャは違わないのじゃないかな。
                仕組み的にコードモーフィングでVLIMのFetchはキャッシュの効率がすごく良くなると思うので主記憶から全てを持ってくるのに比べたら、それなりの違いが出てもおかしくない。
                命令セットが2系統あるというよりも、コードモーフィングの実行を前提にした特別な仕組み(特権命令とか割り込み)があるんじゃないでしょうか。
                親コメント

皆さんもソースを読むときに、行と行の間を読むような気持ちで見てほしい -- あるハッカー

処理中...