2010-03-03 12 views
10

Các tài liệu Psyco nói:Những cạm bẫy có thể xảy ra khi chuyển Psyco sang 64-bit là gì?

Chỉ cần để tham khảo, Psyco không làm việc trên bất kỳ hệ thống 64-bit ở tất cả. Sự kiện này đáng được ghi lại lần nữa, giờ đây Mac OS/X 10.6 mới nhất "Tuyết Leopart" đi kèm với mặc định Python là 64 bit trên máy64 bit. Cách duy nhất để sử dụng Psyco trên OS/X 10.6 bằng cách biên dịch lại Python tùy chỉnh ở chế độ 32 bit.

Nói chung, các chương trình chuyển từ 32 đến 64 bit chỉ thực sự là vấn đề khi mã giả định kích thước nhất định cho loại con trỏ và các vấn đề nhỏ (ish) tương tự khác. Xem xét rằng Psyco không phải là một toàn bộ rất nhiều mã (~ 32K dòng C + ~ 8K dòng Python), làm thế nào cứng nó có thể được? Có ai đã thử điều này và đánh một bức tường? Tôi đã không thực sự có cơ hội để có một cái nhìn tốt tại các nguồn Psyco được nêu ra, vì vậy tôi thực sự đánh giá cao nếu biết tôi đang lãng phí thời gian của tôi nhìn vào ...

Trả lời

3

Vì psyco là một trình biên dịch, nó sẽ cần phải được nhận thức của ngôn ngữ lắp ráp cơ bản để tạo ra mã hữu ích. Điều đó có nghĩa là cần phải biết về 8 thanh ghi mới, mã opcode mới cho mã 64 bit, v.v.

Hơn nữa, để tương tác với mã hiện có, nó sẽ cần sử dụng cùng quy ước gọi là mã 64 bit. Quy ước gọi AMD-64 tương tự như các quy ước cuộc gọi nhanh trong đó một số thông số được truyền trong thanh ghi (trong trường hợp 64 bit rcx, rdx, r8, r9 cho con trỏ và Xmm0-Xmm3 cho điểm động) và phần còn lại là đẩy vào không gian tràn trên ngăn xếp. Không giống như x86, không gian thêm này thường được phân bổ một lần cho tất cả các cuộc gọi có thể. Các công ước IA64 và ngôn ngữ lắp ráp là khác nhau được nêu ra.

Vì vậy, trong ngắn hạn, tôi nghĩ rằng điều này có lẽ không đơn giản như âm thanh.

+0

Không phải trình biên dịch C cho nền tảng 64 bit sẽ đảm nhiệm phần lớn điều này? Có vẻ như có rất ít nội tuyến lắp ráp trong psyco (<5 dòng). –

+0

Bah. Bỏ qua điều đó. Kỹ năng grepping của tôi có thể sử dụng một số đánh bóng, rõ ràng là ... –

1

+1 cho "... khó khăn như thế nào?".

Hãy xem ở đây: http://codespeak.net/svn/psyco/dist/c/i386/iprocessor.c

Tất cả những gì ASM sẽ phải được chuyển, cũng có những giả định trên tất cả các nơi về bộ vi xử lý cơ bản.

Tôi nghĩ thật công bằng khi nói rằng nếu nó tầm thường đến cảng (hoặc không quá khó), thì nó đã được thực hiện rồi.

+0

Đủ công bằng. Tôi muốn biết _why_ đây là một nhiệm vụ hoành tráng như vậy. Tìm kiếm thêm đã chỉ cho tôi các bài đăng danh sách gửi thư mà ngay cả các kỹ sư của Google dường như đã từ bỏ việc chuyển Psyco cho dự án Swallow Swallow. –

+0

PS: Nhận xét "khó có thể" được chắc chắn là lưỡi-trong-má. Tôi hoàn toàn mong đợi có những vấn đề mà tôi đã không hiểu (đó là loại điểm trong việc đăng bài này ở nơi đầu tiên). Nếu không, tôi sẽ thử nó. –

+0

Tôi thấy mình nói "khó khăn như thế nào?" theo cùng một cách, cứ mỗi lần tôi nói chuyện với tiếp thị: P – Seth

4

Christian Tismer, một trong những nhà phát triển Psyco cũng dường như không đồng ý với "làm thế nào cứng nó có thể được" - giả định (trích dẫn từ here):

nhu cầu đến x86-64? Lý do tại sao mà! Nghiêm túc, tôi rất thích làm điều đó, nhưng điều này sẽ khó hơn nhiều so với bất kỳ ai mong đợi. Do cách thức psyco được viết, nó sẽ thực sự là một nửa viết lại để releave nó từ 32-cay đắng của nó. Giả thiết 32 bit hoàn toàn ở mọi nơi. Nó sẽ là thẳng về phía trước, nếu mô hình bộ nhớ là tất cả 64 bit. Nhưng không có nền tảng intel là đơn giản.rất lâu, và nhờ cho tất cả các cá - chris

hum. Nó sẽ tốn ít nhất 3 hoặc 4 tháng làm việc toàn thời gian để làm điều đó, nếu không nhiều hơn. Tôi nghi ngờ rằng tôi có thể nhận được tài trợ cho điều đó.

Nếu bạn muốn biết thêm chi tiết (kiến thức bên trong công ty của Psyco lẽ cần thiết) Tôi đoán bạn luôn có thể cố gắng để hỏi về một trong những danh sách gửi thư Psyco ...

3

Psyco giả định rằng sizeof (int) = = sizeof (void *) một chút trên khắp nơi. Đó là khó khăn hơn nhiều so với chỉ viết xuống 64bit gọi quy ước và lắp ráp. Trên sidenote, pypy có hỗ trợ 64bit jit trong những ngày này.

Chúc mừng, fijal