Chúng tôi thực sự khuyên tất cả người dùng của chúng tôi bắt đầu với -O3 -xHost -ipo
cả ifort 11 và ifort 12. Nếu có các phép biến đổi dấu phẩy động cụ thể được kích hoạt bởi O3 ảnh hưởng đến độ chính xác của một số tính toán của bạn, bạn có thể tắt chúng một cách cụ thể bằng -fp-model precise -fp-model except
(hoặc, quyết liệt hơn, -fp-model strict
) trong khi vẫn duy trì các tối ưu hóa khác mà O3 cho phép, chẳng hạn như chặn vòng lặp cho bộ đệm, hợp nhất vòng lặp và không kiểm soát và tối ưu hóa truy cập bộ nhớ.
Tôi khuyên bạn nên thử công cụ mô hình dấu phẩy động trên các tệp riêng lẻ và tìm ra nơi nó tạo ra sự khác biệt, thay vì tắt nó trên toàn cầu; nó có thể là một cú va chạm tốc độ ~ 15% và bạn muốn có thể giữ nó ở nơi nó không ảnh hưởng đến tính toán của bạn. Nếu bạn không chắc chắn độ chính xác bị ảnh hưởng ở đâu, bạn có thể chơi bằng cách bật và tắt cờ mô hình dấu phẩy động cho các tệp đó hoặc chơi với các chế độ làm tròn .
Gần đây chúng tôi đã có một cuộc nói chuyện ngắn với người dùng của chúng tôi về các cờ tối ưu hóa, tập trung vào trình biên dịch gnu và intel cho x86; bạn có thể xem các slide từ cuộc nói chuyện ở đây .
Ngẫu nhiên, trong khi chúng ta đang nói về việc chọn các cờ tối ưu hóa cho mã của mình, thì thỉnh thoảng cũng đáng để xem kết quả của báo cáo -vec để xem trình biên dịch đã cố gắng vectơ vòng lặp và không thể; đôi khi có những thay đổi nhỏ mà bạn có thể thực hiện đối với vòng lặp của mình, điều này có thể dẫn đến việc vector hóa là có thể (có thể là tăng tốc gấp 4 lần). Tương tự cho báo cáo tổng quát hơn .