2012-10-17 30 views
5

Trong một dự án tôi đang làm việc, có một vòng lặp lồng nhau trong một tệp lớn mà tôi đang cố gắng tối ưu hóa, tôi nghĩ sẽ hưởng lợi từ một trình biên dịch unroll with -funroll- tất cả các vòng lặp. Tuy nhiên, khi tôi thêm cờ này vào trình biên dịch, nó sẽ hủy bỏ các vòng còn lại của tệp và làm cho chương trình tổng thể chạy chậm hơn. Có cách nào (có thể thông qua #pragma) để áp dụng cờ trình biên dịch chỉ cho các chức năng nhất định trong tệp thay vì toàn bộ tệp?GCC - Chỉ kích hoạt cờ trình biên dịch trên các chức năng cụ thể

Xin cảm ơn trước.

+1

có lẽ vấn đề thực sự là 4 vòng lồng nhau ... – Joe

Trả lời

1

Tôi khuyên bạn nên di chuyển hàm cụ thể đó thành tệp .c riêng biệt có thể được biên dịch bằng các tùy chọn bổ sung bạn muốn sử dụng. Điều này có thể yêu cầu tạo tiêu đề kiểu "foo_private.h" để chia sẻ giữa tệp .c hiện có và tệp mới cho phép chúng chia sẻ bất kỳ biến nào được khai báo là tĩnh trong tệp .c gốc

6

GCC function attributeoptimize có thể được sử dụng để đặt tùy chọn tối ưu hóa cho một chức năng duy nhất:

void foo(int bar) __attribute__((optimize ("unroll-all-loops"))) 
{ 
} 
Các vấn đề liên quan