2017年2月18日土曜日

bit数の大きなコンピュータは速い 【回路やデジタルの自己満説明!】

専門外の方に回路、コンピュータの動作原理を解説し興味を持ってもらうためのブログ。今回はbit数の大きなコンピュータがなぜ高速処理できるかを解説しています。

話の内容

前回はこんな話を書きましたが、今回はこんな話です。
○bit数が大きいと高速処理

【ご注意】
この記事は、bit数というものがどういう目的で設定されているのかなど原理を説明する記事です。
どの商品が優れているとかどのグラフィックカードが良いとかといった評価の話ではありません。


コンピュータの扱える数値の大きさ

家庭用のゲーム機を購入したことがある方なら覚えがあるでしょう。
   古きよき8bit時代のファミリーコンピュータ、PCエンジン、
   16bitに進化したメガドライブ、スーパーファミコン、
   次世代機と呼ばれた32bit機プレイステーション、
   王座を奪われた任天堂が起死回生を狙った64bit機ニンテンドー64などなど。

最近はどうなのでしょうか。
パソコンでもすごいゲームができると聞いて、価格.comでグラフィックカードと検索してみました。
うおwメモリのバス幅が128bitなど平気であります。最近のゲームではその位のパワーが必要なんでしょう。


時代とともにbit数が2のN乗で大きくなってきました。
これまで2進数、16進数の話を書いてきましたが、
上で挙げた機械のbit数でどれだけの数値を表せるのか表にしてみます。

bit数と表せるパターン
8bit 0~255までの256パターン
16bit 0~65535までの65536パターン
32bit 0~4294967295までの4294967296パターン ←42億!
64bit 0~18446744073709551615までの18446744073709551616パターン ←1844京!
128bit 340282366920938463463374607431770000000パターン位 ←電卓がオーバフロー!

bit数が大きいと大きな数値を扱うことができます。



bit数を大きくすると高速処理ができる理由その一

例えば、8bit機で500+200を行うことを考えます。
8bit機は255までの数値しか扱えませんので、下例のようなプログラムで対処します。
      500という数値が8bitの塊いくつ分で表せるか判定
         (500の場合は2つで表せるとわかる)
      200という数値が8bitの塊いくつ分で表せるか判定
         (200の場合は1つで表せるとわかる)
      上の最大値+1を求める(桁が上がる場合があるので+1用意しておく)
         (最大値+1は3つ)
      8bit幅のメモリ3つ分を3つ(500を入れる箱と200を入れる箱と答えを入れる箱)を確保
      足し算します
      結果を“答えを入れる箱”として用意したメモリに書き込み
      結果を表示

8bitのパソコンなどで何万+何千という足し算をするとちゃんと答えが表示されますが、
中の人(内部のプログラム)が上のような面倒くさい処理を人間の代わりにやってくれちゃってた訳です。

上のプログラムでは何度もメモリに読んだり書いたりとアクセスしに行きます。メモリアクセスには当然時間がかかります。
アクセスの回数が少なくて済むならその分必要な時間が短くなり、処理速度は速くなります。
bit数が大きくなると扱える数字が大きくなるので余計なアクセスが減り計算速度が速くなります。

これがbit数を大きくすると高速処理ができる理由その一です。



bit数を大きくすると高速処理ができる理由その二

では、上の表で32bit、64bit、128bitの扱える数値を見てみましょう…、
…、
…、
…、こんなデカイ数値使う場面があるのでしょうか?無駄のように思えますが、ここは使い方次第。


例えば、3次元の空間をコンピュータ内に作り上げます。ある位置にカメラを置き、そのカメラの映像をディスプレイに写します。
最近のゲームはほとんどこれのようです。こういうゲームでは“ポリゴン”と呼ばれる三角形、四角形の板を複数組み合わせて空間内に部品(キャラクターとか背景の景色とか)を作っているようです。

そのポリゴン(ここでは三角形で考えます)というものは、3点の座標、色の情報を持っていれば表現できるものです。
そのゲーム機の解像度が1920x1080ドット、表示発色数1600万色だとすると、
ポリゴンのデータは、
        X座標:X1(11bitの数値)
        Y座標:Y1(11bitの数値)
        Z座標:Z1(11bitの数値)
        X座標:X2(11bitの数値)
        Y座標:Y2(11bitの数値)
        Z座標:Z2(11bitの数値)
        X座標:X3(11bitの数値)
        Y座標:Y3(11bitの数値)
        Z座標:Z3(11bitの数値)
        赤成分:R (8bitの数値)
        緑成分:G (8bitの数値)
        青成分:B (8bitの数値)
----------------------------------------
        合計    123bit

座標を11bitとしたのは、11bitあれば0~2047までの数値が表現できるので、
解像度を考慮してそれだけあれば十分だろうと勝手に決めました。また、RGB各8bit持てば1600万色表現できます。
合計123bit必要になりますが、これを全部並べます。

1bitは1本の配線と思ってください。128bitの機械は、データのやり取りのための配線がCPUとメモリ間に128本つながっています。
この128本を左から11本はこのデータ用、次の11本はこのデータ用、…と並べていきます。123本あれば並びますので、上のように定義します。
こういう風に128bitの幅を、使う側が何bit目から何bit目は何の情報ですよと勝手に定義して使うことができます。
          ----------------------------------------------------
          開発環境がそれを許しているかどうかは知りませんよ。
          ここでの話はあくまで動作原理の話です。
          ----------------------------------------------------
128bit幅を持つ機械を使って上のように定義すれば、ポリゴン一つの情報を読み出すのに1アクセス、書き出すのに1アクセスでできちゃいます。
ゲーム機、グラフィックカードの目的を考えると、メモリアクセスの大部分をポリゴンデータの読み書きが占めることになります。
つまり、“高速に覚える、思い出すことができる”=“高速処理ができる”となります。

この方法はポク太郎が勝手に使い方を考えたもので、どう使うかは設計者の自由です。
業界にはそれなりの常識がありますが必ず守らないといけないものではなく、どういうハードウェアを作ってどう制御すると速くできるか?は設計者が考えてその方法を決めます。ですので、何bitのハードウェアだから速いとか遅いとかは一概に言えるものではなく、結局ベンチマークなりで確認して初めてこれがベストと決まることになります。

こんな感じで、やたらと広いバス幅を持つことも、目的・使い方によっては効力を発揮します。
    ----------------------------------------------------------------------------
    ゲーム機ではないのですが、最近OS(Windowsなど)が64bitに移行しつつあります。
    これは高速というより別の理由だと思います。
    搭載メモリが大きくなると、
    メモリのどこ?を指し示す数値(アドレスといいます)に巨大な数値が必要になります。
    高速化に寄与するか?というと使い方次第なのでここでは触れません。
    ----------------------------------------------------------------------------


使い方によるんですよと但し書きはありますが、
これがbit数を大きくすると高速処理ができる理由その二です。



その他の高速化の方法

こういったハードウェアの演算を高速にする要素はまだまだ他にもあります。ここではその要素を列挙するだけですが、

      ◇メモリのアクセススピード自体を速くする
         …IC内部メモリの巨大化(IC内部は高速にアクセスできるので)
         …高速アクセス可能なメモリの使用(DDRなど)

      ◇演算のスピード自体を速くする
         …IC内部で逓倍クロック使用(PLL、DLL)

      ◇ハードウェアで専用回路を用意し、
       定型的な演算(よく聞くのは回転・拡大やエンコードなど)をそいつに任せる。


こういうことを日々繰り返した結果、
現在ではとんでもないコンピュータが出来上がっているようです。




ここから余談

      この記事を書くにあたり、
      昨今のゲームってどんなの?とYoutubeなどで見てみました。
         なんじゃこりゃあw
      これ子供が現実と仮想をごっちゃにしないか?と心配になりました。
      また、自然現象は昔も今も変わっていませんので、電子の動きも変わりません。
      ということは…昔はドンだけ無駄な電力使ってたのよw

      オサーンの独り言でした。



話の内容

こんな話でしたが内容は伝わりましたでしょうか。
○bit数が大きいと高速処理


【関連記事】  1バイト…1バイト…
何で16進数!?(怒)
何で2進数!?(怒)
デジタルは“0”と“1”?




0 件のコメント:

コメントを投稿