Có cách nào để nói với kêu vang để unroll một vòng lặp cụ thể?clang: Lực lượng vòng lặp unroll cho vòng lặp cụ thể
Googling cho câu trả lời cung cấp cho tôi các tùy chọn dòng lệnh sẽ ảnh hưởng đến toàn bộ và không phải một vòng lặp đơn lẻ.
Có câu hỏi tương tự cho GCC --- Tell gcc to specifically unroll a loop --- nhưng câu trả lời được cung cấp ở đó không hoạt động với tiếng kêu.
Lựa chọn 1 đề nghị đó:
#pragma GCC optimize ("unroll-loops")
dường như bị bỏ qua trong im lặng. Thực tế,
#pragma GCC akjhdfkjahsdkjfhskdfhd
cũng bị bỏ qua âm thầm.
Phương án 2:
__attribute__((optimize("unroll-loops")))
kết quả trong một cảnh báo:
warning: unknown attribute 'optimize' ignored [-Wattributes]
Cập nhật
joshuanapoli cung cấp một giải pháp tốt đẹp như thế nào để lặp qua mẫu Lập trình meta và C + +11 mà không tạo vòng lặp. Cấu trúc sẽ được giải quyết tại thời gian biên dịch dẫn đến nội dung được lặp lại nhiều lần. Trong khi nó không chính xác là một câu trả lời cho câu hỏi, về cơ bản nó đạt được điều tương tự.
Đó là lý do tại sao tôi chấp nhận câu trả lời. Tuy nhiên, nếu bạn tình cờ biết cách sử dụng vòng lặp C chuẩn (for
, while
) và buộc phải hủy bỏ nó - hãy chia sẻ kiến thức với chúng tôi!
Thông thường, trình biên dịch có ý tưởng rất hay khi thích hợp để bỏ vòng lặp và khi đó không phải là ý tưởng hay.Trường hợp đặc biệt bạn đang cố gắng giải quyết là nơi nào không áp dụng? –
Nó có thể không * force * unrolling, nhưng '__attribute__ ((hot))' có thể đáng để thử. –
@MatsPetersson Tôi muốn đo lường rõ ràng lợi ích của việc bỏ vòng lặp. Unroll viết tay thực sự tăng tốc mã 3 lần, nhưng trình biên dịch không tìm ra nó. – CygnusX1