3 ポイント 投稿者 GN⁺ 2025-03-04 | 1件のコメント | WhatsAppで共有
  • 1993年、Intelは高性能なPentiumプロセッサを発売した
    • Pentiumの回路を解析していたところ、3を掛ける複雑な回路が見つかった
    • この回路はPentiumの浮動小数点乗算器回路の一部で、64ビットの数値を8進数ベースで乗算する
  • 8進数ベース乗算の必要性
    • 2進数の乗算は概念的には単純だが遅い
    • Pentiumは8進数ベースで乗算することで回路を減らし、速度を高めた
    • 8進数乗算は0から7までの数字で掛ける必要があるため複雑になる
  • Boothアルゴリズムと×3回路
    • Boothアルゴリズムを使って乗算を最適化した
    • ×3回路は浮動小数点乗算における特別なケースとして処理する必要がある
    • この回路は高速に動作する必要があり、キャリールックアヘッドのような技術を使って性能を最大化している
  • キャリールックアヘッドと並列プレフィックス加算器
    • キャリールックアヘッド加算器は、すべてのキャリービットを並列に計算することで加算を高速に実行する
    • 並列プレフィックス加算器を使って、8ビットチャンクごとにキャリールックアヘッドを実装した
    • Kogge-Stoneアルゴリズムを使って遅延を最小化し、回路を効率的に構成した
  • キャリーセレクト加算器
    • キャリーセレクト加算器は2つの加算を同時に実行し、キャリーが決まるとすぐに結果を提供する
    • Pentiumは×3回路で各8ビットチャンクに対してキャリーセレクト加算器を使用した
  • BiCMOS出力ドライバ
    • ×3回路の出力には高い電流が必要であり、BiCMOSプロセスを使って信号遅延を減らした
    • BiCMOSはCMOSとバイポーラトランジスタを組み合わせ、高い性能を提供する
  • 結論
    • Pentiumの×3回路は複雑な設計で、過去のマイクロプロセッサよりも多くのトランジスタを使用している
    • これは、プロセッサの複雑性がどれほど増したかを示す一例である

1件のコメント

 
GN⁺ 2025-03-04
Hacker Newsのコメント
  • Trinaryコンピュータのエミュレーションでは、3の累乗で割る処理をビットシフトと加算に変換する方法がある

    • 1/3 は 1/2 - 1/2(1/3) と表せる
    • これを無限に繰り返すことで、1/3 = -(-1/2)^N と表現できる
    • 2 と 3 の任意の累乗の組み合わせでも可能である
    • これにより、定数による除算回路を固定時間で、加算器と減算器だけで構成できる
  • Cinematronicsのアーケードゲーム用プロセッサは、2つの12ビットアキュムレータを持っていた

    • 乗算命令は24ビット値にシフトし、メモリ内容を加算する
    • 8回の乗算を連続実行して24ビットの結果を得る
    • 主にゲームオブジェクトの座標回転のための2x2行列乗算に使われていた
    • 1970年代半ばに7400シリーズ部品を使って、5MIPSの最大スループットを持っていた
  • Peter KoggeはStanfordで博士号を取得し、IBMフェローとしてマルチコアCPUを発明した人物である

  • アドレス計算では3倍にする処理はよくある作業である

    • LEA命令を使って単一サイクルで実行できる
    • そのためにトランジスタ予算を使うのは良い選択だった
  • 乗算器では、7倍の代わりに8倍して1を引く方法がある

    • これはキャリールックアヘッド回路に似ている
    • 7 = 8-1、6 = 8-2、5 = 8-3、4 = 8-4 と表現できる
  • ×3乗算器には約9000個のトランジスタが含まれており、これは1976年のZ80マイクロプロセッサより多い

    • これはプロセッサ複雑性の驚異的な成長を示している
    • 今日ではシリコン半導体技術の限界に達しており、より賢く動作させるべき時である
  • radix-8 Booth乗算器にはx3回路が必要である

    • これはfmaxを押し上げるための面積/性能トレードオフである
  • 8086: 29,000

    • 386: 275,000
    • 486: 1.2 million
    • Pentium: 3.1 million
    • NSAは2000年以降に関与した
  • radix-8乗算の欠点は、0から7までの数を掛ける処理が複雑なことだ

    • 2倍するのはビットを左に1ビットシフトするのと同じである
    • 4倍するのはビットを左に2ビットシフトするのと同じである
    • 7倍するのは8倍して1を引く方法で解決できる
    • ×3は2xと1xの和、または4xと1xの差として計算できる
    • ×6を簡単に計算できるなら、×3はその値を右シフトして得られる