2013-04-12 37 views
22

Tôi đã chuyển đổi chương trình Matlab thành ứng dụng dựa trên Bảng điều khiển bằng cách sử dụng deploytool trong Matlab. Tệp Matlab .m mất khoảng 2 giây để thực thi, nhưng sau khi tôi chuyển đổi nó thành tệp thi hành và được gọi là .exe, mất 45 giây để thực thi quá dài.Matlab thực thi quá chậm

Tôi muốn tích hợp chương trình Matlab với PHP. Có cách nào khác hiệu quả và nhanh chóng để thực hiện việc này không? Trong dự án của tôi, thời gian thực sự là một yếu tố lớn (không phải là thời gian phát triển mà là thời gian thực hiện của ứng dụng). Vậy có phương pháp nào mất ít thời gian hơn không?

Tôi thấy trên Internet, chúng tôi có thể viết các phần mở rộng PHP để gọi Matlab. Phương thức này có nhanh hay giống như gọi tệp .exe? Matlab coder có giúp gì cho quá trình này không? Nếu có bất kỳ lựa chọn thay thế nào, vui lòng đề cập đến nó.

+0

Một điều bạn có thể muốn làm là theo dõi thời gian tính toán thực tế. Ít nhất bạn có thể xác định liệu cuộc gọi có chậm hơn hay chính tính toán. –

+0

Tôi có thể theo dõi điều đó bằng cách nào? Tôi đã sử dụng thời gian chạy nhưng nó chỉ cho tổng thời gian. – user1583647

+0

tập tin matlab .m chỉ mất 2 giây để thực thi nhưng exe mất như tôi đề cập đến 45 giây vì vậy nó là cuộc gọi đó là chậm? – user1583647

Trả lời

15

Một MATLAB biên soạn .exe sẽ bị ảnh hưởng từ trên cao ở lần đầu tiên bạn chạy nó bởi vì nó là khởi động MCR: Why does my application compiled with the MATLAB Compiler 4.1 take a long time to start up?

Trừ khi bạn log off hoặc khởi động lại hệ điều hành của bạn, MCR sẽ vẫn được nạp sẵn. Đọc hữu ích khác: Speeding up compiled apps startup.

"Why does my stand-alone created using the MATLAB Compiler take longer to start the first time?" cũng báo cáo rằng các lần chạy liên tiếp phải nhanh hơn, nhưng nếu bạn chạy lại sau, bạn sẽ phải tải lại quá trình trong bộ nhớ.

Bạn có thể đính kèm mã của mình trong phạm vi tic toc, triển khai và kiểm tra thời gian thực hiện, so với chi phí khởi động.

Cách thay thế để tăng tốc .exe sẽ là gọi MATLAB bằng PHP. Nếu bạn giữ phiên MATLAB mở bạn chạy vào chi phí một lần. Bạn có thể khởi chạy MATLAB khi khởi động, do đó tránh phải chịu chi phí cao nhất trong suốt cuộc gọi với PHP.

Để biết thêm thông tin, hãy đọc Calling MATLAB from PHP và ghi nhớ rằng bạn không muốn sử dụng exit trừ khi cần thiết.

+0

Cách thực hành tốt nhất để viết các ứng dụng được biên dịch là phát triển chúng để chúng có thể chạy mà không cần khởi động lại thường xuyên. Tức là, bạn có thể thử thiết kế ứng dụng của mình để ứng dụng không thoát trừ khi cần thiết. Bằng cách này MCR sẽ không cần phải được khởi tạo thường xuyên. Nhưng làm thế nào tôi có thể đạt được điều này? – user1583647

+5

Trừ khi bạn đăng xuất hoặc khởi động lại hệ điều hành, MCR sẽ vẫn được tải sẵn. Đọc hữu ích khác: [Tăng tốc các ứng dụng biên dịch khởi động] (http://undocumentedmatlab.com/blog/speeding-up-compiled-apps-startup/) – Oleg

+0

Tôi đã thử thực thi tệp exe liên tục nhưng không thay đổi về thời gian – user1583647

7

Gọi một tập tin thực thi được tạo ra với trình biên dịch MATLAB sẽ phải chịu một chi phí liên quan đến việc gọi chương trình trong MATLAB trực tiếp, vì nó cần phải bắt đầu MCR. Đây sẽ là lần đầu tiên bạn bắt đầu nó, nhưng vẫn sẽ có một chi phí ngay cả sau lần đầu tiên.

Nếu bạn có quyền truy cập không chỉ vào trình biên dịch MATLAB, mà còn là một trong những sản phẩm Builder (Builder cho .NET hoặc - có lẽ tốt hơn vì bạn đang sử dụng PHP - Builder cho Java). điều này.

Sử dụng các sản phẩm Trình tạo, bạn có thể tạo một thành phần độc lập (hoặc là một hội đồng .NET hoặc một Java .jar). Sau đó bạn có thể tạo một ứng dụng .NET hoặc Java sẽ chạy, khởi tạo thành phần được MATLAB tạo của bạn - khởi động MCR - và sau đó ngồi đó và chờ một cuộc gọi từ PHP của bạn. Mỗi cuộc gọi sau đó sẽ không bị phí khởi động MCR ở tất cả, và chỉ nên có một chi phí nhỏ hơn nhiều từ cuộc gọi từ PHP đến .NET/Java.

+0

Cảm ơn Sam vì câu trả lời. Có, tôi cũng đã thử điều này. Nhưng chúng ta có thể chuyển đổi tập tin .m sang tập tin mex sẽ quá trình này nhanh hơn hay không? Nếu bạn có bất kỳ ý tưởng nào về việc chuyển đổi từ .m sang tập tin mex, vui lòng đề nghị. – user1583647

+0

Xem câu trả lời của tôi cho câu hỏi khác của bạn. –

+0

Sẽ loại trừ một số hộp công cụ trong khi tạo ra một. Net tốc độ lên quá trình abit? Tôi đã thực hiện một giao diện điều khiển dựa trên ứng dụng C# và được gọi là exe từ php bất kỳ phương pháp khác để làm gì? – user1583647

1

Như những người khác đã nói, khi bạn gọi các tệp thi hành, có một chi phí thực sự lớn (MATLAB) khi tệp thực thi được tải. Giải pháp? Tải nó chỉ một lần. Làm thế nào để làm nó? Nó phức tạp và phụ thuộc vào nền tảng.

Tôi nghĩ rằng cách di động nhất để làm điều gì đó giống như là tạo một máy chủ trong MATLAB (tôi biết điều này là có thể, nhưng tôi chưa bao giờ thử). Vì vậy, khi bạn cần sử dụng nó, bạn chỉ cần kết nối với nó và gửi các đối số.

Hãy xem này: HTTP server in matlab và điều này: http://blogs.mathworks.com/loren/2011/05/27/transferring-data-between-two-computers-using-matlab/