Hướng dẫn is matlab easier than c++ - matlab dễ hơn C++

Tôi đã sử dụng MATLAB và C ++ trong khoảng 10 năm. Đối với mỗi thuật toán số được thực hiện cho nghiên cứu của tôi, tôi luôn bắt đầu từ việc tạo mẫu với MATLAB và sau đó dịch dự án thành C ++ để đạt được cải thiện hiệu suất từ ​​10 đến 100 lần (tôi không đùa). Tất nhiên, tôi đang so sánh mã C ++ được tối ưu hóa với mã MATLAB được vector hóa đầy đủ. Trung bình, sự cải thiện là khoảng 50 lần.

Có rất nhiều sự tinh tế đằng sau cả hai ngôn ngữ lập trình và sau đây là một số hiểu lầm:

  1. MATLAB là ngôn ngữ tập lệnh nhưng C ++ được biên dịch

    MATLAB sử dụng trình biên dịch JIT để dịch tập lệnh của bạn sang mã máy, bạn có thể cải thiện tốc độ của mình nhiều nhất bằng hệ số 1,5 đến 2 bằng cách sử dụng trình biên dịch mà Matlab cung cấp.

  2. Mã MATLAB có thể có thể được vector hóa đầy đủ nhưng bạn phải tối ưu hóa mã của mình bằng tay trong C ++

    Mã MATLAB được vector hóa đầy đủ có thể gọi các thư viện được viết trong C ++/C/Lắp ráp (ví dụ: Intel MKL). Nhưng mã C ++ đơn giản có thể được vector hóa hợp lý bởi các trình biên dịch hiện đại.

  3. Hộp công cụ và thói quen mà MATLAB cung cấp nên được điều chỉnh rất tốt và nên có hiệu suất hợp lý

    Không. Khác với các thói quen đại số tuyến tính, hiệu suất nói chung là xấu.

Những lý do tại sao bạn có thể đạt được hiệu suất 10 lần ~ 100 lần trong C ++ so với mã MATLAB vector hóa:

  1. Gọi các thư viện bên ngoài (MKL) trong MATLAB tốn thời gian.

  2. Bộ nhớ trong MATLAB được phân bổ và giải phóng động. Ví dụ, phép nhân ma trận nhỏ: A = B*C + D*E + F*G yêu cầu MATLAB phải tạo 2 ma trận tạm thời. Và trong C ++, nếu bạn phân bổ bộ nhớ của mình trước tay, bạn không tạo ra. Và bây giờ hãy tưởng tượng bạn lặp lại tuyên bố đó trong 1000 lần. Một giải pháp khác trong C ++ được cung cấp bởi tham chiếu Rvalue C ++ 11. Đây là một trong những cải tiến lớn nhất trong C ++, bây giờ mã C ++ có thể nhanh như mã C đơn giản.
    A = B*C + D*E + F*G
    requires Matlab to create 2 temporary matrices. And in C++, if you allocate your memory before hand, you create NONE. And now imagine you loop that statement for 1000 times. Another solution in C++ is provided by C++11 Rvalue reference. This is the one of the biggest improvement in C++, now C++ code can be as fast as plain C code.

  3. Nếu bạn muốn thực hiện xử lý song song, mô hình MATLAB là đa quy trình và cách C ++ là đa luồng. Nếu bạn có nhiều nhiệm vụ nhỏ cần được song song, C ++ cung cấp mức tăng tuyến tính cho nhiều luồng nhưng bạn có thể có mức tăng hiệu suất âm trong MATLAB.

  4. Vector hóa trong C ++ liên quan đến việc sử dụng nội tại/lắp ráp và đôi khi vectơ SIMD chỉ có thể có trong C ++.

  5. Trong C ++, một lập trình viên có kinh nghiệm có thể tránh hoàn toàn sự bỏ lỡ bộ đệm L2 và thậm chí cả L1 bộ đệm, do đó đẩy CPU đến giới hạn thông lượng lý thuyết của nó. Hiệu suất của MATLAB có thể tụt lại phía sau C ++ theo hệ số 10 lần vì lý do này.

  6. Trong C ++, các hướng dẫn chuyên sâu tính toán đôi khi có thể được nhóm theo độ trễ của chúng (mã cẩn thận trong lắp ráp hoặc nội tại) và phụ thuộc (hầu hết thời gian được thực hiện tự động bởi trình biên dịch hoặc phần cứng CPU), sao cho IPC lý thuyết (hướng dẫn trên mỗi chu kỳ đồng hồ) có thể là đạt được và đường ống CPU được lấp đầy.

Tuy nhiên, thời gian phát triển trong C ++ cũng là một yếu tố là 10 lần so với MATLAB!

Những lý do tại sao bạn nên sử dụng MATLAB thay vì C ++:

  1. Trực quan hóa dữ liệu. Tôi nghĩ rằng sự nghiệp của tôi có thể tiếp tục mà không cần C ++ nhưng tôi sẽ không thể tồn tại mà không cần Matlab chỉ vì nó có thể tạo ra những mảnh đất đẹp!

  2. Hiệu quả thấp nhưng các thói quen tích hợp và hộp công cụ tích hợp mạnh mẽ về mặt toán học. Nhận câu trả lời chính xác trước và sau đó nói về hiệu quả. Mọi người có thể phạm sai lầm tinh tế trong C ++ (ví dụ: hoàn toàn chuyển đổi gấp đôi thành int) và nhận được kết quả chính xác.double to int) and get sort of correct results.

  3. Thể hiện ý tưởng của bạn và trình bày mã của bạn cho đồng nghiệp của bạn. Mã MATLAB dễ đọc hơn nhiều và ngắn hơn nhiều so với C ++ và mã MATLAB có thể được thực thi chính xác mà không cần trình biên dịch. Tôi chỉ từ chối đọc mã C ++ của người khác. Tôi thậm chí không sử dụng các thư viện khoa học C ++ GNU vì chất lượng mã không được đảm bảo. Thật nguy hiểm cho một nhà nghiên cứu/kỹ sư sử dụng thư viện C ++ làm hộp đen và lấy độ chính xác như được cấp. Ngay cả đối với các thư viện C/C ++ thương mại, tôi nhớ trình biên dịch Intel đã có lỗi dấu hiệu trong hàm sin () của nó vào năm ngoái và các vấn đề chính xác về số cũng xảy ra trong MKL.sign error in its sin() function last year and numerical accuracy problems also occurred in MKL.

  4. Gỡ lỗi tập lệnh MATLAB với bảng điều khiển tương tác và không gian làm việc hiệu quả hơn rất nhiều so với trình gỡ lỗi C ++. Tìm một lỗi tính toán chỉ số trong MATLAB có thể được thực hiện trong vòng vài phút, nhưng có thể mất hàng giờ trong C ++ để tìm ra lý do tại sao chương trình bị hỏng ngẫu nhiên nếu kiểm tra ranh giới bị xóa vì tốc độ.

Cuối cùng nhưng không kém phần:

Vì một khi mã MATLAB được vector hóa, không còn nhiều để lập trình viên tối ưu hóa, hiệu suất mã MATLAB ít nhạy cảm hơn với chất lượng của mã so với mã C ++. Do đó, tốt nhất là tối ưu hóa các thuật toán tính toán trong MATLAB và các thuật toán tốt hơn một chút thường có hiệu suất tốt hơn một chút trong MATLAB. Mặt khác, kiểm tra thuật toán trong C ++ yêu cầu lập trình viên đàng hoàng viết các thuật toán được tối ưu hóa ít nhiều theo cùng một cách và để đảm bảo trình biên dịch không tối ưu hóa các thuật toán khác nhau.

Kinh nghiệm gần đây của tôi về C ++ và MATLAB:

Tôi đã tạo ra một số công cụ phân tích dữ liệu MATLAB lớn trong năm qua và bị MATLAB chậm chạp. Nhưng tôi đã có thể cải thiện tốc độ chương trình MATLAB của mình bằng 10 lần thông qua các kỹ thuật sau:

  • Chạy/Hồ sơ tập lệnh MATLAB, thực hiện lại các thói quen quan trọng trong C/C ++ và biên dịch với MEX. Các thói quen quan trọng chủ yếu có khả năng đơn giản về mặt logic nhưng nặng về số lượng. Điều này cải thiện tốc độ 5x.

  • Đơn giản hóa các tệp ".m" được vận chuyển với các hộp công cụ MATLAB bằng cách nhận xét tất cả các kiểm tra an toàn không cần thiết và tính toán tham số đầu ra. Vui lòng được nhắc nhở rằng mã sửa đổi không thể được phân phối với phần còn lại của tập lệnh người dùng. Điều này cải thiện tốc độ 2 lần khác (sau C/C ++ và Mex).

Mã cải tiến là ~ 98% trong MATLAB và ~ 2% trong C ++.

Tôi tin rằng có thể cải thiện tốc độ thêm 2 lần (tổng số 20 lần) nếu toàn bộ công cụ được mã hóa trong C ++, đây là cải thiện tốc độ ~ 100 lần của các thói quen tính toán. I/O ổ cứng sau đó sẽ thống trị thời gian chạy chương trình.

Câu hỏi cho các kỹ sư toán học:

Khi mã MATLAB được vector hóa hoàn toàn, một trong những yếu tố giới hạn hiệu suất là hoạt động lập chỉ mục ma trận. Chẳng hạn, một hoạt động khác biệt hữu hạn cần được thực hiện trên Ma trận A có kích thước 5000x5000:

B = A(:,2:end)-A(:,1:end-1)

Hoạt động lập chỉ mục ma trận làm cho mã MATLAB chậm hơn nhiều lần so với mã C ++. Có thể cải thiện hiệu suất lập chỉ mục ma trận không?

Cái nào tốt hơn C hay MATLAB?

Sự khác biệt chính giữa ngôn ngữ MATLAB và C là MATLAB là môi trường điện toán tương tác trong khi ngôn ngữ C là ngôn ngữ lập trình mục đích chung cấp cao.

Matlab có khó học không?

MATLAB® không khó để học nếu bạn tham gia bất kỳ khóa học chuyên nghiệp nào.Đó là lý tưởng cho các sinh viên tốt nghiệp kỹ thuật và các chuyên gia CNTT sẵn sàng phát triển các kỹ năng MATLAB® trong các lĩnh vực liên quan của họ.not hard to learn if you go for any professional course. It is ideal for engineering graduates and IT professionals willing to develop MATLAB® skills in their related fields.

Cái nào nhanh hơn C hay MATLAB?

Hiệu suất có thể so sánh với các hệ thống kích thước nhỏ đến trung bình trong khi việc triển khai C nhanh hơn tới 2,5 lần so với MATLAB cho các hệ thống lớn, điều này có ý nghĩa!

Matlab có giống với C không?

Nó không có gì giống như C. matlab được gọi là một môi trường điện toán của người Viking.Bạn có thể ném một số công thức toán học vào nó và sẽ nhổ ra kết quả.Bạn có thể phát triển các chương trình với nó, nhưng đó chắc chắn không phải là sở trường của nó.