2017年2月18日土曜日

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

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

話の内容

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

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

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

世の中で何bit機!と表現しているのは“CPUとメモリをつなげる配線の本数(データバスの幅)”のことを指しています。

最近はどうなのでしょうか。
パソコンでもすごいゲームができると聞いて、価格.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までの値しか扱えませんので、下のようなプログラムで対処します。
  1  500という値が8bitの塊いくつ分で表せるか求める
500の場合は2つで表せる)
2200という値が8bitの塊いくつ分で表せるか求める
200の場合は1つで表せる)
3上の最大値+1を求める(桁が上がる場合があるので+1用意しておく)
(最大値+1は3つ)
48bit幅のメモリ“答えを入れる箱”を上で求めた数(3つ)だけ確保
5足し算
6結果を“答えを入れる箱”として用意したメモリに書き込み
7結果を表示

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

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

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


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

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

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

そのポリゴン(三角形で考えます)というものは、3点の座標、色の情報を持っていれば表現できるものです。そのゲーム機の解像度が1920x1080ドット、表示発色数1600万色だとすると、ポリゴンのデータは下表だけあれば表現できます。
頂点1のX座標X1(11bitの数値)
頂点1のY座標Y1(11bitの数値)
頂点1のZ座標Z1(11bitの数値)
頂点2のX座標X2(11bitの数値)
頂点2のY座標Y2(11bitの数値)
頂点2のZ座標Z2(11bitの数値)
頂点3のX座標X3(11bitの数値)
頂点3のY座標Y3(11bitの数値)
頂点3のZ座標Z3(11bitの数値)
赤成分の明るさR(8bitの数値)
緑成分の明るさG(8bitの数値)
青成分の明るさB(8bitの数値)
  合計(123bitの数値)
座標を11bitとしたのは、11bitあれば0~2047までの数値が表現できるので解像度の数値=1920もちゃんと指し示せるよなと勝手に決めました。また、RGB各8bit持てば1600万色表現できます。(実際には色ではなくテクスチャなるものを使っていますが、ここでは単色とします。)

合計123bit必要になりますが、これを全部並べます。

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

この方法はポク太郎が勝手に使い方を考えたものです。
どういうハードウェアを作ってどう制御すると速くできるか?は設計者が考えてその方法を決めます。ですので、何bitの機械だから速いとか遅いとかは一概に言えるものではなく、結局ベンチマークなりで確認して初めてこれがベストと決まることになります。(変態ハードと呼ばれる機械もたくさんありますねw)

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

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


その他の高速化の方法

こういったハードウェアの演算を高速にする要素はまだまだ他にもあります。ここではその要素を列挙するだけですが、
      ◇メモリのアクセススピード自体を速くする
         …ICの内部メモリの巨大化(IC内部は高速にアクセスできるので)
         …高速アクセス可能なメモリの使用(DDRなど)
         …高速なメモリクロックの使用

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

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

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


ここから余談

この記事を書くにあたり、
昨今のゲームってどんなの?とYoutubeなどで見てみました。
      なんじゃこりゃあw
これ子供が現実と仮想をごっちゃにしないか?と心配になりました。

自然現象は昔も今も変わっていませんので、電子の動きも変わりません。
ということは…昔はドンだけ無駄な電力使ってたのよw

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


話の内容

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


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

コンピュータ動作原理解説

CPUのビット数


スポンサーリンク



blogramのブログランキング



0 件のコメント:

コメントを投稿