今日はちょっと無謀なアイデアです^^
量子コンピュータが騒がれていますねぇ(*´ω`*)
あれって、結局、
電子の状態が、流れている、流れていない、両方流れる?というような
ものを使うものだったはず...
(よく知らなくてごめんなんさい^^; )
量子は、同じものが同時に2つ存在するとかなんとか、
そういう不思議な状態があるのですが、
そういったものを使うらしいのです。
今現在のCPUは、2進数です。
電気の流れる、流れないで、1と0を表すというもの。
量子コンピュータは3進数?とかになるのかな?
4進数とか10進数とかにはならないのかな?
そこはよく知らないのですが...
とにかく2進数を超えます!
仮に3進数だとすると、それだけでも劇的にスピードが上がります。
普通のCPUが、2^1、2^2、2^4、2^8と、2乗で数字を表すの対し、
3進数、3^1、3^2、3^4、3^8と、3の2乗倍?になります。
たぶん...
2^8は(2の8乗)は、256です。
3^8は(3の8乗)は、6561です。
電気の流れる、流れないの2つに対して、
電気が流れる、流れない、両方流れるの3つです。
ということは、1つの端子で、3つの情報があるということ。
既存のコンピュータでいう8bitというのは、8つの端子があるということなので、
2^8 (2の8乗)で、扱える数字が256になります。
量子コンピュータはでいう8bitも、8つの端子があるということですが、
3つの状態が8つなので、
3^8 (3の8乗)で、扱える数字が6561になるということでしょうか?
うーむ。
なんかそれっぽいですが、よそのサイトとかで調べてみてくださいm(_ _)m
追伸:
なんか間違っていたようです。
よく分からないのですが、量子ビットというのがあるそうです。
3量子ビットで、2^3。
50量子ビットで、2^50の情報が入るそうです。
ということは、
一度に扱える数値が大きくなるということでしょうか?
ものすごく大きな数値とものすごく大きな数値の計算ができるということ?
しかも、3つの状態だけでなく、50の状態とかも作れるみたいですね。
どうも3進数とかになる訳ではないようです(¯―¯٥)
扱える数値が2^3とかになるということ。
そういうところが、僕のレベルの低さを露呈してしまっていますねぇ^^;
これだけ扱える数字が変わってきます。
量子コンピュータといっても、確かこんな感じの原理で、
速いだけだったはずです(*´ω`*)
うろ覚えで申し訳ない...
そこで僕のアイデアですが、
電圧計算CPUです。
これは電子工作について全く知らない素人のアイデアです。
あまり突っ込まないでください(^_^;)
デジタル回路というのは、電気が流れている、流れていないということで、
1と0を表します。
僕が考えたのは、電圧をそのまま計算に使ってしまおうというものです。
例えば、1本の電線に2Vかかっていて、もう1本に3Vかかっていると
直列繋ぎなら、5Vです。
これを直接計算に使ってしまおうというもの。
これって簡単にいうと2+3=5が出来ているということですよね。
電圧をうまい具合に、数字と対応させて、合成させてやると、
計算ができないかな?と考えました^^
もちろん、電圧を自由自在にコントロールできる素子の開発が
必要なのかもしれないですけど。
(可変抵抗素子ですかね?)
電圧はサインカーブ?コサインカーブ?そんなようなもので表せるので、
それを使えば、プラスもマイナスも扱えます。
(現在のCPUも足し算と引き算しかできないので、
それさえ速ければOKですよね^^
CPUの計算のことについてはコチラに書いています。
MSXマシン語入門(Z80 アセンブラ・機械語) 第27回 マシン語の計算 勉強レポート - ニャオニャオ21世紀)
あとは、電圧を正確に読み取る装置(素子)が必要です。
1Vを1とすると、あまり大した計算はできませんが、
技術が進んで、0.1Vを1としたり、0.001Vを1とすれば、
扱える数字はどこまででも( ゚д゚)
まぁ、そこまで上手に電子の流れなどをコントロールするのは
現代の機械では難しいのかな〜。
電子1個単位でコントロールして、その電子の数を数えるという
CPUになると思います。
電気抵抗などで、電圧のコントロールが難しいかもしれないですが、
そこはCPUのように小さくする(距離を短くする)とかで、
電気抵抗の影響を抑えるとか...
または、超電導を使うとか( ゚д゚)ハッ!
でも、これって速いんですかねぇ?
既存のCPUが8bitなら、8つの端子に電気が流れているかどうかで判別します。
それを5Vか0Vかで、電気のON / OFFを判断しているのかな。
1つの波で2つのデータが入ります。
8ビットだと256の数字が扱え、16ビットだと65536の数字が扱えます。
64ビットだと、1.84467x10^19の数字が扱えます。
しかし、電圧コントロール計算なら、1つの波に100でも200でも1000でも
数値を入れることができるはずですよね〜。
2つの数値に対応する電圧を、2本用意してやって、
その電圧を合流させてやれば、計算ができます。
(10本用意してやれば、10個を同時に足すことができます)
未来の技術かもしれませんが、
電圧を自由自在にコントロールできるようになったら、
どんな大きな数値の計算でも1サイクルになります(*´艸`*)
(電圧を10^23(例えば10の23乗)とかの単位で
コントロールするとか。(^_^;)
アボガドロ定数が6.02x10^23なので〜。
恐らくこういうCPUの計算は原子・分子のエミュレートとか、宇宙の計算に
なるはずです(*´ω`*) )
5Vを256分割してやれば、8bitCPUと同等の計算ができるのかも(*´ω`*)
まぁ100Vの256分割でもいいですが...
また、電線を100本使えば、大きな数値を100個足すのが、1サイクルですよね!
(直列に繋ぐだけなので1万個足し算とかも出来るのかな?(・・?
それが1ステートで?うーむ)
(電圧じゃなくて、電流でもいいのかもしれません)
現在使われているCPUがどういった構造で計算しているのか、
よく知らないです。
8bitなら、8本の端子を使っていて、それに論理回路を組み合わすのかな?
足し算をやる時はどうでしょうか?
8bitPCのMSX(CPUはZ80)なら、
アセンブラで、
ADD A,B
ですが、
5ステートらしいですね。(MSXじゃないZ80なら4ステート)
(MSXのCPUは3.58MHzですので、1ステートは1 / 3.58M秒ですかね?)
16ビット演算だと、
12ステートです。(MSX以外は11ステート)
このことから、大きい数字ほど時間がかかります。(8bitなら256までなら速い)
しかも、100個足したら、その100倍以上かな?
僕の考えた電圧コントロール計算は、これが1ステート?になるはずなので、
計算時間が、かなり早くなると思います(*´艸`*)
とんでも技術ですね^^;
それこそ、電子1個単位の動きをコントロールするということになりますね〜
でも現在のCPUとかはそんなレベルなんじゃないかなぁ。)
追伸:
よく考えてみると、電圧のコントロールって簡単なのかなぁ(・・?
なんかコイルの巻数を変えればいいだけ?
ということは細かい電圧の調整は可能かもしれませんね!
うーん、本当にこんなことが可能なんでしょうか?
ちょっと分からないですね〜。
CPUというよりGPU?になるのかな?
CPUと繋いで、とても大きな数値を速く計算させるときだけ
この電圧コントロール計算装置を使うというのが、
いいのかもしれませんね〜\(^o^)/
僕は全くの素人なんです_(:3」∠)_
でも出来たらすごいなぁ〜ということで。
すでにSFあたりであるかもしれないです!
今日はとんでもアイデアでした〜^^
追伸:とある大学に問い合わせのメールを出しています。
関係部署に問い合わせの内容を送っておきますと、メールがあったので、
メールは届いていはいるようです(*´ω`*)
どんな結果になるのか、ドキドキですね〜
追記:
MITの研究でこんなのを見つけてしまいました^^;
これは僕の考えていたのと同じなのでは?
どうなんだろう?
そのMITのチップは、
3~7倍速く、消費電力を95%とかカットってあります。
でも1万個繋ぐとか、そういうことは書いてないですが...
16個繋いでいるのかな?
でも基本的な考え方は同じなのかも。
しかも2018年に記事になっているということは...
少し残念だなぁ(´;ω;`)
追記:詳しく読んでいくと全く違っていますね^^;
ニューラルネットワークの重みに電圧を使って、
その合計を利用することで、
計算を少なくする?みたいな感じですかね?ハテ?
よくわからないですが、全然違っていました。
(*´﹃`*)プシュ〜。
2021/03 追記:
少し、簡単にまとめてみようと思います^^
電圧で計算と言っていますが、もっとわかりやすくいうと、
抵抗( 電子工作で使うやつ^^ )で考えるといいと思います。
例えば、1+10+20+3+5
答え: 39
という計算がしたい時、
1Ω + 10Ω + 20Ω + 3Ω + 5Ω を直列つなぎをしたらどうなるか?
39Ωですよね?
これって計算の答えと同じです^^
(最後に合計抵抗を測定します)
ということは、抵抗の抵抗値を数値として扱ってやれば、
計算が出来てしまうということではないか?
この抵抗を可変抵抗としてやれば、どんな値でも計算できてしまいます。
この考えを基本として、応用していくと、
例えば、この抵抗を1万個直列つなぎしたらどうでしょう?
数値が1万ある計算が出来るはずです。
(追記:電流の調整が難しいです^^;
計測時に徐々に電流を増やすなどしていくしかないのかなぁ^^;)
多分、一瞬で(*^^*)
もちろん、色々と実現するにあたって色々と考慮する点があると思います。
抵抗器が1つ10Ωだとしても、計算結果が最大10万Ωとなってしまうからです^^;
これに関しては、
100個の抵抗器単位でひとまとめとして、合計値を1 / 100 としてやるなどの配慮がいります。
この辺りは結構たいへんですが、なんとかできると思います^^;
また、抵抗器の誤差というものも考慮しないといけません。
誤差が10%くらいとした場合、
10Ωだったら、9Ω ~ 11Ωとなります。
値が10個あって、仮に計算結果が100となった場合、
110Ω ~ 90Ω となりますが、
10の桁を四捨五入?(合ってます?)してやれば、
答えは、100 となりますよね!
(90Ωは四捨五入しても90Ωですね^^; うーん、桁上げ?桁下げ? プログラムなら条件で分けれそうですが^^;)
こんな感じでいけそうです^^
可変抵抗というか、実際は、1 ~ 9 Ωの抵抗を並列で並べて、
スイッチで計算したい値(抵抗値)につなぐという方式が良さそうです。
これって、理屈の上では、抵抗器を何個でもつなぐことが出来るので、
お金さえあれば、何個でも計算が一瞬でできる思います。
上限がないのではないかと(*^^*)
まぁ、現在のスーパーコンピュータに匹敵、またはそれ以上のものを作ると
何億円もかかると思いますが...(^_^;)
2021.06.21追伸
1つあたりの抵抗には、電流の上限があると思います。
1万個の抵抗をそのまま繋げて、膨大な電流を流せば、火災に(¯―¯٥)
やっぱり100個の抵抗を1単位として、その合計抵抗を1/100にして、
というのを繰り返すことで、結果として最終的に1万個の抵抗をつないだ形に持っていくしかないのでしょうかねぇ^^;
100個の抵抗を1パックとして、100 x 100で1万個になりますよね。
うーん、そんな感じでやるしかないのかなぁ^^;