2015-10-14 15 views
7

Tôi muốn xác định một tập hợp các chuỗi tối ưu hóa cho một chương trình C đầu vào để nghiên cứu tác động của các chuỗi được áp dụng của tôi đến hiệu suất mã.Thứ tự các cờ tối ưu hóa GCC

dụ:

gcc -fauto-inc-dec -fbranch-count-reg -fcombine-stack-adjustments ... test.c -o out.o 

Liệu thứ tự của các tùy chọn này ảnh hưởng đến hiệu quả của mã sản xuất?

Đồng thời, việc áp dụng tùy chọn tối ưu hóa hai lần có tác động không?

Có cách nào tốt hơn để kiểm tra hàng nghìn chuỗi tối ưu hóa không? Giống như trong -02 (bao gồm khoảng 20 tùy chọn), tôi muốn xác định cờ của riêng tôi

Trả lời

5
  • Liệu thứ tự của các tùy chọn này ảnh hưởng đến hiệu quả của mã sản xuất?

    • Không, thứ tự của các tùy chọn thông qua như là đối số dòng lệnh để trình biên dịch không ảnh hưởng đến hiệu quả của mã sản xuất.
  • Có cách nào tốt hơn để kiểm tra hàng nghìn chuỗi tối ưu hóa không?

    • Vì chúng tôi không có chuỗi tối ưu hóa nên cờ tối ưu được chuyển tới trình biên dịch, chúng tôi không có cách kiểm tra. Tuy nhiên, như bạn biết, chúng tôi có các mức tối ưu hóa mà bạn có thể thử nghiệm.
  • Mức tối ưu hóa cao hơn thực hiện nhiều chuyển đổi toàn cầu hơn trên chương trình và áp dụng thuật toán phân tích đắt tiền hơn để tạo mã nhanh hơn và nhỏ gọn hơn. Giá trong thời gian biên dịch và cải thiện kết quả trong thời gian thực hiện, cả hai đều phụ thuộc vào ứng dụng cụ thể và môi trường phần cứng. Bạn nên thử nghiệm để tìm mức độ tốt nhất cho ứng dụng của mình. Vui lòng tham khảo Optimization Levels for GCC

  • Tôi muốn xác định cờ của riêng tôi

  • Hiện nay, gcc hỗ trợ nhiều cờ mà bạn có thể tham khảo trong Optimize Options. Nếu bạn muốn xác định một lá cờ, thì trình biên dịch cần hiểu điều đó và bạn có thể cần phải sửa đổi mã trình biên dịch cho gcc để nó có thể hiểu một lá cờ mới. Vui lòng tham khảo mã trên github, opts.c, opts.c đề cập đến cờ và cấp độ tối ưu hóa.

  • Đồng thời, việc áp dụng tùy chọn tối ưu hóa hai lần có tác động không?

    • Không, áp dụng cùng một tùy chọn tối ưu hóa hai lần sẽ không có tác động. Ví dụ: Thi hành gcc -fauto-inc-dec -fauto-inc-dec test.c sẽ có tác động tương tự như Thực thi gcc -fauto-inc-dec test.c.

(Thêm từ yêu cầu liên quan thêm tối ưu hóa đi - Bạn có thể viết một plugin tối ưu hóa gcc để làm cho đèo thêm Vui lòng tham khảo bài viết này: An introduction to creating GCC plugins Điều này giúp tạo plugin để làm thêm tối ưu hóa.. vượt qua, chuyển đổi mã hoặc phân tích thông tin.)

+0

bạn đã nói KHÔNG. Tuy nhiên, trong bài báo khoa học tôi thấy khẳng định này: "Trong tối ưu hóa các trình biên dịch, thực hành tiêu chuẩn là áp dụng cùng một tập hợp các giai đoạn tối ưu hóa theo thứ tự cố định trên mỗi phương pháp của một chương trình. Tuy nhiên, một số nhà nghiên cứu đã chỉ ra rằng Do đó, chúng tôi muốn có một kỹ thuật lựa chọn thứ tự tốt nhất của việc tối ưu hóa cho từng phần của chương trình, thay vì so với việc áp dụng cùng một bộ tối ưu hóa cố định cho toàn bộ chương trình . " https://www.eecis.udel.edu/~cavazos/oopsla-2012.pdf – staticx

+5

@staticx: Có, bạn chính xác rằng thứ tự tối ưu hóa vượt qua các vấn đề. Tuy nhiên, thứ tự các đối số dòng lệnh được đưa ra không ảnh hưởng đến thứ tự vượt qua tối ưu hóa trong gcc. – janneb

+0

@janneb Tôi không quá quen thuộc với các giai đoạn tối ưu hóa gcc và đặt hàng vấn đề. Ok, giả sử tôi có một chương trình C và một danh sách các chuỗi tối ưu hóa. Làm thế nào tôi có thể tạo ra các ảnh hưởng đến việc chuyển đổi mã? – staticx