質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
CPU

CPUは、コンピュータの中心となる処理装置(プロセッサ)で中央処理装置とも呼ばれています。プログラム演算や数値計算、その他の演算ユニットをコントロール。スマホやPCによって内蔵されているCPUは異なりますが、処理性能が早いほど良いとされています。

アーキテクチャ

アーキテクチャとは、情報システム(ハードウェア、OS、アプリケーション、ネットワーク等)の設計方法、設計思想、設計思想に基づいて構築されたシステム構造をアーキテクチャと呼びます

Q&A

6回答

12070閲覧

何故、CPUのbit数は、8の倍数で2のべき乗なのか

aaaaaaaa

総合スコア501

CPU

CPUは、コンピュータの中心となる処理装置(プロセッサ)で中央処理装置とも呼ばれています。プログラム演算や数値計算、その他の演算ユニットをコントロール。スマホやPCによって内蔵されているCPUは異なりますが、処理性能が早いほど良いとされています。

アーキテクチャ

アーキテクチャとは、情報システム(ハードウェア、OS、アプリケーション、ネットワーク等)の設計方法、設計思想、設計思想に基づいて構築されたシステム構造をアーキテクチャと呼びます

2グッド

5クリップ

投稿2018/08/21 09:53

PCのCPUのBIT数は、8bit、16bit、32bit、64bitと8の倍数かつ、2のべき乗ですが、これはなぜですか。
こちらのサイトによれば、

ようやく本題:CPU の語長が2の冪乗だと,具体的に何が都合がいいのか?

私の (プログラマとしての) 経験から具体的なメリットを挙げてみる.
(実際にそういう語長が出現 ~普及した経緯についてはコンピュータ史を色々調べてみる必要がある.昔からそうしたいと思っているのだが….)

なぜ8ビットの倍数でなければならないか?

標準的な文字コードとして ASCII (7ビット) が普及した. その後制定された各国のさまざまな文字コードも最低7ビットが必要で, 普通は8ビットを単位としている. したがって1バイト=8ビット単位でデータを処理するマシン (バイトマシン ) でないと,文字情報を効率良く扱えない.

なぜ語長が2の冪乗でなければならないか?

プログラムを書いていると,あるサイズ (ビット数またはバイト数) のデータを記憶するのにメモリが何語 (または何バイト) 必要か, といった計算をしなければならないことがしょっちゅうある (プログラマが意識していなくて,コンパイラがやっている場合も多い). これを次のようなたとえ話で考えてみよう.

「N個の同種の品物 (ビット) がある.1つの箱 (語またはバイト) にはM個の品物が入れられる.いくつの箱が必要か?」

例えばN=789個の品物があったとして,1箱にM=12個入るとすれば, N÷M=65あまり9なので66箱必要ということになる. しかし割り算を筆算でするのは手間がかかる. (コンピュータは自分で計算しなければならないので, このたとえ話で「電卓を使う」というのはナシ.)

人間は10進数で計算するので,Mが10の冪乗 (10,100,1000,…) だったらわざわざ筆算しなくても, 小数点の位置をずらすだけで簡単に答えが出る.

コンピュータは10進数ではなく2進数を使うので, 語という「箱」やバイトという「小箱」の大きさが2の冪乗ならば, わざわざ時間のかかる割り算をしなくても,(小数点の代わりに) ビットの位置をずらす (シフト) だけですぐに答えが出るので,処理が高速に行える. プログラムの中ではこういう計算を頻繁に行うので, 語やバイトが2の冪乗でないと,処理が非常に遅くなる場合がある.

(最近のパソコンに使われている CPU は,乗除算を高速に行う回路を持っている. しかし家電製品などに組み込まれている CPU は,低価格化, 低消費電力化などのためにそういう回路は付いていないことが多いので, 乗除算には時間がかかる.)

とありました。
7bitで文字を表現するASCIIが普及して、プログラミングを行う上でよく行う計算は、ビットをずらしたほうが速いから、CPUのbit数は、8の倍数で2のべき乗ということなのでしょうか。

kazuyakazuya, atata0319👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答6

0

この件を語る時に、最初に触れておくべき話として、そもそも何の bit 数をもって「××bitCPU」と言うのか、という話があります。

一般的には「その CPU が持つ最長のアドレスレジスタの bit 数」なのだと聞いたことがありますが、モノによって解釈が違う bit 数を自称していることがそれなりにあるので、実は明確な定義はないと言ってよい状況です。「レジスタ同士の演算器のうち最長の bit 数のものの bit 数」だとか、「命令長」とか、他の何かだったりします。

昔は、アドレスレジスタとデータレジスタの長さを別にすると、それぞれ用に演算器を分けて作る必要が出てくるため、このあたりは統一されていることが多く、定義が曖昧でもあまり困らなかったのですが、最近はそのコストよりも別のコストの方を重視するようになってきたため、カオスなことになってきているのが実情で、この縛り自体もだいぶ緩いものとなってきています。

以上を踏まえた上で本題ですが、まず、他の回答ですでに触れられている通り、8bitCPU の前に 4bitCPU がありましたので、この件は、「4 の倍数かつ、2 のべき乗」というのが正しい話になります。

ではなぜ 4 の倍数なのかと言えば、電卓を発祥とする関係もあり、10 進数表現が必要だったからです。計算結果を10進数表記で出力する際に、4bitで10進数の1桁分を表すBCD 表現 / 表記等に変換してから出力することで処理が楽になるわけですね。他にも、小数点以下の部分の数を扱う場合に、2 進数のまま計算していると10進数への変換時に結構な誤差が発生してしまって都合が悪い問題への対応としてもBCD表記が使われています。

そして、なぜ 2 のべき乗なのかと言えば、回路設計の都合です。CPU というのは大規模な回路であり、その設計にはパターン化による省力化が必須です。パターン化することで設計負荷を下げ、デバッグなどのコストを抑えることができます。

そのパターン化の中で、同じ回路を 2個並列に並べて上位 bit と下位 bit に分けて処理しておいて、後でうまいことつなぎ合わせるようなことができるパターンがあるため、単純に倍にした方が半端にbit数を伸ばした回路を作るより簡単だし、過去に頑張ってデバッグ&最適化してきた回路(パターン)をそのまま使い回すこともできてさらに効率がよくなるというわけです。

そんなわけで、倍に、倍に、となってきた結果、「4の倍数かつ2のべき乗」が主流となってきた、という話なのですが、64bitより上については、さまざまな事情からこの法則を外れる可能性が高いです。

投稿2018/09/05 01:42

編集2018/09/06 16:29
himazin.blm

総合スコア581

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

36bitのCPUも存在します。NEC製のACOS-6です。
Intelの初期の計算専用のprocessor, 8087 は、80bitです。
「なぜ?」に対する答えは、16,32,64 の場合は、それぞれの前世代の8,16,32の計算機の命令等を2つ並べることができたから。16の次が24じゃパンチないし、48が欲しいという需要もない。32と言えば作る側のみんなが納得する。それほどすごい利点はありません。
また計算は2^n x 8 でも、最大のメモリの容量はそうとは限りません。今の計算機で、32bitのアドレス空間 = 4GByteよりも大きいのが普通でも、64bit のアドレス空間分の物理的なメモリを持つ計算機は存在せず、i9-7890でも最大128G = 37bitアドレス空間にすぎません。

9bitでも、7bit でも計算はできるし、ハードを作るときにも、7<->8, 8<->9間にそれほど大きな差はありません。宇宙人が多種類存在すれば、on/offの2値ではなく、初めから3値持てる計算エレメント使って発達した文明というもあると思います。

投稿2018/09/06 15:18

gm300

総合スコア580

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

CPUは、膨大な数の、AND,OR,NOTの回路で、構成されています。
その中で、AND,ORは、二入力、一出力の、最小の演算機です。

二入力を、二つ並べると、四入力、
四入力を、二つ並べると、八入力、

というように、0,1で、処理を行うCPUは、必然的に、2のべき乗で作る事となります。

また、8ビットの前には、intel4004といった、4ビットCPUが、存在しており、
4,8,16,32,64 bit
と、進化してきました。

では、2ビットは?、、、
AND,OR,etc
の、基礎素子で扱えるし、そもそも2ビットでは、計算も、ままならないかと。

そう、最近のマイコンの世界では、12ビット(PICマイコンとか)などもあります。

なお、7bitの話は、ソフト面での色が強く、あまりハードの進化には影響していないと、思います。まあ昔はハードで7bitデコードしていた機器も、あったようですが。

では!

投稿2018/08/21 10:18

ItoTomonori

総合スコア1283

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

pepperleaf

2018/08/21 10:50

その昔は、6bitもあった筈。理由は簡単。コストです。 当初は、ソフト面より、ハードの都合が優先されていました。 その後、ハード的な余裕から、6bit, 7bitは淘汰されたと思います。
keicha_hrs

2018/08/28 03:31 編集

> 最近のマイコンの世界では、12ビット(PICマイコンとか)などもあります 12bitのPICとは、具体的にどの製品を指しているのでしょうか。PICはRISC構造ですが、その命令長が12bitである製品は確かに存在します。それについておっしゃっているのでしょうか?12bitの命令長を持つものにはPIC12シリーズなどがありますが、その演算器は8bit幅です。PICのメーカーであるMicrochip Technology社でも、演算器が8bit幅のものは8bit MPUとしてラインナップされています。CPUのビット数はどこに注目するかで多様な主張ができる曖昧なものではありますが、このご回答では論理回路に注目しているものと思います。一方では回路構造、他方では命令長では、一貫性が無いのではないかと思います。
ikadzuchi

2018/08/30 12:34

全体的に質問への答えになっていないので低評価しました。 とくに、 > 二入力を、二つ並べると、四入力、 > 四入力を、二つ並べると、八入力、 というのはそれがなんだというのか分かりません。 3入力を2つ並べれば6入力、3つ並べれば9入力です。
guest

0

この問題は2つに別れますね。
1.なぜ1バイト8ビットが主流なのか
2.なぜ処理単位(CPUの主たるレジスタの語長)は2のべき乗バイトなのか

2については、まだよく検証できてませんが、バイトマシン(メモリアドレスが、CPUの処理単位と関係なくバイト単位でついているアーキテクチャ)の場合は、処理単位が2のべき乗バイトでないと効率の良いメモリアクセスができないという事ではないかと思っています。

なお、引用ページの、

したがって1バイト=8ビット単位でデータを処理するマシン (バイトマシン ) でないと,

というバイトマシンの説明は間違っています。まあ、この括弧内を削除しても意味が通じるので、全体の文意には関係ありませんが。

投稿2018/08/30 13:20

編集2018/08/30 13:33
otn

総合スコア84423

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

pepperleaf

2018/09/01 11:43

直接、関係ないかも知れませんが、昔のメモリは、x1が多かったと思う( PCだけか?) 従って、8bitアクセスのためには、8個単位で、メモリチップを増設する必要があった。 また、その昔は、CPUもチップではなく、CPUボードでした。(この世界では、1bit増やす事は、コストに直反映)
guest

0

情報処理理論で習いましたが、10進数を効率よく表現できるのが3進数だそうです。でも、数学的に表現するのが効率が良いのが2進数だそうですよ。確か、Sで始まるなんとかの理論があったはずです。もう30年も前に習ったことなので大半は忘れてしまいました。たぶん低評価を入れられると覚悟して書いてます。

投稿2018/08/30 13:41

mike2mike4

総合スコア891

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

otn

2018/08/30 13:50

「10進数を」じゃなくて、「数値を」でしょう。3が自然対数の底に一番近いからですね
mike2mike4

2018/08/30 13:54

「自然対数の底に一番近い」そうです! 思い出しました。でも、数値というと普通に使われてる12進数や60進数が入ってしまうのでは?
mike2mike4

2018/08/30 13:56

平衡三進法を使ったコンピュータですか。そんなモノがあったとは。昔はアナログコンピュータというのが学校にあって……
otn

2019/04/08 13:18

> 数値というと普通に使われてる12進数や60進数が入ってしまうのでは? 入りますよ。N進数というのは、数値を物理的に表現する方法なので、何進数かは別にどうでも良いです。
guest

0

お示しの「こちらのサイト」の文章は非常によくまとまっており内容も正しいと思いますが、その上で何が疑問なのでしょうか。
あなたの要約が適切か否かというのが質問であれば、国語の問題であってプログラミングに関係のない質問と判断いたします。

他に理由として考えられることとしては、ワード(語)内のビット位置を指定する機械語命令はよくあるのでワード長が2の冪乗だと無駄が無くて気持ちがいいです。
メモリ上に並べる話は、アドレスはバイト単位やワード単位で振られるのが普通なので1バイトが8bitである理由にはならないんではないかなと思います。
PICが12ビットというのも、1ワードが12ビットで構成されていてワード単位でのアドレスが振られている実例です。
PICはハーバードアーキテクチャといってデータメモリとプログラムメモリが分離されているためにこの中途半端なワード長でも問題がありません。

他に中途半端なビット長のCPUを作る理由として挙げられるのが、16bit CPUでのアドレス64KBが微妙に手狭になったけれど32bitというのも長すぎる、という状況ですね。
これでMSP430の一部が20bit CPUになっています。(MSP430X 20-bit extensionと呼ばれる模様)
見るとやたらと面倒そうな仕様になっていて、逆説的にビット幅を2の冪乗にしたい理由が理解できて楽しいです。

投稿2018/08/30 12:57

ikadzuchi

総合スコア3047

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ikadzuchi

2018/09/01 11:29

それですね。そうですか自称は16bitでしたか。 CPUのビット数の定義は曖昧ですからね。 20bitのレジスタ同士の演算命令があれば20bit CPUと呼びたいんですけど。
pepperleaf

2018/09/01 11:38

確か、通信系では、バイト=8bitと決め打ちできないという事で、オクテット表記を使うと聞きます。ワードはもっと怪しく、16bitと 32bitの混在。 昔、使ったコンピュータは、ワードアドレスとバイトアドレスが別で、注意する必要があった。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問