抽象マシン(Turingマシンなど)とコンピューターアーキテクチャ(仮想マシンのアーキテクチャ、Von Neumannのアーキテクチャを含む)の間には常に繋がりがありません。だから、私はそれらがどのように関係しているか知りたいですか?一方が他方にどのように影響しますか?参考文献も歓迎します。ありがとう。
抽象マシン(Turingマシンなど)とコンピューターアーキテクチャ(仮想マシンのアーキテクチャ、Von Neumannのアーキテクチャを含む)の間には常に繋がりがありません。だから、私はそれらがどのように関係しているか知りたいですか?一方が他方にどのように影響しますか?参考文献も歓迎します。ありがとう。
回答:
チューリングマシンおよび類似の「マシン」は計算のモデルであり、次のような問題を調査することを目的としています。
そのためには、マシン自体をできるだけシンプルにする必要があります。プログラマの利便性や厄介な実装の懸念は重要ではありません。これらは数学的なオブジェクトであり、それらのために直接書かれたプログラムは非常に少ないからです。
逆に、仮想マシンアーキテクチャと実際のシリコンベースのマシンアーキテクチャは、特定のプログラムの実行に集中しています。マシンは、上記の懸念に厳密に必要なものよりも複雑に作られており、興味深いことをするための命令がより少なく(そしてより明白に)なります。理解しやすい(そして効率的に実装できる)必要があるため、それほど複雑ではありませんが、より複雑です。
したがって、2つのアプローチは基本的に対立しています。どちらもコンピューターサイエンスの分野に属しているだけでなく、お互いにあまり関係がありません。
主な関係は、物理構造の理論構造をシミュレートできることです。
物理的なものが理論的なものすべてに対応できるという事実は、理論的な機械の理論的なテストと分析が現実世界で実装可能であると認識される能力をもたらします。
停止の問題は、チューリングマシン上で解決不可能であることが示された完璧な例です。したがって、チューリングマシン上で証明することにより、チューリングマシンの法則を遵守する実際のマシン上では解決できないことがわかります。
数えることで物事を合計することと、紙に書くことでそれを行うことの違いです。数えることの現実は、紙の上で合計することと同じルールを満たしていることが証明されています。したがって、物の物理的なカウントをシミュレートすると、結果は現実の世界に適用できると認識されます。したがって、結果を出すために物理的なお金をカウントする必要なく、カウントを精神的にシミュレートすることにより、2つのキャンディーバーがどれくらいの費用がかかるかがわかります。
人々は現在、「量子チューリングマシン」として知られる理論モデルの分析とテストを行って、量子コンピューティングマシンで利用できる機能を確認しています。モデルの物理的なバージョンが非常に高価で、まれであり、現在の実装がまだ非常に不足している場合、人々はこれらのモデルで作業することは理にかなっています。理論モデルは、物理的な実装が改善されたときに何ができるかを示すために使用されます。
理論上の機械は、実世界の計算と数学の間のギャップを埋めていると思います。チューリングマシンは、実世界のアーキテクチャまたはプログラミング言語をシミュレートするのに十分強力で、簡単にシミュレートできるほど単純であり、最も重要なことには、合理的な単純な数学的推論と証明の対象となるほど単純です。
計算の定義は「コンピューターが行うこと」ではないことを知っておくことが重要です。計算はコンピューターよりも前のものです。コンピュータには、計算タスクを定義するためではなく、計算タスクを支援するために作成されたため、名前が付けられました。
したがって、チューリングマシンはコンピューターの動作に関するものではありません。問題が計算可能かどうか、つまり、公式の論理的/数学的プロセスによって解決できるかどうかです。そのプロセスの実装方法については何も述べていません。それが計算可能であるならば、それは十分な時間が与えられ、鉛筆と紙との人間によって解決することができ、または持つコンピュータまたは(これは重要なことである)を持つすべてのことを示すことができるシステムチューリング完全。
したがって、チューリングマシンは2つの非常に重要なことを行います。
最初の点は、現実世界の実装に気を取られることなく問題について考えることを可能にします。チューリングマシンには無限のリソースがあるため、実際のハードウェアは無関係な詳細(「メモリまたはストレージスペースが不足するとどうなりますか?」など)で人々を混乱させることが多いため、これは良いことです。証明可能な理論的解決策をチューリングマシン用に開発できます。その後、誰かが行う必要があるのは、それを特定のアーキテクチャで動作するものに変換することだけです。
2番目のポイントは、多くの異なるテストを実行することなく、実装の機能を検証することを可能にします。チューリングマシンをシミュレートできる場合、チューリングマシンでできることは何でもできます。Turing Machinesは計算可能なものをすべて計算できるため、計算も可能です。
つまり、チューリングマシンと真に実用的なコンピューターアーキテクチャ(仮想アーキテクチャも含む)との関係は、計算できるという1つのことです。
Von Neumannのアーキテクチャは、効果的な汎用電子デジタルコンピューター用のデザインテンプレートを作成する試みでした。チューリングの仕事は、その有効性の証拠を提供しました
考えてみると、アーキテクチャは抽象的なマシンです。彼らは、注意深く作られたシリコンの塊がどのように「振る舞うべきか」を説明しています。アーキテクチャとチューリングマシンの違いは、アプローチの根本的な変化よりも規模の問題です。
チューリングマシンの利点は、チューリングマシンを使用して非常に簡単に実行できる便利な証明のセットがあることです。チューリングマシンをシミュレートするのに十分な強力なマシンであれば、チューリングマシンで可能な問題を解決できることを証明するのは簡単です(duh)。ただし、Computable関数を定義すると、さらに興味深いものになります。計算可能な関数には多くの互換性のある定義があることがわかります。すべての動作を計算可能な関数として定義できる場合、チューリングマシンでシミュレートできます。
したがって、LISPスタイルのプログラムを直接サポートするアーキテクチャと、手続き型のx86のようなアーキテクチャがあるとします。あなたの友人は、「LISPの方が表現力が高いので、x86では書けないこのマシンでプログラムを書くことができる」と主張しています。これはカウンターするのは残酷です(特に、おそらく十分なLISPを知らないので)。ただし、チューリングマシンのようないくつかの抽象的なマシンを悪用することができます。
もちろん、他にもたくさんの例があります。ConwayのGame of Lifeはチューリング完全であることが証明されました。つまり、理論的にはコンピューターでできることなら何でもできるということです。これを行う最も簡単な方法は、Lifeにチューリングマシンを構築することでした。これは、抽象マシンと呼ばれるものがリテラルアーキテクチャとして扱われる場合のケースになるためです。Lifeの計算可能性の主張が抽象モデルの助けなしではどれほど難しいか想像できます(Lifeが計算可能であることを証明するためだけに、キャッシュピークを備えたx64をモデリングしていないのは確かです!)
最後に、アーキテクチャと抽象マシンの大きな違いは、アーキテクチャは通常パフォーマンスに関係しているということです。アーキテクチャは、どれだけ速く何かを実行できるかを知りたいと思っています。抽象マシンは、できる限り知っているだけで満足する傾向があります。フォンノイマン状態マシン用に開発されたユニバーサルコンストラクターについて考えます。UC が機能することを証明するのに十分であり、著者が実際にそれを見るのに十分な計算能力を持っていなかったことを決して忘れないでください。
アーキテクチャがどれだけ速く動作するかを実証するための価格体系は、すべてを計算できることを証明するのが非常に難しい場合が多いということです。そのために、アーキテクチャはすぐに戻り、抽象的なマシンの使用を開始します。