Tôi đã viết mã C++ đơn giản và thử nghiệm trong C++, sau đó tôi đã sửa mã giống nhau cho MATLAB bằng mex file_name.cpp
và chạy cùng mã trong MATLAB đang sử dụng trình biên dịch giống như C++. Đây là mã:So sánh tốc độ Matlab vs C++ trong mã này
int k;
for(int j = 0; j < 100;j++){
for(int i = 0; i < 10000000; i++){
k++;
}
k/=10000000
}
đây là mã MATLAB:
double a;int j;int i;
double* k;
for(j = 0; j < 100;j++){
for(i = 0; i < 10000000; i++){
a = a+1;
}
a = a/10000000;
}
plhs[0] = mxCreateDoubleMatrix(1,1,mxREAL);
k = mxGetPr(plhs[0]);
*k = (double)a;
Tôi đã chỉnh sửa mã này cho MATLAB, tức là thay đổi với các loại phù hợp, thêm MEX chức năng vv và kết quả là khoảng 900ms trong MATLAB trái ngược với 3100 ms trong C++. Điều tôi không hiểu là cả hai đều đang chạy cùng một mã và với cùng trình biên dịch (trong MATLAB tôi viết mex -setup
trong dòng lệnh và trình biên dịch Visual Studio được chọn làm trình biên dịch MEX), tuy nhiên, MATLAB là khoảng nhanh hơn 3,5 lần.
MATLAB làm gì để nhanh hơn và C++ không làm gì? Ai đó có thể giải thích cho tôi tại sao có sự khác biệt rất lớn? Tôi đã thử một số mã khác, tất cả đều nhanh hơn 3-6 lần trong MATLAB.
Máy tính của tôi là Windows 7 64 bit, Visual Studio 2010 được sử dụng cho C++, MATLAB là R2012b.
Có thể điều này là do phiên bản Visual Studio của tôi không? Nếu tôi thay đổi nó thành VS2012, nó sẽ nhanh hơn?
mex -v đầu ra ở đây.
Cảm ơn,
Trình biên dịch vẫn còn s #### y, chúng không thể xóa bỏ vòng lặp đơn giản luôn trả về cùng giá trị? Xe bay của tôi đâu rồi! :-) – xanatos
sử dụng 'mex -v' để biên dịch mex và xem những gì cờ matlab đang sử dụng. – Shai
bạn đang biên soạn trong chế độ gỡ lỗi hoặc phát hành trong VS? – Shai