2009-04-28 25 views
6

Tôi không chắc mình có hiểu đúng không: mã chạy/biên dịch hệ điều hành 64 bit có nhanh hơn hệ điều hành 32 bit trên cùng một hệ thống không?Có lợi thế nào để phát triển trên hệ điều hành 64 bit không?

Chúng tôi đang sử dụng hệ điều hành 64 bit nơi tôi và dường như chỉ gây ra sự cố tương thích với phần mềm cũ và độc quyền. (Chúng tôi đang chạy Ubuntu 9.04 Jaunty amd64)

Trả lời

18

Tôi sẽ giới hạn câu trả lời này thành x86-32 (IA-32) so với x86-64 (AMD64), vì tôi tin rằng đó là câu hỏi bạn đang thực sự hỏi.

Ở cấp bộ xử lý, có một số lợi thế. Đầu tiên và rõ ràng nhất là việc mở rộng bộ nhớ ảo cho mỗi quá trình đến phạm vi rộng hơn 48 bit. (64 được cho phép trong kiến ​​trúc nhưng không bắt buộc, nếu bộ nhớ phục vụ.) Điều đó cho phép các ứng dụng sử dụng nhiều bộ nhớ của hệ thống hơn, cũng như mở rộng nhiều không gian cho những thứ như các tệp ánh xạ bộ nhớ hoạt động trên bộ nhớ ảo không được liên kết với bộ nhớ thực. Nó cũng mở ra rất nhiều không gian cho các hệ điều hành trong câu hỏi để làm việc, vì nó không phải chia sẻ giới hạn 4 GB của bạn cho dữ liệu của nó. Tóm lại, các ứng dụng và hệ điều hành có thể sử dụng tốt hơn các tài nguyên máy của bạn.

Ngoài ra, kiến ​​trúc AMD64 giải quyết một trong những vấn đề lớn nhất của IA-32, đó là việc thiếu đăng ký hoàn toàn. Trong thực tế nó tăng gấp đôi các thanh ghi có sẵn, đó là một chiến thắng lớn cho một số loại mã. (Trên thực tế nó là một chiến thắng cho hầu như bất kỳ mã, nhưng một số ứng dụng bị chi phí bộ nhớ tăng lên của 64 bit và nó evens ra.)

Về phía Windows, MS đã lấy nó như một cơ hội để phá vỡ một bó toàn bộ các vấn đề về tính tương thích lịch sử. Nó không phải là một break sạch từ thế giới cũ, nhưng đó là một sự khởi đầu. Tôi không tin rằng Linux bị những vấn đề tương tự để bắt đầu, và tôi không có nhiều quan điểm để cung cấp trên lợi thế 64 bit của họ.

1

Nó sẽ tăng tốc biên dịch nếu quá trình biên dịch của bạn bị ràng buộc bởi bộ nhớ và bạn sử dụng hệ điều hành 64 bit để tăng dung lượng bộ nhớ có thể sử dụng được bởi hệ thống của bạn.

6

(Như các nhà bình luận lưu ý, câu trả lời này là hơi chung chung, một số trong những điểm không áp dụng cho intel/amd chip.)

Câu trả lời là: nó thay đổi, đối với một vài lý do:

  • Với hướng dẫn chiều rộng lớn hơn, bạn sẽ có được sự thể hiện rõ hơn (hoặc nhiều hướng dẫn hoặc dung lượng lớn hơn để mã hóa dữ liệu vào các hướng dẫn đó một cách trực tiếp), điều này có nghĩa là mà nói chung là một chiến thắng: vì vậy ++ 64bit ở đây.

  • Nhưng đôi khi hướng dẫn lớn hơn có thể mất nhiều chu kỳ hơn để giải mã và thực thi, vì chúng có thể phức tạp hơn. Vì vậy, có thể --64bit ở đây.

  • Ngoài ra, bạn cần chuyển các hướng dẫn này đến và đi từ CPU: hướng dẫn 64 bit lớn gấp hai lần các hướng dẫn 32 bit, có nghĩa là có nhiều lưu lượng truy cập đến và từ bộ nhớ và bộ đệm. CPU được cấu trúc để cải thiện rất nhiều chi phí này, nhưng nó là một chút - 64bit ở đây.

  • Đăng ký khác thường có sẵn trong bộ hướng dẫn rộng hơn, điều này khiến lưu lượng dữ liệu ít hơn đến và đi từ ngăn xếp hoặc bộ nhớ. Vì vậy, ++ 64bit ở đây.

  • Và như mọi người chắc chắn sẽ đề cập đến, bạn có khả năng giải quyết nhiều bộ nhớ hơn.

  • (Gần như quên điều này) kích thước gốc "dài" hoặc "int" có thể tăng lên, tùy thuộc vào kiến ​​trúc, có nghĩa là cấu trúc dữ liệu dựa trên những thứ này trở nên lớn hơn. Lớn hơn = nhiều bộ nhớ hơn để di chuyển xung quanh, điều đó có nghĩa là có thể chờ đợi nhiều hơn khi di chuyển dữ liệu: --64bit nếu bạn không cẩn thận.

Tùy thuộc vào kiến ​​trúc của bạn, rất nhiều mối quan tâm khác cũng có thể áp dụng. Bạn có thể yên tâm rằng các nhà cung cấp bộ xử lý và trình biên dịch đang làm việc các butts của họ để giảm "-" ở trên và tăng "++" s.

+3

Tất nhiên không có điểm nào trong ba điểm đầu tiên ảnh hưởng đến các hệ thống dựa trên x86, vì x86 cung cấp mã hóa lệnh có độ dài thay đổi đầy đủ, với hướng dẫn từ 1 đến 17 byte. Thậm chí có thể còn hơn 17 ngày nay. – Promit

11

Theo nguyên tắc chung, việc phát triển hoặc sử dụng - hệ điều hành 64 bit, trong bất kỳ ngữ cảnh nào, sẽ là chậm hơn so với cùng một hệ điều hành 32 bit. Bởi vì tất cả các con trỏ đột nhiên lớn gấp đôi, bạn có nhiều khả năng thổi bộ nhớ cache và có thể ít dữ liệu hơn trong RAM. Điều đó làm chậm ứng dụng của bạn đáng kể. Bạn thường chỉ sử dụng hệ thống 64 bit khi ứng dụng của bạn cần phải giải quyết đồng thời hơn 2 đến 3 GB dữ liệu - một điều rất phổ biến trong tính toán khoa học và một số tình huống cơ sở dữ liệu, nhưng nếu không thì rất hiếm. Đây là lý do tại sao Apple không ủng hộ việc biên dịch vô điều kiện các ứng dụng PowerPC ở chế độ 64 bit, ví dụ: chi phí do thiếu bộ nhớ cache và thiếu bộ nhớ đủ cao để chạy 64 bit chỉ có ý nghĩa khi bạn thực sự có thể tận dụng Không gian 64 bit.

Nhưng x86 v. AMD64, đó là những gì bạn thực sự yêu cầu (vì bạn đang thảo luận về Ubuntu), là một con thú rất đặc biệt. AMD64 không chỉ mở rộng tất cả các con trỏ tới 64-bit; nó sửa chữa nhiều, nhiều thiếu sót trong kiến ​​trúc x86, tăng gấp đôi số GPR, đơn giản hóa các hướng dẫn để thân thiện hơn với các thiết kế CPU hiện đại và hơn thế nữa. Bởi vì điều này, trên nền tảng AMD64 chỉ, bạn sẽ thường xuyên thấy hiệu suất tăng đáng kể bằng cách chuyển sang 64 bit.

Có một lĩnh vực khác, trong phát triển phần mềm, có ý nghĩa khi truy cập 64-bit: bạn cần chạy nhiều máy ảo. Chạy một vài máy ảo có thể dễ dàng thổi bạn qua hàng rào bộ nhớ 3 GB của hệ điều hành, khiến việc sử dụng chúng rất đau đớn. (Nó sẽ hoạt động do một công nghệ gọi là PAE, hoặc Paged Addressing Extensions, mà Intel đã phát minh ra để thu hẹp khoảng cách giữa hệ thống 32 bit và hệ thống 64 bit, nhưng kết quả là chậm, đau đớn để làm việc với tư cách là nhà phát triển chứ không phải được hỗ trợ rất tốt trên Windows.) Đi tới một hệ điều hành 64 bit có thể mang lại nhiều lợi ích to lớn.

+0

Điều này phản ánh những gì tôi đã nghe từ những người đo lường hiệu suất cho cuộc sống. Kích thước bổ sung của con trỏ và số lần truy cập bộ nhớ cache nhỏ hơn thực sự ảnh hưởng đến hiệu suất. Có một hit nhỏ nhưng đáng chú ý chạy các ứng dụng 64 bit. –

+3

Ranh giới là 2-3 GB tùy thuộc vào hệ điều hành, chứ không phải 4. Hãy nhớ rằng, tất cả các hệ điều hành chính đều lấy một lát 1 hoặc 2 GB trên đầu không gian ảo của bạn để sử dụng riêng. Đối với PowerPC, kiến ​​trúc Power có một số kỳ quặc kỳ lạ ở chế độ 64 bit giúp bạn chạy nhanh hơn ở chế độ 32 bit. Nó không chỉ là về kích thước con trỏ. – Promit

+0

@Promit Bạn tất nhiên là chính xác về ranh giới; Tôi đã sửa chúng. Re. PowerPC khó khăn, nhiều như tôi đồng ý kiến ​​trúc đã "quirks", tình hình tương tự như trên SPARC v. UltraSPARC và 32-bit MIPS v. 64-bit MIPS. Địa ngục, đi theo một cách khác, đó là lý do tại sao ARM có THUMB, MIPS có MIPS16e, và Hitachi SuperH thực sự đáng ngạc nhiên: thổi bộ nhớ cache thực sự làm tổn thương. –

3

Tôi có cơ sở dữ liệu 5GByte này cần chuyển đổi. Trên hệ thống 64 bit, tôi chỉ cần đặt tất cả dữ liệu vào bộ sưu tập. Trong hệ thống 32 bit, tôi phải suy nghĩ về thứ tự để tải và chuyển đổi. Vấn đề không phải là thời gian chạy, nó là thời gian kỹ thuật. Chuyển sang 64 bit giúp tiết kiệm thời gian phát triển trong vài tuần.

Các vấn đề tương thích: không có lỗi, đó là một tính năng. Nó cho bạn thấy ai đã viết phần mềm sạch.

2

Ngoài ra còn có một số lợi thế bảo mật khi sử dụng hệ điều hành 64 bit. Đã có một số khai thác tràn bộ đệm phá vỡ ngẫu nhiên bố trí không gian địa chỉ bằng sức mạnh vũ phu. Trên hệ điều hành 64 bit, có quá nhiều địa chỉ để loại tấn công này thành công.

1

Tôi mong đợi nó sẽ hơi chậm hơn, tôi đã có kinh nghiệm đó với FC10. Tôi không có lý do thực sự, nhưng nó chắc chắn không phải là vấn đề sizeof (con trỏ). (*)

Linh cảm của riêng tôi là nó chỉ đơn giản là vấn đề trình điều khiển ít được tối ưu hóa hoặc chipset được tinh chỉnh.

Ngoài ra NTFS-3G là hài hước dưới 64-bit, trong khi nó làm việc dưới 32-bit (giống distro, cùng kernel cùng phân vùng, nó chỉ là "treo" trong một số trường hợp)

(*) hầu hết các biên dịch là đĩa bị ràng buộc, không phải CPU bị ràng buộc. Hơn nữa có những cải tiến khác trong kiến ​​trúc x86_64 mà hủy bỏ thực tế đó (tốt hơn PIC, nhiều regs, mặc định SSE2, 686 cmov mặc định trên). Trừ khi ứng dụng của bạn không làm gì ngoài việc di chuyển các khối nhỏ xung quanh một cách ngẫu nhiên.

Các vấn đề liên quan