Thu hẹp khoảng cách giữa máy trừu tượng và kiến ​​trúc máy tính? [đóng cửa]


11

Tôi luôn cảm thấy bị ngắt kết nối giữa các máy trừu tượng (như máy Turing) và kiến ​​trúc máy tính (bao gồm cả kiến ​​trúc của máy ảo, kiến ​​trúc của Von Neumann). Vì vậy, tôi muốn biết làm thế nào họ có liên quan? Làm thế nào để một ảnh hưởng khác? Tài liệu tham khảo cũng được đánh giá cao. Cảm ơn.


7
Máy Turing là một mô hình khoa học máy tính lý thuyết để lý giải về khả năng tính toán . Tương tự, tính toán lambda là một mô hình khoa học máy tính để tính toán, nhưng một mô hình đã tìm thấy các ứng dụng thực tế trong thiết kế ngôn ngữ lập trình. Trong khi lambda tính toán, máy turing và máy tính thực tế tương đương với nhau về những thứ họ có thể tính toán, chúng hoàn toàn khác nhau về cách chúng hoạt động. Đáng chú ý, các mô hình lý thuyết tính toán này không mô tả những gì phần cứng thực sự có thể làm hiệu quả.
amon

2
@amon Có vẻ như bạn đã viết hầu hết câu trả lời, tại sao lại để nó "lãng phí" trong một bình luận?

Như những người khác đã chỉ ra, có một số mô hình toán học cho "máy tính": một số gần với ngôn ngữ hơn (các hàm đệ quy một phần, phép tính lambda), một số gần với phần cứng hơn. Nếu bạn muốn, bạn nên xem các máy RAM ( liên kết Wikipedia ): chúng gần với phần cứng thực hơn máy Turing.
Lorenzo Dematté

Câu trả lời:


23

Máy Turing và "máy" tương tự là mô hình tính toán , chúng nhằm điều tra các vấn đề như:

  • Những gì có thể được tính toán
  • Lớp phức tạp của vấn đề
  • Quan hệ giữa các lớp phức tạp
  • Sự tương đương của nhiều cách khác nhau để tính toán một cái gì đó

Với mục đích đó, bản thân máy phải đơn giản nhất có thể. Sự thuận tiện của lập trình viên hoặc các vấn đề triển khai phiền phức không quan trọng, vì đây là các đối tượng toán học và chỉ có rất ít chương trình được viết trực tiếp cho chúng.

Ngược lại, kiến ​​trúc máy ảo và kiến ​​trúc máy dựa trên silicon thực tế tập trung vào việc thực hiện một chương trình nhất định . Máy được chế tạo phức tạp hơn mức cần thiết cho các mối quan tâm trên, và đến lượt nó, cần ít hướng dẫn (và rõ ràng hơn) để làm những điều thú vị. Không quá phức tạp, vì chúng vẫn phải dễ hiểu (và có thể thực hiện hiệu quả), nhưng phức tạp hơn.

Vì vậy, hai cách tiếp cận về cơ bản là bất hòa. Ngoài việc cả hai đều thuộc lĩnh vực khoa học máy tính, họ không có nhiều việc phải làm với nhau.


1
Cảm ơn. Nhưng tôi đã tìm thấy " Máy Turing và máy Turing phổ dụng tương tự máy ảo ", có thể gợi ý mối quan hệ của chúng nhưng không có chi tiết.
Tim

4
@Tim Tôi đoán rằng khóa học chỉ lấy máy Turing làm điểm khởi đầu để giới thiệu khái niệm về một máy trừu tượng, sau đó nhanh chóng chuyển sang các máy trừu tượng hữu ích hơn.

4

Mối quan hệ chính là bạn có thể mô phỏng cấu trúc lý thuyết trong vật lý.

Thực tế là vật lý có khả năng cho tất cả mọi thứ mà lý thuyết tạo ra khả năng kiểm tra lý thuyết và phân tích cỗ máy lý thuyết được công nhận là có thể thực hiện được trong thế giới thực.

Vấn đề tạm dừng là một ví dụ hoàn hảo về một thứ gì đó được hiển thị trên máy Turing là không thể giải quyết được, và bằng chứng trên máy Turing, do đó, nó có thể được biết là không thể giải quyết được trên một máy thật tuân thủ luật pháp của máy Turing.

Đó là sự khác biệt giữa tổng kết mọi thứ bằng cách đếm và thực hiện nó bằng cách viết nó ra giấy, nó đã được chứng minh rằng thực tế của việc đếm hoàn thành các quy tắc giống như thực hiện tổng kết trên một tờ giấy. Vì vậy, khi bạn mô phỏng việc đếm vật lý, kết quả của bạn được công nhận là có thể áp dụng cho thế giới thực - do đó bạn biết hai thanh kẹo sẽ có giá bao nhiêu bằng cách mô phỏng tinh thần việc đếm mà không cần phải đếm tiền vật lý để đưa ra kết quả.

Mọi người hiện đang tiến hành phân tích và thử nghiệm một mô hình lý thuyết được gọi là "Máy Turing lượng tử" để xem những phương tiện nào sẽ có sẵn với máy tính lượng tử. Điều hợp lý là mọi người sẽ làm việc với các mô hình này khi phiên bản vật lý của mô hình của họ vừa quá đắt, hiếm, và việc triển khai hiện tại vẫn còn rất thiếu. Các mô hình lý thuyết được sử dụng để chỉ ra những gì chúng ta có thể làm khi triển khai vật lý của chúng ta được cải thiện.


1

Chúng có liên quan gần giống như cách tàu con thoi liên quan đến một quả bóng bay mà bạn phồng lên bằng hơi thở và sau đó buông ra và quan sát bay đi.

Nguyên tắc cơ bản của việc trục xuất một cái gì đó theo một hướng để đẩy một cái gì đó theo hướng ngược lại là có.

Đó là nơi tương tự kết thúc.


1

Tôi thấy các cỗ máy lý thuyết như thu hẹp khoảng cách giữa tính toán thế giới thực và toán học. Một máy Turing đủ mạnh để mô phỏng mọi ngôn ngữ lập trình hoặc kiến ​​trúc trong thế giới thực, đủ đơn giản để dễ dàng mô phỏng, và quan trọng nhất là đủ đơn giản để trở thành chủ đề của lý luận và chứng minh toán học đơn giản.


1

Điều quan trọng cần biết là định nghĩa tính toán không phải là "những điều mà máy tính làm". Tính toán trước máy tính. Máy tính được đặt tên vì chúng được tạo ra để hỗ trợ công việc tính toán chứ không phải vì chúng xác định nó.

Vì vậy, Turing Machine không phải là về cách máy tính hoạt động. Đó là về việc một vấn đề có thể tính toán được hay không - nghĩa là có thể giải quyết được bằng một quá trình logic / toán học chính thức. Nó không nói gì về cách quá trình đó có thể được thực hiện. Nếu có thể tính toán được, con người có thể giải quyết bằng bút chì và giấy, cho đủ thời gian hoặc với máy tính hoặc (đây là điều quan trọng) với bất kỳ hệ thống nào có thể được hiển thị là Turing hoàn chỉnh .

Vì vậy, Turing Machine thực hiện hai điều rất quan trọng:

  1. Cung cấp một bài kiểm tra cho khả năng tính toán của bất kỳ vấn đề / nhiệm vụ.
  2. Cung cấp một bài kiểm tra cho bất kỳ hệ thống nào để hiển thị nếu nó có thể tính toán bất kỳ tác vụ tính toán nào.

Điểm đầu tiên cho phép chúng ta suy nghĩ về các vấn đề mà không bị phân tâm bởi các triển khai trong thế giới thực. Đây là một điều tốt vì phần cứng thực sự thường làm mọi người mất tập trung với các chi tiết không liên quan (như, "điều gì xảy ra nếu chúng ta hết bộ nhớ hoặc không gian lưu trữ?", Vì Turing Machines có tài nguyên vô hạn). Một giải pháp lý thuyết có thể chứng minh có thể được phát triển cho Máy Turing và sau đó tất cả những gì ai đó cần làm là dịch nó thành thứ gì đó sẽ hoạt động trên một kiến ​​trúc nhất định.

Điểm thứ hai cho phép chúng tôi xác minh khả năng của bất kỳ triển khai nào mà không phải chạy nhiều thử nghiệm khác nhau trên đó. Nếu nó có thể mô phỏng Máy Turing, nó có thể làm bất cứ điều gì Máy Turing có thể làm. Vì Turing Machines có thể tính toán bất cứ thứ gì có thể tính toán được, nên nó cũng có thể.

Điều đó có nghĩa là mối quan hệ giữa Turing Machine và bất kỳ kiến ​​trúc máy tính thực tế nào (thậm chí là ảo) chỉ là một điều: chúng có thể tính toán.

Kiến trúc của Von Neumann là một nỗ lực để tạo ra một mẫu thiết kế cho các máy tính điện tử kỹ thuật số có mục đích chung hiệu quả . Công việc của Turing cung cấp bằng chứng về tính hợp lệ của nó


-1

Nếu bạn nghĩ về nó, kiến ​​trúc là những cỗ máy trừu tượng. Họ mô tả cách một cục silicon "nên" hoạt động cẩn thận. Sự khác biệt giữa kiến ​​trúc và máy Turing là vấn đề quy mô hơn là sự thay đổi cơ bản trong cách tiếp cận.

Ưu điểm của máy Turing là có một bộ bằng chứng hữu ích rất dễ thực hiện khi sử dụng máy Turing. Thật đơn giản để chứng minh rằng bất kỳ máy nào đủ mạnh để mô phỏng máy Turing có thể giải quyết mọi vấn đề mà máy Turing có thể (duh). Tuy nhiên, sẽ thú vị hơn khi bạn xác định hàm Computable . Nó chỉ ra rằng có nhiều định nghĩa tương thích của một chức năng tính toán. Nếu bạn có thể xác định tất cả hành vi của mình là các chức năng tính toán, bạn có thể được mô phỏng trong máy Turing.

Vì vậy, giả sử bạn có một kiến ​​trúc hỗ trợ trực tiếp các chương trình kiểu LISP và một kiến ​​trúc khác như x86 mang tính thủ tục hơn. Bạn của bạn tuyên bố "LISP biểu cảm hơn, vì vậy bạn có thể viết chương trình trên máy này mà bạn không bao giờ có thể viết trên x86 của mình." Điều này là tàn bạo để chống lại (đặc biệt là vì bạn có thể không biết đủ LISP). Tuy nhiên, bạn có thể lạm dụng một số máy trừu tượng như máy Turing:

  • Máy LISP của bạn có thể rất lạ mắt, nhưng mọi thứ nó có thể làm đều có thể rút gọn thành phép tính lambda. Bạn của bạn háo hức gật đầu. Tính toán Lambda là một chút của một giáo phái cho các lập trình viên chức năng.
  • Chiếc x86 của tôi có thể rất lạ mắt, nhưng mọi thứ nó có thể làm đều có thể rút gọn thành máy đăng ký. Một lần nữa, không có câu hỏi từ bạn của bạn. Đăng ký là SO pase trong lý thuyết máy tính hiện đại!
  • Bất kỳ máy đăng ký nào cũng có thể được mô hình như một máy Turing mô phỏng máy đăng ký đó. Bây giờ bạn của bạn tự hỏi tại sao bạn lại quay trở lại thời kỳ băng đĩa.
  • Và máy tính lambda của bạn cũng có thể được giảm xuống thành máy Turing. * Bạn của bạn phản đối, nhưng bạn chỉ vào luận điểm của Church-Turing và họ xấu hổ.
  • Do đó, hộp x86 của tôi có thể làm bất cứ điều gì mà máy dựa trên LISP ưa thích của bạn có thể làm!

Tất nhiên, có rất nhiều ví dụ khác. Trò chơi Cuộc sống của Conway đã được chứng minh là Turing hoàn chỉnh, có nghĩa là về mặt lý thuyết nó có thể làm bất cứ điều gì máy tính của bạn có thể làm. Cách dễ nhất để làm điều này là xây dựng một máy Turing trong cuộc sống . Tôi đưa ra điều này bởi vì đây sẽ là một trường hợp của cái mà bạn gọi là một cỗ máy trừu tượng được coi là một kiến ​​trúc theo nghĩa đen! Bạn có thể tưởng tượng yêu cầu về khả năng tính toán trong Cuộc sống sẽ khó đến mức nào nếu không có sự trợ giúp của các mô hình trừu tượng (tôi chắc chắn rằng không phải là mô hình x64, hoàn thành với việc nhìn trộm bộ đệm, chỉ để chứng minh Cuộc sống có thể tính toán được!)


Cuối cùng, sự khác biệt lớn giữa kiến ​​trúc và máy trừu tượng là kiến ​​trúc thường liên quan đến hiệu suất. Kiến trúc muốn biết bạn có thể làm một cái gì đó nhanh như thế nào. Máy trừu tượng có xu hướng hài lòng với chỉ cần biết nếu bạn có thể. Hãy xem xét Công cụ xây dựng phổ quát được phát triển cho các máy trạng thái von Neuman. Nó đủ để chứng minh rằng UC có thể hoạt động, không bao giờ cho rằng các tác giả không bao giờ có đủ sức mạnh tính toán để thực sự nhìn thấy nó.

Các kiến ​​trúc giá phải trả cho việc chứng minh họ có thể làm việc nhanh như thế nào vì thường rất khó để chứng minh rằng họ có thể tính toán mọi thứ . Vì thế, các kiến ​​trúc quay ngược lại và bắt đầu sử dụng các máy trừu tượng.


1
Các ví dụ lý luận đã cho của bạn không đúng về mặt kỹ thuật - nếu bạn nói rằng máy turing có thể làm mọi thứ mà máy đăng ký hoặc x86 mahine có thể, điều đó không có nghĩa là máy x86 có thể làm mọi thứ mà máy đăng ký hoặc máy turing có thể. Như một ví dụ mẫu, bất kỳ máy tự động hữu hạn nào cũng có thể được giảm xuống thành máy Turing nhưng rõ ràng không tương đương với phép tính lambda hoặc LISP. Vấn đề định hướng - nếu bạn muốn nói "hộp x86 của tôi có thể làm bất cứ điều gì mà máy dựa trên LISP ưa thích của bạn có thể làm", thì nó sẽ yêu cầu giảm từ Turing xuống x86, chứ không phải từ x86 sang Turing.
Peteris
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.