2012-05-18 35 views
5

Tôi đang làm việc trên CPU kiến ​​trúc vi mô Nehalam/westmere Intel. Tôi muốn tối ưu hóa mã của mình cho Kiến trúc này. Có bất kỳ cờ biên soạn chuyên ngành hoặc chức năng C nào của GCC sẽ giúp tôi cải thiện hiệu suất thời gian chạy của mã không?Các tùy chọn GCC để tối ưu hóa trên kiến ​​trúc CPU đã cho

Tôi đã sử dụng -o3.

Language of the Code - C 
Platform - Linux 
GCC Version - 4.4.6 20110731 (Red Hat 4.4.6-3) (GCC) 

Trong mã của tôi, tôi có một số so sánh điểm nổi và được thực hiện trên một triệu lần.

Giả sử mã đã được tối ưu hóa tốt nhất.

+5

Có gì sai với kết quả bạn nhận được bằng cách nhìn vào tài liệu và Googling? – jthill

+0

http://gcc.gnu.org/onlinedocs/gcc/Option-Summary.html – Jay

+0

@jthill đã không thể nhận được bất kỳ điều gì cho kiến ​​trúc perticular này .. vì vậy tôi đã chỉ tự hỏi nếu chúng tôi có bất cứ điều gì cụ thể như trình biên dịch intel –

Trả lời

14

Bạn thực sự có thể tự mình phân tích tất cả các tối ưu hóa đã tắt và đã bật. Chạy trên máy tính của bạn:

gcc -O3 -Q --help=optimizers | grep disabled 

Sau đó đọc về các cờ vẫn bị tắt và có thể theo hiệu suất ảnh hưởng the gcc documentation.

16

Trước tiên, nếu bạn thực sự muốn thu lợi nhuận từ việc tối ưu hóa trên các bộ xử lý mới hơn như thế này, bạn nên cài đặt phiên bản mới nhất của trình biên dịch. 4.4 xuất hiện một vài năm trước, và thậm chí nếu nó vẫn có vẻ đã được giải quyết, tôi nghi ngờ rằng mã tối ưu hóa mới hơn được trả lại cho điều đó. (Phiên bản hiện tại là 4.7)

Gcc có cờ tối ưu hóa bắt tất cả thường sẽ tạo mã được tối ưu hóa cho kiến ​​trúc biên dịch: -march=native. Cùng với -O3, đây sẽ là tất cả những gì bạn cần.

(Và đối với câu hỏi tương lai trên trang web này, hãy sử dụng ngữ pháp tiếng Anh đầy đủ và dấu chấm câu.)

+1

Nếu bạn không xây dựng cho máy chủ lưu trữ của mình, bạn có thể sử dụng '-march = nehalem',' -march = sandybridge', '-march = haswell',' -march = bdver1 '(Bulldozer),' -march = bdver3' (Steamroller), '-march = silvermont', v.v. Sử dụng' -mtune' để điều chỉnh cho một CPU nhất định mà không sử dụng các phần mở rộng hướng dẫn cài đặt sẽ bị lỗi trên các CPU cũ hơn. Ví dụ '-march = nehalem -mtune = haswell' là viết tắt của' -msse4.2 -mpopcnt -mtune = haswell' –

5

Bạn sẽ muốn thêm một tùy chọn -march=.... Các ... nên được thay thế bằng bất cứ điều gì là gần nhất với kiến ​​trúc CPU của bạn (có xu hướng là sự khác biệt nhỏ) mô tả in the i386/x86_64 options for GCC here.

Tôi sẽ sử dụng core2corei7 (thứ bạn muốn) chỉ có sẵn trong GCC 4.6 trở lên. Xem arch list for GCC 4.6 here.

0

Nếu bạn thực sự muốn sử dụng một gcc rất cũ mà nó không hỗ trợ corei7, bạn có thể sử dụng -mtune = barcelona

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