2010-04-06 20 views
44

Theo trò chơi chuẩn ngôn ngữ máy tính, triển khai LuaJIT seems to beat every other JIT-ed dynamic language (V8, Tracemonkey, PLT Scheme, Erlang HIPE) theo số thứ tự độ lớn.LuaJIT có thực sự nhanh hơn mọi ngôn ngữ động JIT-ed khác không?

Tôi biết rằng các điểm chuẩn này không đại diện (như họ nói: "Triển khai ngôn ngữ lập trình nào có chương trình điểm chuẩn nhanh nhất?"), Nhưng điều này vẫn thực sự ấn tượng.

Trong thực tế, nó thực sự là trường hợp? Ai đó đã thử nghiệm Lua thực hiện?

+2

>> Tôi biết rằng các điểm chuẩn này không phải là đại diện << Bạn có? Lời nhắc nhở là họ không tuyên bố đại diện cho mọi thứ bạn có thể muốn làm. Đó là vào bạn để hiểu làm thế nào những chương trình nhỏ giống như (hoặc không thích) các chương trình bạn viết. – igouy

+4

@igouy: Nếu anh ta nghĩ rằng điểm chuẩn là đại diện, anh ta sẽ không hỏi câu hỏi này. Câu hỏi đặt ra là yêu cầu corroboration của những kết quả này. – Mud

Trả lời

30

Có một cuộc thảo luận tốt tại Lambda the Ultimate. LuaJIT rất tốt.

Nhiều người đã báo cáo các tăng tốc ấn tượng trên lua-l (danh sách gửi thư lua). Các tăng tốc là ấn tượng nhất đối với mã Lua thuần túy; trình biên dịch dấu vết không hiệu quả khi có nhiều cuộc gọi đến các hàm C trong các mô-đun thư viện có thể nạp được.

6

Tôi đã thực hiện một thử nghiệm với bài học ở đây: http://www.sampalib.org/luajit2.0_tunning.html Một số dữ liệu không còn hợp lệ nữa (maxmcode = 1024 là đủ), nhưng luajit mang lại một cải tiến mạnh mẽ trên 600 dòng mã thuần Lua script (không có C gọi để đạt được sự hoàn hảo ...) không phải là ứng dụng có quy mô lớn cũng như trường hợp sử dụng được nhúng nhưng nhiều hơn so với điểm chuẩn.

16

Trong trường hợp của tôi (phát triển mẫu thử nghiệm trò chơi), tôi không quan sát thấy cải thiện hiệu suất nào cả. Tôi sử dụng lua để nhúng, vì vậy có rất nhiều cuộc gọi đến các hàm thư viện C++. Mặc dù vòng lặp chính nằm trong một kịch bản lệnh lua và tất cả các logic quan trọng được thực hiện trong lua, hiệu năng tổng thể được xác định bằng cách hiển thị các công cụ và các công cụ vật lý được thực hiện trong C++. Lua ban đầu đã đủ nhanh cho các ứng dụng như vậy.

+0

Tôi đã có trải nghiệm tương tự. Có, luajit nhanh hơn nhiều cho lua thuần túy, nhưng nó sẽ không tăng tốc các cuộc gọi của bạn tới C. Tôi đã sử dụng luabind để gói (có lẽ là một ý tưởng tồi), và cuối cùng tôi đã dành nhiều thời gian hơn trong các hàm gọi đối tượng hơn trong các hàm lua của tôi . – cib

+16

Nếu bạn sử dụng giao diện LuaJIT ffi để gọi các hàm C, chúng sẽ được trình biên dịch jit biên dịch một cách tự nhiên, và điều này sẽ nhanh hơn nhiều. Tôi đã gọi các cuộc gọi hệ thống Linux ở cùng tốc độ với C. –

+0

Đối với tbear và cib vấn đề không phải là chi phí của việc gọi vào C, mà là tất cả thời gian đã được chi tiêu bên trong các hàm C. Tất nhiên trong trường hợp đó Lua không phải là một phần của nút cổ chai và tăng tốc nó sẽ mang lại không cải thiện. – Eloff

-1

Hiệu suất của JIT phụ thuộc vào hai điều: hiệu suất của ngôn ngữ kịch bản gốc và hiệu suất của trình biên dịch.

Trình biên dịch là một kỹ thuật khá trưởng thành và hầu hết trình biên dịch JIT có hiệu suất tương đương. Tuy nhiên, lua chính nó, tức là lua-without-JIT, có lẽ là một trong những ngôn ngữ kịch bản nhanh nhất.

lua nhanh hơn Java-without-JIT. lua nhanh hơn Javascript-without-JIT. lua nhanh hơn hầu hết các tập lệnh-ngôn ngữ-không-JIT.

vậy,

lua-JIT là nhanh hơn so với Java-với-JIT (Java nắng), lua-JIT là nhanh hơn so với động cơ V8 (javascript-với-JIT), vv ...

+5

Hầu hết các trình biên dịch JIT không có hiệu suất tương đương. Lua cho hầu hết các phần vay chính nó tốt cho thông dịch viên và hiệu suất JIT, nhưng đây không phải là yếu tố quyết định rằng nó được thực hiện để được. LuaJIT không phải là 'nhanh hơn' so với Sun JVM, mặc dù nó có thể so sánh được. Ngoài ra thông dịch viên của LuaJIT hoàn toàn khác với PUC Lua. – jsimmons