Trình biên dịch Intel Fortran: mẹo tối ưu hóa khi biên dịch


21

Tôi sẽ bắt đầu với kinh nghiệm cá nhân của tôi trong phòng thí nghiệm của chúng tôi. Quay trở lại ifort 9 và 10 ngày, chúng tôi thường khá tích cực với việc tối ưu hóa, biên dịch với -O3 và các cờ cụ thể của bộ xử lý (ví dụ -xW -xSSE4.2). Nhưng bắt đầu với ifort 11, chúng tôi bắt đầu nhận thấy:
1. một số điểm không nhất quán trong kết quả (vì ngữ nghĩa không được bảo tồn)
2. mức tăng nhỏ hơn so với -O2.

Vì vậy, hiện tại, chúng ta thường chỉ cần biên dịch với -O2 và -xhost. Bạn có đề xuất tốt hơn với ifort 11? Điều này sẽ thay đổi một lần nữa khi chúng ta chuyển sang ifort 12? Cảm ơn trước.


7
Tối ưu hóa không có lợi cho tất cả các mã thống nhất. Vì vậy, tôi nghĩ rằng một câu hỏi tốt hơn sẽ là "Làm thế nào tôi có thể cấu hình mã của mình để cho biết tối ưu hóa trình biên dịch nào hiệu quả?"
Matt Knepley

1
Bởi vì ngữ nghĩa không được bảo tồn, hoặc bởi vì một cái gì đó đã được sắp xếp lại? Điều này có thể đi lang thang một chút từ chủ đề, nhưng sẽ tốt hơn khi thấy một đoạn mã tái tạo vấn đề. Có thể một cái gì đó đã được sắp xếp lại theo cách mà bạn không thích nhưng trình biên dịch cho rằng sẽ ổn. Kinh nghiệm của tôi là Intel 12 thực hiện công việc vector hóa tốt hơn bất kỳ thiết bị tiền nhiệm nào, vì vậy tôi mong đợi sẽ có nhiều thay đổi hơn khi bạn chuyển sang phiên bản mới nhất.
Bill Barth

Tôi nghĩ rằng ngữ nghĩa không được bảo tồn tương đương với việc đặt hàng không được bảo tồn. Dù sao, tôi nhận ra câu hỏi của tôi là (quá?), Và tôi không muốn sống cụ thể. Chúng tôi đã có một số vấn đề với intel 10, một số là lỗi trình biên dịch và một số không giải thích được. Vì vậy, với 11, chúng tôi đã chơi an toàn và chúng tôi hài lòng với màn trình diễn. Nhưng có lẽ chúng tôi đang chơi nó quá an toàn, và tôi muốn biết liệu cộng đồng có lời khuyên nào không.
FrenchKainedar

Câu trả lời:


16

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 -ipocả 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 .


Tôi thích câu trả lời của bạn nhưng tôi đã thử lại với một trong những thử nghiệm của chúng tôi và -O3 -xhost -fp-model precise -fp-model exceptkết quả là chậm 30% . Tôi sẽ nhìn lại hồ sơ và -vec-reportđể thử xem chuyện gì đang xảy ra ...
FrenchKainedar

2
Quá -O2 -xhost? Nó thật thú vị; Điều đó rất bất thường nhưng nó có thể xảy ra. Trong những trường hợp như thế này, trình tối ưu hóa đang làm điều gì đó có lý do chính đáng để nghĩ sẽ cải thiện tốc độ, nhưng hóa ra lại khiến mọi thứ tồi tệ hơn. Thông thường đối với mã khoa học, có cấu trúc khá đơn giản, điều đó không xảy ra. Trong những trường hợp như thế này, Tối ưu hóa hướng dẫn hồ sơ - software.intel.com/sites/products/documentation/hpc/compilerpro/ trộm - thường có thể giúp đỡ.

5

Tôi làm việc cho một công ty sản xuất các ứng dụng lớn, kỹ thuật cao trong Fortran với IFort - các ứng dụng này rất quan trọng về hiệu năng, vì tốc độ (trong khi duy trì độ chính xác) là điểm bán hàng chính.

Chúng tôi luôn biên dịch với -O3 và theo hiểu biết của tôi, những điều chính mà -O3 làm là không kiểm soát vòng lặp và tìm nạp trước. Tôi nghi ngờ rằng hầu hết các ứng dụng máy tính khoa học được hưởng lợi rất nhiều từ những thứ này, đặc biệt là tối ưu hóa vòng lặp. Chúng tôi đã không thấy lỗi trình biên dịch trong một thời gian khá lâu (mặc dù chúng tôi đã thấy một vài lỗi liên kết khi sử dụng Ifort trên máy Mac). Chúng tôi sử dụng 11.1.095.

Tôi hi vọng cái này giúp được.


4

Tôi nhận ra câu trả lời này có lẽ là rất xa, quá muộn, nhưng để tối ưu hóa mạnh mẽ, tùy chọn "nhanh" có vẻ như là giải pháp dễ nhất. Đoạn trích từ trang người đàn ông:

-fast
    Maximizes speed across the entire program.
    Description:
    This option maximizes speed across the entire program.

    It sets the following options:
     - On Linux* systems: -ipo, -O3, -no-prec-div, -static, and -xHost
     - On OS X* systems: -ipo, -mdynamic-no-pic, -O3, -no-prec-div, and -xHost
     - On Windows*  systems:  /O3,  /Qipo,  /Qprec-div-,  and /QxHost

    NOTE: Option fast sets some aggressive optimizations that may not be appropriate for all
    applications. The resulting executable may not run on processor types different from the
    one on which you compile. You should make sure that you understand the individual optimi-
    zation options that are enabled by option fast.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.