Menjembatani kesenjangan antara mesin abstrak dan arsitektur komputer? [Tutup]


11

Saya selalu merasa terputus antara mesin abstrak (seperti mesin Turing) dan arsitektur komputer (termasuk arsitektur mesin virtual, arsitektur Von Neumann). Jadi saya ingin tahu bagaimana mereka terkait? Bagaimana yang satu memengaruhi yang lain? Referensi juga dihargai. Terima kasih.


7
Mesin Turing adalah model ilmu komputer teoretis untuk alasan tentang komputabilitas . Demikian pula, kalkulus lambda adalah model ilmu komputer untuk perhitungan, tetapi salah satu yang telah menemukan aplikasi praktis dalam desain bahasa pemrograman. Sementara kalkulus lambda, mesin turing, dan komputer aktual setara satu sama lain sehubungan dengan hal-hal yang dapat mereka hitung, mereka sangat berbeda dalam cara kerjanya. Khususnya, model teoritis perhitungan ini tidak menggambarkan apa yang dapat dilakukan perangkat keras nyata secara efisien.
amon

2
@amon Sepertinya Anda sudah menulis sebagian besar jawaban, mengapa biarkan "buang-buang" dalam komentar?

Seperti yang lain menunjukkan, ada beberapa model matematika untuk "komputer": beberapa lebih dekat ke bahasa (fungsi rekursif parsial, kalkulus lambda), beberapa lebih dekat ke perangkat keras. Jika Anda mau, Anda harus melihat mesin RAM ( tautan Wikipedia ): mereka lebih dekat ke perangkat keras nyata daripada mesin Turing.
Lorenzo Dematté

Jawaban:


23

Mesin Turing dan "mesin" sejenis adalah model perhitungan , mereka dimaksudkan untuk menyelidiki masalah seperti:

  • Apa yang bisa dihitung
  • Kelas kompleksitas masalah
  • Hubungan antara kelas kompleksitas
  • Kesetaraan berbagai cara untuk menghitung sesuatu

Untuk tujuan itu, mesin itu sendiri harus sesederhana mungkin. Kenyamanan programer atau masalah implementasi sial tidak masalah, karena ini adalah objek matematika dan hanya sedikit program yang pernah ditulis secara langsung untuk mereka.

Sebaliknya, arsitektur mesin virtual dan arsitektur mesin berbasis silikon aktual dipusatkan pada pelaksanaan program yang diberikan . Mesin dibuat lebih rumit dari yang diperlukan untuk masalah di atas, dan pada gilirannya dibutuhkan lebih sedikit (dan lebih jelas) instruksi untuk melakukan hal-hal menarik. Tidak terlalu rumit, karena mereka masih harus dapat dipahami (dan dapat diimplementasikan secara efisien), tetapi lebih rumit.

Jadi kedua pendekatan itu pada dasarnya bertentangan. Selain keduanya berada di bidang ilmu komputer, mereka tidak memiliki banyak hubungannya satu sama lain.


1
Terima kasih. Tapi saya menemukan " mesin Turing dan mesin Turing universal dengan analogi dengan mesin virtual ", yang mungkin menyarankan hubungan mereka tetapi tidak ada rincian.
Tim

4
@Tim Saya kira tentu saja hanya menggunakan mesin Turing sebagai titik awal untuk memperkenalkan konsep mesin abstrak, lalu dengan cepat beralih ke mesin abstrak yang lebih berguna.

4

Hubungan utama adalah bahwa Anda dapat mensimulasikan konstruksi teoretis dalam konstruksi fisik.

Fakta bahwa fisik satu mampu semua hal yang teoritis adalah memunculkan kemampuan untuk pengujian teoritis dan analisis mesin teoritis untuk diakui sebagai dapat diterapkan di dunia nyata.

Masalah penghentian adalah contoh sempurna dari sesuatu yang ditunjukkan pada mesin turing untuk tidak dapat dipecahkan, dan dengan bukti pada mesin turing maka dapat diketahui tidak terpecahkan pada mesin nyata yang mematuhi hukum mesin turing.

Ini perbedaan antara menjumlahkan sesuatu dengan menghitung dan melakukannya dengan menuliskannya di atas kertas, telah terbukti bahwa kenyataan menghitung memenuhi aturan yang sama seperti melakukan penjumlahan pada selembar kertas. Jadi ketika Anda mensimulasikan penghitungan fisik barang, hasil Anda diakui berlaku untuk dunia nyata - sehingga Anda tahu berapa biaya dua batang permen dengan mensimulasikan mental penghitungan tanpa perlu menghitung uang fisik untuk menghasilkan hasilnya.

Orang-orang saat ini sedang mengerjakan analisis dan pengujian model teoritis yang dikenal sebagai "Mesin Kuantum Turing" untuk melihat fasilitas apa yang akan tersedia dengan mesin komputasi kuantum. Masuk akal orang akan bekerja dengan model ini ketika versi fisik dari model mereka terlalu mahal, jarang, dan implementasi saat ini masih sangat kurang. Model teoritis digunakan untuk menunjukkan apa yang mungkin dapat kita lakukan ketika implementasi fisik kita meningkat.


1

Mereka terkait kira-kira dengan cara yang sama seperti pesawat ulang-alik terkait dengan balon yang Anda mengembang dengan napas dan kemudian melepaskan dan menonton terbang.

Ada prinsip dasar mengusir sesuatu ke satu arah untuk mendorong sesuatu ke arah yang berlawanan.

Di situlah kesamaan berakhir.


1

Saya melihat mesin-mesin teoretis sebagai menjembatani kesenjangan antara perhitungan dunia nyata dan matematika. Mesin Turing cukup kuat untuk mensimulasikan arsitektur dunia nyata atau bahasa pemrograman, cukup sederhana untuk disimulasikan dengan mudah, dan, yang paling penting, cukup sederhana untuk menjadi subjek penalaran dan bukti matematika yang cukup mudah.


1

Penting untuk diketahui bahwa definisi komputasi bukanlah "hal-hal yang dilakukan komputer". Komputasi mendahului komputer. Komputer diberi nama mereka karena mereka diciptakan untuk membantu tugas perhitungan, bukan karena mereka mendefinisikannya.

Jadi Mesin Turing bukan tentang cara kerja komputer. Ini tentang apakah masalah dapat dihitung atau tidak - yaitu, dipecahkan oleh proses logis / matematika formal. Ia tidak mengatakan apa-apa tentang bagaimana proses itu dapat diimplementasikan. Jika itu dapat dihitung, itu dapat diselesaikan oleh manusia dengan pensil dan kertas, diberikan waktu yang cukup, atau dengan komputer atau (ini adalah hal yang penting) dengan sistem apa pun yang dapat ditampilkan sebagai Turing lengkap .

Jadi Mesin Turing melakukan dua hal yang sangat penting:

  1. Memberikan tes untuk kemampuan komputasi dari setiap masalah / tugas.
  2. Menyediakan tes untuk sistem apa pun untuk menunjukkan apakah dapat menghitung tugas yang dapat dihitung.

Poin pertama memungkinkan kita untuk memikirkan masalah tanpa terganggu oleh implementasi dunia nyata. Ini adalah hal yang baik karena perangkat keras yang sebenarnya sering mengalihkan perhatian orang dengan detail yang tidak relevan (seperti, "apa yang terjadi jika kita kehabisan memori atau ruang penyimpanan?", Karena Mesin Turing memiliki sumber daya tak terbatas). Solusi teoritis yang dapat dibuktikan dapat dikembangkan untuk Mesin Turing dan kemudian semua yang perlu dilakukan seseorang adalah menerjemahkannya menjadi sesuatu yang akan bekerja pada arsitektur yang diberikan.

Poin kedua memungkinkan kita memverifikasi kemampuan implementasi apa pun tanpa harus menjalankan banyak tes berbeda di atasnya. Jika dapat mensimulasikan Mesin Turing, ia dapat melakukan apa saja yang dapat dilakukan Mesin Turing. Karena Mesin Turing dapat menghitung apa pun yang dapat dikomputasi, demikian juga dengan mesin Turing.

Yang berarti bahwa hubungan antara Mesin Turing dan arsitektur komputer yang benar-benar praktis (bahkan yang virtual) hanyalah satu hal: mereka dapat menghitung.

Arsitektur Von Neumann adalah upaya untuk membuat template desain untuk komputer digital elektronik tujuan umum yang efektif . Karya Turing memberikan bukti validitasnya


-1

Jika Anda memikirkannya, arsitektur adalah mesin abstrak. Mereka menggambarkan bagaimana gumpalan silikon yang dibuat dengan hati-hati "harus" berperilaku. Perbedaan antara arsitektur dan mesin Turing lebih merupakan masalah skala daripada perubahan mendasar dalam pendekatan.

Keuntungan dari mesin Turing adalah bahwa ada satu set bukti berguna yang sangat mudah dilakukan dengan menggunakan mesin Turing. Mudah untuk membuktikan bahwa mesin apa pun yang cukup kuat untuk mensimulasikan mesin Turing dapat menyelesaikan masalah yang dapat dilakukan mesin Turing (duh). Namun, itu menjadi lebih menarik ketika Anda mendefinisikan fungsi yang dapat dihitung . Ternyata ada banyak definisi yang kompatibel dari fungsi yang dapat dihitung. Jika Anda dapat mendefinisikan semua perilaku Anda sebagai fungsi yang dapat dihitung, Anda dapat disimulasikan dalam mesin Turing.

Jadi katakanlah Anda memiliki arsitektur yang secara langsung mendukung program gaya LISP, dan yang lain seperti x86 yang lebih prosedural. Teman Anda mengklaim "LISP lebih ekspresif, sehingga Anda dapat menulis program di mesin ini yang tidak akan pernah Anda tulis di x86 Anda." Ini brutal untuk dilawan (terutama karena Anda mungkin tidak cukup tahu LISP). Namun, Anda dapat menyalahgunakan beberapa mesin abstrak seperti mesin Turing:

  • Mesin LISP Anda mungkin mewah, tetapi semua yang dapat dilakukannya dapat direduksi menjadi kalkulus lambda. Temanmu mengangguk dengan penuh semangat. Kalkulus Lambda adalah sedikit pemujaan bagi pemrogram fungsional.
  • X86 saya mungkin mewah, tetapi semua yang dapat dilakukan dapat direduksi ke mesin register. Sekali lagi, tidak ada pertanyaan dari teman Anda. Register adalah SO pase dalam teori komputer modern!
  • Mesin register apa pun dapat dimodelkan sebagai mesin Turing yang mensimulasikan mesin register itu. Sekarang teman Anda bertanya-tanya mengapa Anda mengingat kembali ke era punch-tape.
  • Dan mesin kalkulus lambda Anda dapat dikurangi menjadi mesin Turing juga. * Teman Anda keberatan, tetapi Anda mengarahkan mereka pada tesis Church-Turing, dan mereka menundukkan kepala karena malu.
  • Jadi kotak x86 saya dapat melakukan apa saja yang dapat dilakukan oleh mesin berbasis LISP mewah Anda!

Tentu saja ada banyak contoh lain. Permainan Kehidupan Conway terbukti lengkap, artinya secara teoretis dapat melakukan apa pun yang dapat dilakukan komputer Anda. Cara termudah untuk melakukan ini adalah membangun mesin Turing dalam Kehidupan . Saya mengemukakan ini karena ini adalah kasus yang Anda sebut mesin abstrak yang diperlakukan sebagai arsitektur literal! Anda dapat membayangkan betapa sulitnya klaim komputabilitas dalam Kehidupan tanpa bantuan model abstrak (saya yakin tidak memodelkan x64, lengkap dengan cache yang mengintip, hanya untuk membuktikan bahwa Life dapat dihitung!)


Pada akhirnya, perbedaan besar antara arsitektur dan mesin abstrak adalah bahwa arsitektur biasanya berkaitan dengan kinerja. Arsitektur ingin tahu seberapa cepat Anda dapat melakukan sesuatu. Mesin abstrak cenderung puas hanya dengan mengetahui jika Anda bisa. Pertimbangkan Konstruktor Universal yang dikembangkan untuk mesin negara von Neuman. Itu sudah cukup untuk membuktikan bahwa UC dapat bekerja, tidak peduli bahwa penulis tidak pernah memiliki kekuatan komputasi yang cukup untuk benar-benar melihatnya.

Harga arsitektur membayar untuk menunjukkan seberapa cepat mereka dapat bekerja adalah bahwa seringkali sangat sulit untuk membuktikan bahwa mereka dapat menghitung semuanya . Untuk itu, arsitektur berbalik kembali dan mulai menggunakan mesin abstrak.


1
Contoh alasan yang Anda berikan tidak secara teknis benar - jika Anda menyatakan bahwa mesin turing dapat melakukan segala sesuatu yang dapat dilakukan mesin register atau mahine x86, itu tidak berarti bahwa mesin x86 dapat melakukan semua yang dilakukan mesin register atau mesin turing. bisa. Sebagai contoh tandingan, setiap robot terbatas juga dapat direduksi menjadi mesin Turing tetapi jelas tidak setara dengan lambda calculus atau LISP. Masalah arah - jika Anda ingin menyatakan "kotak x86 saya dapat melakukan apa pun yang dapat dilakukan oleh mesin berbasis LISP mewah Anda", maka diperlukan pengurangan dari Turing ke x86, bukan dari x86 ke Turing.
Peteris
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.