伝言ゲーム

子供のころやった伝言ゲームを覚えているだろうか?

人から人に、言葉ではなくジェスチャーなんかで伝えていって最後の人が伝わったことを発表すると 大体は全然違うことが伝わっているわけです。

同様に仕事で 打合せの内容などを伝達すると受け取る人によって異なった理解なので結果的に違う内容になっていることもあり 人に話を伝えるのは難しいという結論になるわけです。

故に、標準化を進めようとなるわけですが 感情が反映されない伝達は日本人の間では納得いかないコミュニケーションとなり 若い層と年寄り層のギャップを広げてゆく訳なのですがこれは別の話。

 

電子回路の中でも伝達は大きな問題です。

ニュアンスのようなあいまいなことはないので伝わる内容は変わらないと言いたいのですが決してそんなことはないのです。

まだ、人と人のほうがましな点もあって 文章の前と後ろから単語一つぐらい欠損してもちゃんと伝わったりするわけですが そういったことがない回路ではそういった障害に非常に弱いわけです。

デジタルデータになぜそんなことが起きるかというと データの伝送速度が速すぎることと外的要因によるものです。

 

データのやり取りというと CPUでの計算という事で言うなら レジスタという箱にデータを置いて演算指示を出すと演算されて 同じだったり違ったりするレジスタという箱にデータが置かれて それを外部のメモリーに記録します。

じゃあそのレジスタという箱にメモリーからデータを入れたり出したりすることというのはデータをやり取りすることが必要です。

細かく言うと CPUの処理に対してメモリーの速度は遅いのでCPU内部のキャッシュというメモリーに一度おいてから読み書きをするという仕組みになってはいるのですが。

CPUの内部という事だけなら良いのですが、メモリーとすると間にメモリーコントローラーがあって別の電源で動いているどのメーカーの物かわからないメモリーチップへの読み書きですから無軌道に接続できるわけではなく 規格を決めそれにのっとったものだけが繋げるようになっているわけです。

故にCPUに対応したメモリーが決められていて 増設などの時には規格を合わせて購入する必要があるわけです。

 

CPUとメモリーだけかといいうと 次は例えばグラフィックカードだったり USB端子だったりLAN端子だったり サウンド端子だったりとのデータのやり取りが必要になります。

繋がる機器が一杯ありすぎるので 個別に規格を作るとめんどうくさいので 現在の標準的な規格として PCI-Expressという規格を作ってその下にいろいろな機器を接続するようにしてあげるようになっています。

高速に接続する機器にはそれを複数束ねて使い 低速なものはそれを1本だけで繋ぐような仕組みとなっています。

ここが標準化しているのでいろいろな機器の接続が楽になったわけですが 既にほとんどのインターフェースはCPUとそのチップセット内に内包されているのでグラフィックカードやネットワークカードの増設ぐらいしかこれらのポートを外部に向かって使われることはないようです。

 

じゃあそこで終わりかというと、ネットワークカードなら ネットワークを通じて外部の機器と通信というデータのやり取りがあり、USB端子なら外部のメモリーや機器との通信がありますし USB端子の先に外部とのデータのやり取りをする端子が付いたりするので CPUとの関係で言うと 間に何人の伝言ゲームがというほどの伝達が行われているわけです。

画面の出力もそうで 仮想鵜的な画面をグラフィックカードのメモリー内に描画したものを実際の画面に転送しているわけですからこれもデータのやり取りです。

一番最初のネットワークなどでは 長距離の通信もなされるわけなので 障害も起きやすくデータのやり取りには何重もの伝言ゲームの失敗を起こさないような仕組みが用意されています。

 

前述通り、速度が上がってゆくにしたがって伝言ゲームは難しくなります。

人で言うと 早口で伝言ゲームをしてゆくというイメージです。

一番大きく口を開けた「あ」と小さくした「お」の繰り返しで「あおあおあおあお」と伝えるのですが 早口になると 「あ」の口の開け方がどんどん中途半端になって「お」の口の閉じ方もどんどん中途半端になっていって より二つが近づくと識別がより難しくなります。

電気の信号も同じで どんなに速くスイッチを切ったとしても 切れはじめと切り終わりの完全に接続されていない状態ができて100と0の間の5だとか95の時が存在しどんどん速くすると人の話で「ああああ」と一言ずつに切って発音していたものも繋がって切れ目が判らなくなるのと同様に 100と100の間の0が無くなって繋がってしまったりします。

勿論外部からのノイズで 0のはずのデータが1000とか10000とかに急になってこれをどう判断していいかわからなくなったりすることもあります。

じゃあ、伝言ゲームが間違う事を前提にするならで それを修正する方法として データの中に合っているかどうかの確認用のデータを入れたり、二度送って両方が同じかどうかで確認したりするわけです。

ただ、2度送るとせっかく高速化したのにその速度が半分になるので 100%ではないですがある程度の確率でデータの間違いを消せるデータを送る方式が採用されるのです。

例えばなのですが 「1234」というデータを送ったとすると 1+2+3+4=10となるので 「1234」と合計の最後の一桁目の「0」を付けて「12340」として送ると受け取った側が同じ計算をして最後の0と答えが合わなければ送られたデータは間違えていると判断できるからです。

意外に大変だと思いませんか?

 

伝言ゲームとは大変なんだと思いましたか?

これがもっと安定しないWifiだったり 携帯電話回線だったりするともっともっと障害の発生する可能性が高く 正しいデータが遥かに間違えたデータより少ないなんてこともあるわけなので アンテナから距離が離れると通信が遅くなったりは当たり前のことだったりするわけです。

デジタルだから間違いはないなんて思っている人は 間違え沢山で中から正しいものだけを出来るだけ選別している状態なのだという事には気が付いてないのです。

でも、前に書いた通りの合計の一桁目だけ取ったのはできるだけ追加するデータ量を減らしたくなかっただけなのですが できれば二けたの10と送るのが間違いがより減らされますし 今の場合の間違いが「1234」が「4321」でも最後の一桁は0で正しくついていると判断されてしまうので間違いが二文字以上でその間違いが+1と―1の場合は発見されない つまり間違えたデータが正しいデータとして伝わってしまうのです。

実際には伝わったデータ全体のチェックもあったりするので発生することは少ないまでも間違いっぱなしはあるのです。

 

それでも、ある程度の信用が置けるとなるわけですが 最近気になっているのがメモリーの問題。

CPUとメモリーの間は最もデータ量が多く外部機器として最も近くにいるものなのです。

故に最も高速でやり取りをするわけなのですが 故に基板上のレイアウトを決めるときに優先的に場所を与えられるパーツなので 他の影響も受けにくく高速でのデータのやり取りができるわけではなのですが ここも100%間違えないわけではありません。

現世にいる限り100%はありえなくて いくつ9が並ぼうとも100にはならない最も100に近い数字でしかないのです。

どんなに確率が低くても、高速で桁外れな回数を実行しているとそりゃー運が悪いと1回ぐらいは間違えるかもしれないのです。

じゃあ、そこまで確率が低ければ エラーチェックで引っかかるだろうと言いたいところなのですが ここはCPUメーカーさんの製品計画の段階で「大丈夫!大丈夫1」という感じで無くてもいいやとなっているだけのことなのです。

勿論、全部ではありません。サーバーなどに入っているCPUとチップセットにはそのチェックの仕組みはあるのですが 一般のPCではそれらが存在しません。

根幹となる部分に無ければ後でつけることもできないわけです。

DDR4からDDR5のメモリー規格になり規格上は何倍かの速度でデータのやり取りが可能になるはずなのですが(規格上でいまあるわけではない)エラーをチェックする仕組みはまだ追加されていません。

どんどん速くなって、どんどん間違いやすくなっているのですが大丈夫ですが続いているのですが どこまで行くのかというとちょっと心配になってきてしまいます。

勿論メモリーのコストも1割程度上がるので 一概に両手放しというわけではないのですが 上位のワークステーションクラスにはそろそろ欲しいなと思ったりするわけですが

誰も言わないのは大丈夫ってことなのかな??