Tôi đã tìm thấy hiệu năng khá kém khi chạy một số mã tính toán theo Ubuntu trên một máy trạm không có thương hiệu mới mà tôi đang sử dụng để tính toán khoa học. Tôi nhận thấy một sự khác biệt trong tốc độ chạy một số mã hơi phức tạp trên Ubuntu so với trên máy tính xách tay Mac cũ của tôi mà tôi sử dụng để phát triển. Tuy nhiên, tôi đã quản lý để chưng cất nó xuống một ví dụ cực kỳ đơn giản mà vẫn thể hiện ít hơn Stelar cải tiến so với máy cũ của tôi:Hiệu suất thất vọng trong Ubuntu cho khối lượng công việc tính toán
#include <stdio.h>
#include <math.h>
int main() {
double res = 0.0;
for(int i=1; i<200000000; i++) {
res += exp((double) 100.0/i);
}
printf("%lf", res);
return(0);
}
Bây giờ Mac là một gần 5 năm 2.4GHz cũ Core 2 Duo MacBook Pro chạy OS X 10.5 chạy mã này trong khoảng 6,8 giây. Tuy nhiên, trên một thương hiệu mới 3,4GHz Core i7 Dell chạy Ubuntu 11,10 nó mất khoảng 6,1 giây! Ai đó có thể khai sáng cho tôi về những gì đang xảy ra ở đây không, bởi vì thật là vô lý khi một chiếc laptop gần 5 năm nằm trong vòng 10% của một máy trạm để bàn mới? Nó thậm chí còn vô lý hơn bởi vì tôi có thể thấy Core i7 turbo-boosting đến gần 4GHz với các công cụ giám sát!
Mac biên soạn với:
gcc -o test test.c -std=gnu99 -arch x86_64 -O2
Ubuntu biên soạn với:
gcc -o test test.c -std=gnu99 -m64 -O2 -lm
Cảm ơn,
Louis
Nếu không có mã lắp ráp cho điều này là vô dụng. Các trình biên dịch có thể xuất ra các mã khác nhau (vì các triển khai thư viện khác nhau). Sẽ tốt hơn nếu có mã điểm chuẩn của trình lắp ráp để đảm bảo thời gian chạy. – Nobody
Tôi hiểu những gì bạn đang nói, nhưng tôi sẽ không thể mã hóa ứng dụng khoa học của tôi trong assembly. Tôi không nghi ngờ rằng phần cứng thô nhanh hơn: vấn đề của tôi là máy trạm mới hoạt động kém với mã C đã biên dịch như được hiển thị và tôi muốn được trợ giúp để hiểu cách thức này có thể xảy ra. Nói cách khác: tôi phải làm gì để có được trạm làm việc mới để đăng số hiệu suất phù hợp hơn với 5 năm phát triển công nghệ đã trôi qua giữa Core 2 Duo và Core i7? – user1055918
@ user1055918 Trình biên dịch tạo ra assembly chúng ta đang làm sau - chúng tôi không yêu cầu bạn viết assembly. OS X đã trễ CPU Intel - chúng thực hiện rất nhiều thứ khác nhau (ví dụ: chúng có thể giả định một số tập lệnh nhất định tồn tại). Đồng thời, các thư viện có thể khác nhau hoặc chúng có thể hoạt động (hơi) khác nhau. – justin