2017-12-19 57 views
7

Điều này có vẻ hoặc thậm chí là một câu hỏi ngu ngốc: Khi tôi xây dựng một cái gì đó tự điều chỉnh như Python với PGO (hoặc ATLAS hoặc tôi tin rằng FFTW cũng làm điều đó), máy tính phải được nếu không nhàn rỗi (không can thiệp với các phép đo) hoặc tôi có thể vượt qua thời gian chơi Doom không?Khi xây dựng Python với tối ưu hóa hướng dẫn về cấu hình, tôi có phải rời khỏi máy tính một mình không?

README được liên kết từ phân phối nguồn python dường như coi đây là một vấn đề không quan trọng, nhưng tôi thực sự không chắc chắn về điều này.

+2

Doom là không sao, sẽ không ăn nhiều CPU :) –

+0

Nghi ngờ, an toàn hơn xin lỗi: chơi trên máy tính khác của bạn –

+0

Hãy di chuyển và tìm hiểu. ;-) –

Trả lời

3

Việc bạn làm trên máy tính trong khi thực hiện các phép đo PGO sẽ không ảnh hưởng đến kết quả của việc tối ưu hóa. PGO làm gì là sử dụng các phép đo để tìm các đường dẫn nóng trong mã cho một tập dữ liệu nhất định và sử dụng thông tin này để làm cho chương trình càng nhanh càng tốt cho tập dữ liệu này và đường dẫn nào nóng và không độc lập với các chương trình khác chạy trên máy tính.

Để giải thích mọi thứ một chút, khi tối ưu hóa mã, có sự cân bằng giao dịch. Việc cải thiện sẽ cao hơn ở một số phần của mã và thấp hơn ở những phần khác tùy thuộc vào việc biến đổi mã nào được sử dụng và chúng được áp dụng ở đâu. Để có được kết quả cuối cùng tốt hơn, bạn muốn có các cải tiến cao về mã được thực hiện rất nhiều (mã nóng trong trình biên dịch lingo) trong khi bạn có thể sống với các cải tiến nhỏ hơn trong mã được thực hiện ít thường xuyên hơn (mã lạnh). Thông thường một tập hợp các heuristics được sử dụng để xác định các phần nóng của chương trình và áp dụng tối ưu hóa theo cách mà làm cho các bộ phận này càng nhanh càng tốt. Vấn đề với cách tiếp cận này là các chẩn đoán không biết bất cứ điều gì về cách chương trình sẽ được sử dụng trong thực tế và có thể xác định sai mã nóng là lạnh.

Tối ưu hóa hướng dẫn hồ sơ (PGO) là một phương pháp giúp trình biên dịch xác định vị trí các phần nóng của mã sử dụng dữ liệu từ các lần thực thi thực. Bước đầu tiên bạn nói với trình biên dịch là xây dựng một phiên bản cụ thể của chương trình để đo lường cách mã được thực thi trong thực tế, thường là bằng cách thêm bộ đếm để đếm số lần lặp trong vòng lặp và nhánh nào được chọn trong câu lệnh if. Bước thứ hai là chạy chương trình được thiết kế trên dữ liệu thực. Khi kết thúc chương trình, chương trình sẽ xuất các giá trị của tất cả các bộ đếm bổ sung và bằng cách kết hợp các bộ đếm với mã, có thể thấy phần nào của chương trình là nóng (số cao) và các giá trị lạnh (số thấp). Cuối cùng chương trình được biên dịch nhưng thời gian này được ghi lại với hồ sơ chương trình. Điều này ngụ ý rằng trình biên dịch không còn cần phải đoán phần nào sẽ nhanh hơn và có thể chậm hơn nó có thể tìm kiếm nó trong cấu hình.

+0

Cảm ơn, @Johan cho câu trả lời của bạn. Tôi tôn trọng chuyên môn của bạn. Nhưng vào dịp này bạn có thể đun sôi nó xuống một chút và cung cấp cho chúng tôi các chuyên gia không biên dịch một cơ hội để bông trên? Có lẽ một hoặc hai dòng trên những gì "nóng" thực sự có nghĩa là, và "con đường" cho vấn đề đó? Tôi biết tôi về mặt kỹ thuật đã không hỏi tại sao và như thế nào, nhưng có một người hiểu biết rõ ràng trong tay nó sẽ là cẩu thả để không yêu cầu một chút giác ngộ. –

+0

@PaulPanzer Tôi đã thêm một số giải thích về PGO. Nếu nó vẫn không rõ ràng xin vui lòng cho tôi biết. – Johan

+0

Bây giờ tôi khá hài lòng với câu trả lời. Thú vị và giàu thông tin. Cảm ơn bạn! –

Các vấn đề liên quan