適当に楽しいことを書くブログ

とりあえず趣味っぽいことを書き連ねます

素人による素人のためのCPU設計1ーーイントロ編

2020-12-08 22:35:33 | CPU制作

さて読者諸君,PCは使っているだろうか.あるいはスマホでも良い.まさかガラケーから私のブログを読んでいる人間が...いたりするかもしれないが

それでも構わない.

 

それら機械には必ず(多分)CPUが搭載されている.現代人なら多分CPUという言葉くらいは聞いたことがあるだろう.

CPUとはCentral Processing Unitの略で,日本語に訳せば中央演算処理装置だ.

では具体的には一体何をしているの?と思われる方が大半だろう.自分はパソコンに詳しいから知ってるぞ,と思っている人間もこれが強ければつよつよPCだといううっすらとした知識しか知らないことがほとんどだろう(1年前の私がそうだった)(ただし情報科学を専門にしていてガチガチの本職の人間やらは除く).

答えよう.CPUがやっているのはコンピュータを動作させるためのプログラムを実行するための処理の大半である.

 

「???」と頭に浮かんだ人がいるだろうか.プログラミングもろくにやったことがないのにこんな記事を読む人間がいるのか?と思わなくもないがなにしろ素人のためを謳った記事なので何もかもを説明しよう.

まずコンピュータというのはソフトウェアがなければただの高価で重くて邪魔な箱である.いうなれば命が吹き込まれていない死体のようなものだ.肉体はそれを動かそうとする意思によって動かされている.

つまりこうだ.

 

これこれこうしたいという意思 ← ソフトウェア

それを実現するために体に指令を送る脳 ← CPU

実際に動く肉体 ← その他ハードウェア

 

我ながら実にわかりやすい表現ではなかろうか.

 

そしてここで結論を述べてしまうと,CPUを設計するということがどういうことかを理解するためにはソフトウェアとはそもそもどんなものであるかを理解しなければいけない.

 

ソフトウェアとはすなわちプログラムである.そしてプログラムとはコンピュータのための手順書である。

多くの人が使用するWordやExcel,(ジャストシステム信者に忖度するなら一太郎も)などは皆「文章を書く」だとか「表計算をする」だとかを行うために作られている.

これら目的を達成するための手順を,誰が読んでもわかるように記述するための言語がいわゆるプログラミング言語だ.電卓ソフトなら,入力された数字と+-×÷などから数値を計算して画面に表示する,などという手順がプログラミング言語で書かれている.(また,それぞれの手順の一つ一つを命令と呼ぶので覚えてほしい.)

 

しかしここで重要なのは,プログラミング言語とはあくまで「人間にとって」読みやすいものだ.実は(割と多くの人が知っていそうだが)コンピュータは0と1しか認識できない.この0と1というのも数字で認識しているわけではない.ただ電気が流れているか流れていないかというだけだ.

 

よって,機械が理解できる言語は1と0だけで表されている必要がある.それを機械語と呼ぶ.

 

つまり,実行できるソフトウェアを作るということは,

  1. 人間が理解できるプログラミング言語で手順書を書く
  2. その手順書を機械が理解できる機械語に変換する

という手順を踏むことである.

 

しかし実際のところ,プログラミング言語から直に機械語に変換するわけではない.

というのも機械語に用意された命令というのはとてもシンプルなものしかないからだ.

例えば,プログラミング言語で10の階乗を行うという手続きを書いたとする.

しかし機械語では足し算しか出来ない(としよう)ので,すべての掛け算を足し算で行うような記述にしなければならない.

人間の体の例で言うならば、プログラミング言語では「左手でものを掴む」と指示をかけるところを、機械語では「左手の薬指の第二関節を20度曲げる」くらい細かい命令しかできない。プログラミング言語でできる命令を機械語に書き下す作業はかなり複雑であることがわかるだろう。

そのような複雑な変換作業を1と0だけで行うのは非効率的であることは想像に難くないだろう.

よって,その間を埋める言語というものが存在する.その名もアセンブリ言語だ.

 

アセンブリ言語の命令と機械語の命令はほぼ1:1の関係をしており,機械語の直訳がアセンブリ言語だと考えてもらって構わない(実はこの2つは微妙にややこしい関係をしているのだが,それは後述).

身体の例で言うならば,アセンブリ言語は「左手の薬指の第二関節を20度曲げる」と言葉で記述できる.

それに対して機械語では身体のそれぞれの部品に番号を割り当てて(たとえば右手を1番,左手を2番,親指から小指に向かって1,2,...5番,第~関節を~度のように),「2 4, 2, 20」のように数字でのみ記述することが出来る.そしてコンピュータは0と1しか認識できないので,実際にはこれらの数字は2進数で表す.つまり「10 100 10 10100」のようになる.

 

(ちなみにいわゆるコンパイルという作業はこの「プログラミング言語→アセンブリ言語」の変換作業のことをいう.が,多分多くの人はプログラミング言語から機械語までの変換作業すべてをコンパイルと行っているので,どちらでとっても構わない.)

 

ということでここまでの話をまとめると、ソフトウェアを作るというのは、

  1. プログラミング言語で目的を達成するための手順書を書く
  2. アセンブリ言語でより細かい手順に書き下す
  3. アセンブリ言語で書かれた手順書を機械語に変換して0と1だけの文章にする
と言う手順を踏むことなのである。

 

というわけで,ソフトウェアの作り方まではわかっていただけたのではないだろうか.

 

そしていよいよCPUの話になる.

今までにプログラミング言語,アセンブリ言語,機械語と3つの言語が登場したが,ゼロからコンピュータを作ろうと思ったとき,一番最初につくるのはアセンブリ言語なのである.

実はアセンブリ言語で(つまり機械語で)使用できる命令とは,CPUが実行できる命令そのものである.

例えば,2つの値同士を足し算したり,数値を保存したりするような単純な命令は,実はCPUが実行できる命令の最小単位なのである.

それらの命令を集めたものを,命令セットと呼ぶ.

これを身体で例えるならば,「右膝関節を~度曲げる」や,「首の関節を上方向に~度曲げる」などのすべての命令を網羅したものが命令セットである.

いや正確には,「何を出来るCPUを作るか」という目標を命令セットという形で決め,その仕様通りに実行できる回路を作る,というのがCPUを設計する手順なのだ.

 

PCでソフトをインストールするとき,x86やx64などの文字列を見たことがないだろうか.あるいは,最近では情報系のニュースでArmという単語を聞いたりすることがあるかもしれない.

それらはCPUが実行できる命令を集めたセット,つまり命令セット(≒アセンブリ言語)の種類なのである.

 

 

多くのPCで使用されているintelのCPUは,たいていx64という命令セットを実行できるように設計されている.そのため,プログラミング言語で書かれたプログラムはx64の命令に変換され,x64に対応したCPUで実行可能になるのだ.

様々な種類のCPUがあれど,ほとんどのPCで共通のソフトウェアが動作するのは命令セットが共通だからなのである.

 

というわけで,まとめに入る.

結局のところCPUを作るというのはどういうことかというと,

  1. 命令セットをつくる
  2. その命令セットを実行できる回路を設計する

という2つのステップを達成することなのである.

 

以上,CPU設計のイントロダクションでした.

次回以降は論理回路の基礎について書いていこうと思います.

 


ゲームと作業の境界線

2020-12-07 15:05:00 | 日記
読者諸君(諸君などとは書くが読者は今これを読んでいるあなただけかもしれない)、ゲームをやるだろうか。

ゲームと一口に言っても、ボードゲームから最新の超高画質で高級グラボを要求するようなPCゲームまで数多あり、そのどれも遊ばないと言う人はあまりいないのではないかと思う。

最近はスマホの普及で、専用のハードや高級なPCがなくてもゲームができるようになったというのもかなり大きいだろう。

斯く言う私もゲームをやる人間だ。
最近はApex Legendsというゲームにハマっているし、少し前まではDead by Daylightというゲームをやっていた。

上記の2つはPCゲームである。では私はPCゲームしかしないかというとそんなことはない。当然紳士の嗜みとしてソシャゲもやる。

今メインでやっているのはマギレコとマジカミである。ちなみにマギレコはサービス開始日からの古参で、マジカミはDX版限定シーンに惹かれて最近始めたばかりだ。

さてそろそろ本題に入ろうと思う。本題とはタイトル通りゲームと作業の境界線だ。

ソシャゲには大抵周回が付き物である。

ソシャゲなどやらない、人生に残された限りある時間を有効活用している人々の為に周回とは何かを説明するとすれば、「キャラを育成する為の素材集めの為に同じクエストを何度もクリアすること」である。
一般に強いキャラであればあるほど強化に必要な素材のレア度や必要数も増加する為、必然的に周回数も多くなる。
その回数は両手両足では数え切れない回数になることは言うまでもない。

そんな回数同じクエストをクリアするなんて辛くないのか?と思われることだろう。

実際辛い。

なので最近のソシャゲには割と高い確率でオート周回機能がついている。スタミナを消費しきるまでゲームが勝手に操作してクリアしてくれると言う機能である。

しかしそれはそれでゲームなのか?と思われることだろう。同じことを考えているゲーム製作者もいる。そう、FGOである。

私はFateが結構好きであるので、FGOもやっていたのだが、2部になったあたりから難易度が高くなって疲れてやめてしまった。

かのFGOはゲーム性を失わない為にオート周回をつけていないらしい。あくまでらしい、と付けておくのは割と記憶が曖昧だからだ。

で、まぁそれはそれとして、オート周回には色々賛否がある。
自分で操作しないそれはゲームであると言えるのか、あるいは苦労をすることがゲームであるのか。
本筋から外れるのであまり長く触れるつもりはないが私はあった方が良いと思う。

作業とゲームの境界というのは難しい。
RPGゲームのレベル上げというのは大抵敵と何回も戦ってするものだ。しかしそれはある意味ではソシャゲの周回と似たようなものではないか。

(というかもうゲームと作業の境界とかどうでもいいのだが私の趣味嗜好からいうとRPGって苦行をわざわざ自分でやらなくちゃいけないという地獄のようなゲームだと思っているがどうにも人によってはそうではないらしい。)

RPGは楽しいからゲームでソシャゲはつまらないから作業、ということなのだろうか。
あるいは、楽しい作業がゲームなのかもしれない。

と、ここまでに記述したことについてこう突っ込みたい人もいるだろう。

ソシャゲとRPG、そもそもゲームにおける戦闘の役割が違う。

RPGにおいて戦闘はゲームのメインである。一方でソシャゲにおける戦闘とは戦闘とはあまり関係のないストーリーを読む、あるいは観る為の必要な過程である。

つまりプレイヤーが求めるものとの直結度が違うのだ。
だとすれば戦闘自体の面白さはあまり関係がないのかもしれない。

つまり、ゲームと作業の境界線とは、戦闘自体を楽しめるかどうか、ただし戦闘の面白さというよりはゲームのプレイ目的への直結度の高低ではないかということである。


1本目

2020-12-06 05:19:00 | 日記
さて友人に触発されて書き始めたはいいものの何を書くかなど一切考えていないのでどうしたものかなと考えながらこの一本目を書いているような気がする。

ブログとはあまり関係のないことではあるのだが、どんなものでも大体の場合において一作目というのは出来が微妙であることが多いと思う。

私はアニメを観るのでアニメで例を出すとすれば、化物語などだろう。

化物語は作品としての出来を求めた作品というよりは登場人物紹介編集のような感じで、それだけ観てとても楽しいという作品ではないように思う(当然面白くないことはない。私は原作を買い集める程度にはファンなので誤解しないで欲しい)。

物語シリーズという作品は、むしろその次の偽物語からよりその面白さを増す。というのは私が物語シリーズ内で一番好きなキャラである貝木泥舟が登場するからという贔屓目である。
正直に言えば偽物語も阿良々木姉妹と貝木、暴力陰陽師&愉快な死体人形の顔見せ回な気がしなくはない。

でも偽物語を観る頃にはきっとキャラに対する愛情もある程度は芽生えているだろうと思われるのできっと楽しいんじゃないかな。それを言ったら化物語がそこまで面白くない理由が「キャラに愛着がないから」になってしまうが。

じゃあやっぱり最初の作品がそこまで面白くないように感じるのはキャラに愛着を持ちづらいからということにしよう。

しかしそうなると大抵の1クールで終わるアニメは原作ファンでもなければ楽しめないということになる。

アニメをあまり観ない人にアニメを勧めるとしたら何を勧めるか。

これは人類が抱える問題の中でも間違いなくトップ50くらいには入っていることだろう。

実は私は一つの答えを知っている。

それは四畳半神話大系である。

説明しよう。
アニメを勧める上では問題になってくることが複数ある。
まず、先述の通りパッと見て面白くなくてはならない。アニメをあまり観ない人は1クール全部見た後の2期が楽しいよ、なんて理屈は通用しない。
その点において四畳半は完璧だ。つかみから怒涛のナレーションによって(多分)大体の人はノックダウンされるだろう。

第二に、絵柄問題である。
アニメを全く観ない、漫画もあまり読まない、つまりサブカルにあまり触れない人類というのはなんとも想像し難いことに、いわゆるアニメ絵が苦手だったりする。
この条件はかなり重大で、これを突破できるのはジブリくらいのものじゃないかと私は思っていた。
だが四畳半は違う。
なんとも形容し難い絵柄は多分拒絶反応を起こさないだろう多分。

そして第三に声である。
極端なアニメ声は絵柄同様拒否反応を起こしやすい。多分這いよれ!ニャル子さんなどを観せれば開始2分くらいで発作を起こして死ぬことだろう。
これについても四畳半は完璧だ。浅沼さんや坂本真綾さんの落ち着いた声はごちうさを観て死ぬ人も苦しまずに聴くことができるだろう。
ところで関係ないがごちうさはいいぞ。

そして極め付けがタイトルだ。
これがもし「自堕落な大学生活を過ごしていたら無限の四畳半に閉じ込められて悟りを開いたら何もかも上手くいった件」なんてタイトルだったら多分観ないだろう。私も観ない。
「四畳半神話大系」、なんて適切なタイトルなんだろう。観る前から興味がそそられる素晴らしいタイトルだ。
実は別にそこまで良いとも思ってないが昨今の異常に長いタイトルに比べればまだ良いだろう。

というわけで四畳半神話大系は面白いよねという話でした。

何の話をしていたんでしたっけ?

そうそう、何かを始めるというのは難しいという話だったような気がする。冒頭の方を読み直してきたので多分合ってるだろう。

ちなみに一作目が面白い作品の例としてはPSYCHO-PASSが挙げられますね。