Tôi không hoàn toàn hiểu những gì làm cho phép nhân ma trận trong C# /. NET (và thậm chí Java) rất chậm.Tại sao nhân ma trận trong .NET lại chậm?
Hãy xem điểm chuẩn này (
source):
Đang cố gắng tìm điểm chuẩn được cập nhật.
Java vs C# vs C++ breakdown http://img411.imageshack.us/img411/9324/perf.gif
C# 's nguyên và hiệu suất tăng gấp đôi là damn gần C++ biên dịch với MSVC++. 87% nhanh gấp đôi và 99% nhanh cho số nguyên 32 bit. Khá tốt, tôi muốn nói. Nhưng sau đó nhìn vào phép nhân ma trận. Khoảng cách mở rộng đến C# là khoảng 19% nhanh. Đây là một sự khác biệt khá lớn mà tôi không hiểu. Phép nhân ma trận chỉ là một loạt các phép toán đơn giản. Làm thế nào là nó nhận được như vậy chậm? Không nên nhanh như một số lượng tương đương của các hoạt động dấu chấm động hoặc số nguyên đơn giản?
Điều này đặc biệt quan tâm đến trò chơi và với XNA, ở đó hiệu suất ma trận và véc tơ rất quan trọng đối với những thứ như động cơ vật lý. Một thời gian trước, Mono đã thêm hỗ trợ cho các lệnh SIMD thông qua một số lớp vector và ma trận tiện lợi. Nó đóng khoảng trống và làm cho Mono nhanh hơn C++ viết tay, mặc dù không nhanh bằng C++ với SIMD. (source)
Matrix multiplication comparison http://img237.imageshack.us/img237/2788/resultse.png
gì đang xảy ra ở đây?
Chỉnh sửa: Nhìn kỹ hơn, tôi đã đọc nhầm biểu đồ thứ hai. C# xuất hiện khá gần.
Điểm chuẩn đầu tiên có làm điều gì đó khủng khiếp sai?
Rất tiếc, tôi đã bỏ lỡ số phiên bản trên điểm chuẩn đầu tiên. Tôi nắm lấy nó như là một tài liệu tham khảo hữu ích cho "đại số tuyến tính C# là chậm" mà tôi đã luôn luôn nghe. Tôi sẽ tìm cách khác.
C# Version + Tùy chọn: .Net Framework 1.1.4322 Uh ... không có phiên bản mới hơn? – GalacticJello
* ngồi và đợi xem JonSkeet phải nói gì về vấn đề * :-) – WestDiscGolf
Bài kiểm tra được thực hiện với VS 2003. (Lưu ý phiên bản C++.) Do đó phiên bản cũ của .net. – cHao