2012-10-19 41 views
6

Tôi đã biên dịch một exe độc ​​lập MATLAB mà tôi có thể chạy trên bất kỳ máy tính nào đã cài đặt MATLAB Compiler Runtime.cải thiện thời gian khởi động của MATLAB thực thi

Tuy nhiên, bắt đầu EXE mất 20-30 giây!

Làm cách nào để đo thời gian chính xác và quan trọng nhất - làm cách nào để giảm thời gian xuống còn 1-2 giây.

+0

Tôi không nghĩ bạn có thể. Nhưng tôi chắc chắn muốn thấy một câu trả lời khác .. – angainor

+0

Thời gian khởi động là (theo kinh nghiệm của tôi) liên quan đến việc bắt đầu MCR. Tôi đã xem xét vấn đề này trước đây và không bao giờ đưa ra một cách để tăng tốc độ nó (thực sự gây phiền nhiễu tôi đồng ý). Tuy nhiên, một điểm lưu ý: Nếu bạn gọi một số exe độc ​​lập trong một hàng, thời gian khởi động là (một lần nữa trong kinh nghiệm của tôi) phải ít hơn từ cuộc gọi thứ hai trở đi. Có lẽ một cái gì đó để làm với máy tính được thông minh, đủ để giữ một MCR khởi tạo trong RAM. –

+0

Bạn có nghĩa là nó chậm lần đầu tiên sau khi triển khai/khởi động lại hay mỗi lần? –

Trả lời

5

này được đưa ra khỏi Yair Altman's blog:

Một splash ứng dụng wrapper có thể làm giảm bớt nhiều nỗi đau của sự khởi động chậm triển khai (biên soạn) ứng dụng Matlab. A Splash window solution can be found here. Mặc dù trình bao bọc giật gân này thực sự hữu ích, nhưng cũng có thể đạt được tốc độ thực tế của việc khởi động ứng dụng đã biên dịch bằng biến môi trường MCR_CACHE_ROOT.

Thông thường, MCR và tệp thực thi độc lập được giải nén khi mọi lần khởi động trong thư mục tạm thời của người dùng và bị xóa khi người dùng đăng xuất. Rõ ràng, khi biến môi trường MCR_CACHE_ROOT được thiết lập, các tệp này chỉ được giải nén một lần và được giữ để sử dụng lại sau này. Nếu báo cáo này thực sự đúng, điều này có thể tăng tốc đáng kể thời gian khởi động của một ứng dụng được biên dịch trong các lời gọi tiếp theo.

Trên Linux:

export MCR_CACHE_ROOT=/tmp/mcr_cache_root_$USER # local to host 
mkdir -p @MCR_CACHE_ROOT 
./myExecutable 

Trên Windows:

REM set MCR_CACHE_ROOT=%TEMP% 
set MCR_CACHE_ROOT="C:\Documents and Settings\Yair\Matlab Cache\" 
myExecutable.exe 

Ngoài ra còn có nhiều cách để thiết lập biến env này vĩnh viễn trên Windows nếu cần thiết ...

Thiết MCR_CACHE_ROOT là đặc biệt quan trọng khi chạy thực thi từ một vị trí mạng (NFS), vì việc giải nén vào một vị trí mạng có thể khá chậm. Nếu thực thi được chạy song song trên các máy khác nhau (ví dụ, một cụm máy tính đang chạy một chương trình song song), thì điều này thậm chí có thể là cause lock-outs khi các cụm khác nhau cố truy cập cùng một vị trí mạng. Trong cả hai trường hợp, giải pháp là đặt MCR_CACHE_ROOT thành thư mục cục bộ (ví dụ:/tmp hoặc% TEMP%). Nếu bạn có kế hoạch sử dụng lại các tệp được trích xuất một lần nữa, thì có lẽ bạn không nên xóa các tệp được trích xuất nhưng sử dụng lại chúng. Nếu không, chỉ cần xóa thư mục tạm thời sau khi tệp thực thi kết thúc. Trong ví dụ sau, $ RANDOM là một chức năng bash mà trả về một số ngẫu nhiên:

export MCR_CACHE_ROOT=/tmp/mcr$RANDOM 
./matlab_executable 
rm -rf $MCR_CACHE_ROOT 

Thiết MCR_CACHE_ROOT cũng có thể được sử dụng để giải quyết tắc nghẽn hiệu suất khác trong các ứng dụng được triển khai, như được giải thích trong một MathWorks technical solution và một bài báo có liên quan here.

Trong một vấn đề liên quan, tệp thực thi Matlab đã biên dịch có thể không thành công với Không thể truy cập lỗi bộ nhớ cache thành phần MCR, khi Matlab không thể ghi vào thư mục bộ nhớ cache MCR do thiếu quyền hạn. Điều này có thể tránh được bằng cách đặt MCR_CACHE_ROOT thành a non-existent directory hoặc vào thư mục có quyền truy cập chung (/ tmp hoặc% TEMP% thường là các thư mục có thể ghi) - xem các bài đăng có liên quan herehere.

0

Nếu bạn đang sử dụng deploytool để biên dịch mã của mình, trong Project - Settings-Toolboxes trên đường dẫn, hãy bỏ chọn bất kỳ hộp công cụ nào không cần thiết bởi tệp thực thi của bạn. Gần đây tôi đã có vấn đề này và các bước trên cắt kích thước tập tin thực thi trong một nửa và giảm đáng kể thời gian bắt đầu của thực thi.

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