MỘT SỐ VẤN ĐỀ VỀ TỐI ƯU HÓA XỬ LÝ CỦA CHƯƠNG TRÌNH

60 896 0
MỘT SỐ VẤN ĐỀ VỀ TỐI ƯU HÓA XỬ LÝ CỦA CHƯƠNG TRÌNH

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

ĐẠI HỌC QUỐC GIA TP.HCM TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN BÁO CÁO MÔN HỌC NGUYÊN LÝ VÀ PHƯƠNG PHÁP LẬP TRÌNH MỘT SỐ VẤN ĐỀ VỀ TỐI ƯU HĨA XỬ LÝ CỦA CHƯƠNG TRÌNH Cán giảng dạy: TS Nguyễn Tuấn Đăng Học viên: Nguyễn Bá Kỳ Mã số: CH0901025 Tp.HCM, 10-2010 LỜI CÁ ƠN M Chúng em xin chân thành cám ơn TS Nguyễn Tuấn Đăng tận tình giảng dạy chúng em trình học tập để thực tiểu luận Chúng em xin chân thành cám ơn Phòng Đào tạo sau Đại học, trường Đại Học Khoa Học Công nghệ Thông tin – Đại học Quốc Gia Tp.HCM tạo điều kiện thuận lợi cho em học tập công tác Chúng em xin chân thành cám ơn quý Thầy Cô Trường tận tình giảng dạy, trang bị cho chúng em kiến thức quý báu suốt thời gian học Xin chân thành cám ơn người thân bạn bè ủng hộ, giúp đỡ thời gian học tập nghiên cứu Học viên thực hiện, Nguyễn Bá Kỳ Tháng 10/ 2010 i Mục lục Chương 1Một số vấn đề Tối ưu hóa xử lý chương trình 1.0Đặt vấn đề 1.1Hiện tượng nút cổ chai .7 1.2Kỹ thuật đo thời gian thực lưu lại trình hoạt động (Profiling) 15 2.1Đo thời gian tự động .15 2.2Kỹ thuật profiling – lưu lại trình thực 17 2.3Tập trung quan tâm vào đoạn mã trọng tâm chương trình 19 2.4Biểu diễn trực quan số liệu thống kê hiệu thực chương trình 21 1.3Các chiến lược tối ưu hóa thời gian thực 23 3.1Sử dụng thuật toán cấu trúc liệu tốt 23 3.2Sử dụng chức tối ưu hóa trình biên dịch 24 3.3Tinh chỉnh mã nguồn .25 3.4Không tối ưu hóa khơng gây vấn đề 26 1.4Tinh chỉnh mã nguồn .28 4.1Tập hợp biểu thức chung 28 4.2Thay thao tác chi phí cao thao tác chi phí thấp 29 4.3Trải rộng hay loại bỏ vòng lặp .30 4.4Lưu trữ lại giá trị thường dùng 31 4.5Xây dựng chức cấp phát nhớ đặc dụng .32 4.6Dùng nhớ trung gian cho việc nhập xuất liệu 32 4.7Xử lý riêng tình đặc biệt 33 4.8Tính trước kết 33 4.9Dùng giá trị xấp xỉ .34 4.10Viết lại mã nguồn ngôn ngữ cấp thấp 34 1.5Tối ưu hóa khơng gian lưu trữ 35 5.1Tiết kiệm khơng gian cách dùng kiểu kiệu có kích thước nhỏ 36 5.2Không cần lưu trữ tính lại dễ dàng 37 1.6Ước lượng 39 1.7Tổng kết 43 1.8Các tài liệu đọc thêm 44 Bài tập 1.1 – Chương trình Spam Test 45 1.Mục đích 45 2.Các chức chương trình 46 3.Cấu trúc liệu giải thuật sử dụng 46 4.Nhận xét 48 Bài tập 1.249 1.Yêu cầu 49 ii 2.Thực 49 Bài tập 1.350 1.Yêu cầu 50 2.Giải thích 50 Bài tập 1.4 - Module Special Memset 51 1.Mục đích 51 2.Giải thích hoạt động module Special Memset 51 Bài tập 1.5 - Module Special Allocator 53 1.Mục đích 53 2.Giải thích hoạt động module Special Allocator 53 Bài tập 1.6 1.7 - Chương trình Cost Model 56 1.Mục đích 56 2.Các chức chương trình 57 iii Danh sách hình Hình 1.1 Đồ thị thể biến thiên tốc độ xử lý chương trình với kích thước bảng băm trường hợp kích thước lũy thừa trường hợp kích thước số nguyênt tố 22 Hình 1.2 – Chương trình Spam Test 45 Hình 1.3 Chương trình Cost Model 56 Danh sách bảng Bảng 1.1 Bảng thống kê trình thực chương trình spamtest nguyên thủy 19 Bảng 1.2 Bảng thống kê trình thực chương trình spamtest cải tiến 20 Bảng 1.3 Kết đo tốc độ thực lệnh C/C++ hệ thống Intel Pentium IV 2.4 GHz, 512MB DDRAM 333 Mhz 58 iv Một số vấn đề tối ưu hóa xử lý chương trình Chương Một số vấn đề Tối ưu hóa xử lý chương trình Bài viết dựa nội dung chương “Hiệu xử lý chương trình” (Chapter – Performance) trích sách “The Practice of Programming” tác giả Brian W Kernighan va Rob Pike [1999] Trong chương này, tác giả trình bày số vấn đề tối ưu hóa xử lý chương trình, tập trung sâu phân tích khía cạnh tối ưu hóa thời gian xử lý, đồng thời trình bày số kỹ thuật tối ưu hóa khơng gian lưu trữ 1.0 Đặt vấn đề Vấn đề tối ưu hóa xử lý chương trình đặt từ lâu Trước đây, nhà lập trình ln cố gắng tối ưu hóa chương trình hệ máy tính có tốc độ xử lý cịn chậm giá thành cao Ngày nay, máy tính trở nên phổ biến tốc độ xử lý ngày tăng nhanh, nhu cầu đặt tốn tối ưu hóa tuyệt đối chương trình giảm nhiều Vậy ta có cịn cần quan tâm đến vấn đề hiệu xử lý chương trình hay khơng? Trên thực tế, tốn tối ưu hóa hiệu xử lý chương trình có ý nghĩa sống Tuy nhiên, vấn đề thật cần đặc biệt quan tâm tốn cần giải thật có ý nghĩa quan trọng, chương trình có để giải tốn có tốc độ xử lý cịn chậm so với yêu cầu thực tế, đồng thời ta có sở để tối ưu hóa việc xử lý nhằm tăng tốc độ chương trình mà đảm bảo tính đắn, bền vững sáng chương trình Một chương trình có tốc độ nhanh đưa đáp số chưa xác khơng giúp tiết kiệm thời gian! Do đó, nguyên lý tối ưu hóa phải cân nhắc có cần tối ưu hóa chương trình hay khơng Phải chương trình có đủ tốt rồi, khơng Nguyễn Bá Kỳ -CH0901025 Một số vấn đề tối ưu hóa xử lý chương trình cần khơng thể tối ưu hóa thêm nữa? Giả sử ta biết cách mà chương trình sử dụng mơi trường thực chương trình này, liệu việc tối ưu hóa nhằm tăng tốc độ xử lý chương trình có đem lại lợi ích hay khơng Hầu hết chương trình mà sinh viên viết trình học trường sử dụng vài lần, sau khơng sử dụng lại nữa, đó, vấn đề tốc độ thường khơng quan tâm Vấn đề thường không ảnh hưởng không cần quan tâm hầu hềt chương trình cá nhân, chẳng hạn cơng cụ, khung kiểm tra, thử nghiệm Ngược lại, chức xử lý sản phẩm thương mại, chẳng hạn thư viện đồ họa phần mềm, vấn đề tối ưu hóa tốc độ xử lý có ý nghĩa quan trọng cần giải Như vậy, ta nên thử tìm cách tăng tốc xử lý chương trình làm cách để thực điều này? Kết cụ thể mà ta mong muốn tiến hành việc tối ưu hóa gì? Nội dung chương trình bày vấn đề làm để chương trình chạy nhanh (tối ưu hóa thời gian) hay sử dụng nhớ tiết kiệm (tối ưu hóa khơng gian lưu trữ) Tốc độ vấn đề thường quan tâm nhiều nên ta sâu vào vấn đề Khơng gian lưu trữ (bộ nhớ chính, đĩa) thường quan tâm hơn, có ý nghĩa quan trọng, nên ta tìm hiểu số vấn đề liên quan đến tối ưu hóa khơng gian lưu trữ Trong chương - Thuật toán Cấu trúc Dữ liệu, chiến lược tốt sử dụng thuật toán đơn giản nhất, rõ ràng nhất, cấu trúc liệu phù hợp với tốn cần giải Do đo, cần đo thơng số hiệu hoạt động để định có cần tiến hành sửa đổi chương trình/thuật tốn hay khơng; cần sử dụng option trình biên dịch để phát sinh mã thực có tốc độ xử lý nhanh nhất; cần xác định nhũng phần chương trình tối ưu hóa đem lại hiệu cao cho tồn chương trình; thực thay đổi cải tiến sau đánh giá, phân tích trước tiến hành thay đổi tiếp theo; đồng thời cần phải giữ lại phiên đơn giản xác (chưa tối Nguyễn Bá Kỳ -CH0901025 Một số vấn đề tối ưu hóa xử lý chương trình ưu hóa chắn xác) để kiểm tra kết so với phiên cải tiến Việc đo lường thống kê thành phần quan trọng quy trình cải tiến hiệu chương trình suy luận trực giác người dẫn đến định hướng sai lầm cần phải bổ sung công cụ đo thời gian thực lập sơ đồ thời gian chương trình Dựa vào số liệu đo đạt thống kê thông qua kỹ thuật đo thời gian (timing command) lưu lại q trình hoạt động (profiler), ta rút nhận xét giải pháp nhằm tối ưu hóa chương trình Việc cải tiến hiệu phải kèm với trình kiểm chứng chương trình (sử dụng kỹ thuật kiểm tra tự động, lưu vết sửa đổi phiên bản, tra mã nguồn – code inspection, sử dụng liệu thử nghiệm ) để đảm bảo chương trình sau sửa đổi đảm bảo tính đắn khơng làm ưu điểm vốn có phiên trước Nếu từ ban đầu chương trình viết tốt với thuật tốn hiệu cần sửa đổi chí khơng cần sửa đổi chương trình để cải tiến hiệu Ngược lại, chương trình viết chưa tốt, tổ chức chưa hợp lý, khơng sáng, việc tối ưu hóa địi hỏi phải sửa đổi nhiều, chí phải tổ chức lại cấu trúc chương trình viết lại từ đầu 1.1 Hiện tượng nút cổ chai Đầu tiên, ta mô tả cách giải tượng nút cổ chai chương trình quan trọng sử dụng thường xuyên môi trường cục Các thư điện tử mà ta nhận thông qua thiết bị gateway nối kết mạng cục với Internet Mỗi ngày, có hàng vạn thư điện tử từ bên ngồi gởi đến cho vài nghìn thành viên mạng cục thơng qua gateway sau chuyển đến người mạng nội Sự ngăn cách cô lập mạng nội ta với Internet cho phép ta cần công bố tên máy (là tên gateway) cho tất thành viên mạng nội Nguyễn Bá Kỳ -CH0901025 Một số vấn đề tối ưu hóa xử lý chương trình Một số dịch vụ gateway lọc “spam”, thư rác kèm theo quảng cáo dịch vụ mà lợi ích chưa kiểm chứng Sau thời gian thử nghiệm ban đầu thành cơng, lọc “spam” thức cài đặt sử dụng đặc tính khơng thể thiếu cho tất người dùng mạng nội bộ, rắc rối xuất Gateway, vốn cũ kỹ thường bận, bị tải chương trình lọc chiếm nhiều thời gian – nhiều hẳn so với thời gian cần thiết cho tất thao tác xử lý khác thư – đến mức độ hàng đợi thư bị đầy việc truyền phát thư tín bị trì hỗn nhiều hệ thống cố xoay sở để kịp phân phối thư Trên ví dụ vấn đề tốc độ thực chương trình: chương trình khơng đủ nhanh để hồn thành nhiệm vụ, chậm trễ tạo trở ngại cho người dùng Do đó, chương trình cần phải cải tiến, tối ưu hóa để chạy nhanh nhiều so với phiên Trước hết, ta khảo sát cách hoạt động lọc “spam” Mỗi thông điệp gửi tới xem chuỗi ký tự đơn, so mẫu ký tự kiểm tra chuỗi xem có chứa cụm từ số cụm từ thường gặp “spam” hay không, chẳng hạn như: “Make millions in your spare time” (kiếm hàng triệu đồng thời gian rảnh bạn) hay “XXX-rated” (các trang khiêu dâm) Các thông điệp có khuynh hướng lặp lặp lại, đó, kỹ thuật có hiệu đáng kể, thơng điệp “spam” lọt lưới cụm từ đặc trưng cho “spam” thêm vào danh sách “spam” để chặn vào lần sau Do khơng có sẵn cơng cụ so sánh chuỗi vừa chạy nhanh vừa đáng tin cậy, ví dụ grep, nên người ta viết lọc riêng dùng cho mục đích lọc “spam” Mã nguồn đơn giản; chương trình lọc “spam” tìm xem thơng điệp có chứa số cụm từ (các mẫu) hay khơng: /* Hàm isspam: kiểm tra chuỗi thơng điệp mesg có chứa spam không */ Nguyễn Bá Kỳ -CH0901025 Một số vấn đề tối ưu hóa xử lý chương trình int isspam(char *mesg) { int i; for (i=0; i

Ngày đăng: 10/04/2015, 11:08

Từ khóa liên quan

Mục lục

  • Chương 1 Một số vấn đề về Tối ưu hóa xử lý chương trình

    • 1.0 Đặt vấn đề

    • 1.1 Hiện tượng nút cổ chai

    • 1.2 Kỹ thuật đo thời gian thực hiện và lưu lại quá trình hoạt động (Profiling)

      • 1..2.1 Đo thời gian tự động

      • 1..2.2 Kỹ thuật profiling – lưu lại quá trình thực hiện.

      • 1..2.3 Tập trung quan tâm vào các đoạn mã trọng tâm của chương trình.

      • 1..2.4 Biểu diễn trực quan số liệu thống kê hiệu năng thực hiện của chương trình

      • 1.3 Các chiến lược tối ưu hóa thời gian thực hiện

        • 1..3.1 Sử dụng thuật toán hoặc cấu trúc dữ liệu tốt hơn

        • 1..3.2 Sử dụng các chức năng tối ưu hóa của trình biên dịch

        • 1..3.3 Tinh chỉnh mã nguồn

        • 1..3.4 Không tối ưu hóa những gì không gây vấn đề

        • 1.4 Tinh chỉnh mã nguồn

          • 1..4.1 Tập hợp những biểu thức chung.

          • 1..4.2 Thay thế các thao tác chi phí cao bằng các thao tác chi phí thấp hơn.

          • 1..4.3 Trải rộng hay loại bỏ các vòng lặp.

          • 1..4.4 Lưu trữ lại các giá trị thường dùng

          • 1..4.5 Xây dựng chức năng cấp phát bộ nhớ đặc dụng

          • 1..4.6 Dùng bộ nhớ trung gian cho việc nhập và xuất dữ liệu.

          • 1..4.7 Xử lý riêng từng tình huống đặc biệt

          • 1..4.8 Tính trước kết quả

          • 1..4.9 Dùng các giá trị xấp xỉ

          • 1..4.10 Viết lại mã nguồn bằng ngôn ngữ cấp thấp

Tài liệu cùng người dùng

Tài liệu liên quan