2012-06-07 44 views
39

Một số nền tảng cho những người đọc sách này trong tương lai (trong trường hợp nó không bị khóa). Tôi có xu hướng làm chương trình của tôi bằng một ngôn ngữ cấp cao để hiểu vấn đề đầu tiên. Sau khi bao gồm tất cả các trường hợp góc có thể, tôi tiến hành dịch mã sang C++ (hoặc C).Matlab Coder vs mã hóa tay?

Hầu hết mã tôi viết đều có toán học trong đó và vì vậy MATLAB là ngôn ngữ tôi sử dụng (thay thế cho tôi là Python). Dù sao, tôi sau đó dịch mã từ MATLAB sang C++ bằng tay.

Có ai biết nếu có bất kỳ lợi thế/bất lợi nào khi sử dụng MATLAB Coder không? Đó là một sản phẩm mới và rất tốn kém nhưng ngoài thời gian nó tiết kiệm được trong bản dịch thì có lợi ích nào khác không?

+7

Tại sao bạn không tải xuống bản dùng thử MATLAB Coder, xem cách nó hoạt động cho bạn và so sánh kết quả với công việc trước đó bạn đã làm? – mpontes

+0

Làm thế nào về việc sử dụng một ngôn ngữ cấp cao là tốt đẹp để làm việc trong, nhưng vẫn biên dịch để nhanh mã nguồn gốc, ngay lập tức? Haskell khá tốt. C++ 11 cũng không quá tệ nữa. – leftaroundabout

+0

Đúng, nhưng Matlab có rất nhiều chức năng được xây dựng rất thuận tiện. – s5s

Trả lời

40

Disclaimer

Đây là một bài rất khăng khăng dựa trên expirience của tôi cho một dự án cụ thể. Tôi đã không sử dụng phiên bản mới nhất của bộ mã hóa, nhưng tôi đã hết hạn với sản phẩm tương đương (bộ mã nhúng) để chuyển mã MATLAB thành C++ đã được đưa vào sản phẩm Real Time Workshop cũ. Những nhận xét này vẫn nên áp dụng. Số dặm của bạn có thể thay đổi.

lợi ích sớm ...

Trong trường hợp của tôi, các coder nhúng được sử dụng để thực hiện một khối xử lý phù hợp với thành phần của một ứng dụng âm thanh lớn hơn. Khối xử lý có công việc xử lý một luồng liên tục các bộ đệm mẫu trong thời gian thực. Tôi đã thực hiện thuật toán gốc trong MATLAB, và công cụ chuyển đổi đã làm cho nó khá đơn giản để chuyển đổi một nguyên mẫu ban đầu thành thứ gì đó có thể được biên dịch thành mã gốc và được sử dụng trong một ứng dụng thời gian thực.Cũng tốt khi cho rằng mã được chuyển đổi hoạt động giống hệt với bản gốc mà không có khả năng xảy ra lỗi của con người trong quá trình chuyển đổi (giả sử khả năng siêu phàm của các kỹ sư Mahworks).

Những lợi ích đã kết thúc sau khi giai đoạn tạo mẫu từ rất sớm này ...

Vấn đề 1: lãng phí thời gian interfacing

Như thuật toán lớn về độ phức tạp, tôi bắt đầu lo lắng ngày càng nhiều về cách mã hoá MATLAB giao diện cho chức năng để sau khi chuyển đổi, nó sẽ được dễ dàng để giao diện với khung C + + (tôi muốn theo dõi các trạng thái nội bộ trong thời gian thực). Điều này cuối cùng bắt đầu sử dụng nhiều thời gian như bản thân phát triển thuật toán thực tế, do đó đánh bại mục đích sử dụng một công cụ như vậy. Tôi có thể chia nhỏ thuật toán thành các phần nhỏ hơn và sau đó dán chúng lại với nhau bằng cách sử dụng C++, nhưng sau đó tôi sẽ mất khả năng để có một so sánh trực tiếp Matlab chỉ của thuật toán hoàn chỉnh.

Vấn đề 2: Không phải tất cả các chức năng được hỗ trợ hoặc hỗ trợ đầy đủ

Các coder hỗ trợ một subset of the Matlab language. Trong một số trường hợp, các chức năng được hỗ trợ bị giới hạn theo một cách nào đó. Ví dụ, trong ứng dụng mà tôi đã làm việc trên, tôi muốn có thể sửa đổi các đặc tính của một bộ lọc trong thời gian thực. Tôi không thể sử dụng các chức năng tạo mẫu bộ lọc chuẩn Matlab, bởi vì công cụ tạo mã sẽ không cho phép các cuộc gọi đến chức năng tạo mẫu bộ lọc với các đối số biến. Tôi đã dành thời gian với một cuốn sách DSP phát triển triển khai của riêng tôi, mặc dù chúng tôi có một giấy phép hộp công cụ xử lý tín hiệu.

Vấn đề 3: Mã Tự động tạo ra là không hiệu quả

Tôi đã thất vọng với các vấn đề giao diện và mã hoá các thuật toán bằng tay trong C++. Đối với ứng dụng của tôi, đã có hiệu suất tăng 75% trong lợi của mã viết tay trên mã được chuyển đổi. Sự khác biệt về hiệu suất sẽ rất khác nhau tùy thuộc vào ứng dụng của bạn, có thể là phiên bản của công cụ chuyển đổi được sử dụng và sự yêu thích của bạn đối với hồ sơ của bạn. Công cụ chuyển đổi chính nó là một sản phẩm phức tạp có nhiều cài đặt để tìm hiểu. Cố gắng tìm ra cách chỉnh sửa cài đặt và mã MATLAB để cải thiện hiệu suất sử dụng nhiều thời gian hơn có thể được sử dụng mã hóa tay.

Tôi đã không được sử dụng các công cụ chuyển đổi từ ...

bây giờ tôi muốn có một Test- nhiều cách tiếp cận hỗ trợ. Tôi mã một nguyên mẫu trong Matlab và tinh chỉnh cho đến khi tôi chắc chắn rằng nó hoạt động như tôi muốn nó quá. Sau đó tôi nghĩ trong C++ và giải mã thuật toán theo cách tự nhiên hơn với ngôn ngữ đó. Sau đó tôi tạo một tệp mex có giao diện với mã C++ của tôi để tôi có thể kiểm tra nó dựa vào tương đương MATLAB đáng tin cậy của tôi. Đối với vấn đề không gian mà tôi làm việc, đây là cách hiệu quả hơn (con người và máy móc) để hoàn thành công việc.

Tóm lại, đây chỉ là ý kiến ​​của một người dùng. Có lẽ (như suggesred trong một bình luận về bài viết gốc của bạn), bạn nên đăng ký dùng thử để xem cách bạn hòa hợp với nhau. Tuy nhiên, nếu bạn là một chút của một C++ ninja, thử nghiệm bằng cách xây dựng các tập tin mex không đòi hỏi một giấy phép đắt tiền cho một sản phẩm tiện ích và nó sẽ làm cho bạn một nhà phát triển tốt hơn.

+1

"Thử nghiệm hỗ trợ" như bạn gọi nó là thực hành tiêu chuẩn. Giữ mã MATLAB ban đầu để kiểm tra không hồi quy và bạn có một quy trình làm việc tốt và hiệu quả. –

2

Nếu bạn viết dễ dàng hơn trong MATLAB, thì giá trị sẽ phụ thuộc nhiều vào số tiền bạn đánh giá thời gian của bạn.

So sánh MATLAB và C hoặc C++ để thực hiện rất phức tạp. C hoặc C++ sẽ nhanh hơn trong hầu hết các trường hợp, nhưng trong một số ứng dụng đại số tuyến tính, có thể MATLAB sẽ thực hiện nhanh nhất. Tôi nhớ một giáo sư tuyên bố rằng ông đã có các ứng dụng FORTRAN chạy chậm hơn so với tương đương trong MATLAB. Có rất nhiều nghiên cứu điển hình về điều này - tôi khuyên bạn nên xem xét các nghiên cứu khác nhau so sánh tốc độ tăng lên trong google và so sánh chúng với những gì bạn đang làm để đưa ra quyết định của mình.

+0

Tôi không nghĩ anh ta hỏi liệu nó có đáng để chuyển đổi từ MATLAB sang C nhưng cách tiếp cận tốt nhất là gì. – bakalolo

0

Ưu điểm:

  1. Rất nhiều chức năng toán học phức tạp có sẵn.
  2. Đối với chương trình toán học hardcore liên quan.

Nhược điểm:

  1. Nó không phổ biến so với một ngôn ngữ hiện đại như C#, java, python. bạn đặt tên cho nó.
  2. Vì bạn mã MATLAB, bạn có xu hướng tập trung chủ yếu vào các vấn đề toán học phức tạp. Một ngôn ngữ khác cũng được sử dụng trong nhiều tác vụ khác nhau từ bản vẽ, phát triển web và toán học (nó không có chức năng toán học phong phú như MATLAB chắc chắn)

Lợi ích khác tôi biết: Vì nó được tối ưu hóa cho lập trình kỹ thuật, bạn có thể có hiệu suất tốt hơn khi viết ứng dụng trên trường này. Hiệu suất là rất đáng tin cậy, hãy xem câu hỏi này, nó cung cấp some helpful information.

0

Tôi nghĩ MATLAB có nhiều hạn chế đối với mã hóa C thông thường.Tôi đồng ý rằng có rất nhiều khối sẵn có có thể được sử dụng trực tiếp nhưng nếu bạn viết mã trong MATLAB thì sẽ mất gần 5 lần so với mã C vì xác định các biến để lấy vòng, chuyển trường hợp, tốn thời gian của nó Trong mô hình MATLAB

Và giả sử bạn đã tạo mô hình bằng cách sử dụng Simulink nhưng khi bạn cố gắng thêm một cái gì đó thì lại rất tốn thời gian nhưng trong C nó chỉ là 2 phút.

Vấn đề tiếp theo là bạn không thể nhận xét bất kỳ phần nào của mô hình như bạn làm trong các ngôn ngữ lập trình khác.

Đối với một dự án lớn đôi khi MATLAB bị rơi, bị lén lút, đôi khi bị treo và mô phỏng trong luồng trạng thái giống như một sh ​​* t.

Cuối cùng, tôi chỉ nói một điều, sử dụng mô hình MATLAB (stateflow + simulink) chỉ khi bạn có nhiều kiên nhẫn.

0

Như đã nói ở trên, nó phụ thuộc vào ứng dụng của bạn. Tôi đã cố gắng để chuyển đổi các bộ giải mã (của một hệ thống truyền thông) nó cho kết quả chính xác nhưng đối với số lượng lớn các bit nó là chậm hơn so với phiên bản MATLAB của riêng mình. Vì vậy, kết luận của tôi là chuyển đổi mã MATLAB thành C bằng tay.

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