Vấn đề tối ưu hóa xử lý của chương trình được đặt ra từ rất lâu rồi. Trước đây, các nhà lập trình luôn cố gắng tối ưu hóa chương trình do các thế hệ máy tính bấy giờ có tốc độ xử lý còn chậm và giá thành cao. Ngày nay, máy tính đã trở nên phổ biến và tốc độ xử lý ngày càng tăng nhanh, do đó nhu cầu đặt ra đối với bài toán tối ưu hóa tuyệt đối chương trình đã giảm đi rất nhiều. Vậy ta có còn cần quan tâm đến vấn đề hiệu năng xử lý...
MỘT SỐ VẤN ĐỀ TỐI ƯU HOÁ XỬ LÝ CHƯƠNG TRÌNH … MỤC LỤC I MỘT SỐ VẤN ĐỀ TỐI ƯU HỐ XỬ LÝ CHƯƠNG TRÌNH .1 ĐẶT VẤN ĐỀ HIỆN TƯỢNG NÚT CỔ CHAI 3 KỸ THUẬT ĐO THỜI GIAN THỰC HIỆN VÀ LƯU LẠI QUÁ TRÌNH HOẠT ĐỘNG (Profiling) .10 3.1 Đo thời gian tự động 10 3.2 Kỹ thuật profiling – lưu lại trình thực 12 3.3 Tập trung quan tâm vào đoạn mã trọng tâm chương trình 14 3.4 Biểu diễn trực quan số liệu thống kê hiệu thực chương trình 15 CÁC CHIẾN LƯỢC TỐI ƯU HOÁ THỜI GIAN 16 4.1 Sử dụng thuật toán cấu trúc liệu tốt 17 4.2 Sử dụng chức tối ưu hóa trình biên dịch .17 4.2 Tinh chỉnh mã nguồn 18 4.4 Khơng tối ưu hóa khơng gây vấn đề 20 TIN CHỈNH MÃ NGUỒN .21 5.1 Tập hợp biểu thức chung 21 5.2 Thay thao tác chi phí cao thao tác chi phí thấp .22 5.3 Trải rộng hay loại bỏ vòng lặp .22 5.4 Lưu trữ lại giá trị thường dùng 23 5.5 Xây dựng chức cấp phát nhớ đặc dụng 24 5.6 Dùng nhớ trung gian cho việc nhập xuất liệu .25 5.7 Xử lý riêng tình đặc biệt 25 5.8 Tính trước kết 25 5.9 Dùng giá trị xấp xỉ .26 5.10 Viết lại mã nguồn ngôn ngữ cấp thấp .26 TỐI ƯU HỐ KHƠNG GIAN LƯU TRỮ 27 6.1 Tiến kiệm không gian cách dùng kiểu kiệu có kích thước nhỏ 28 6.2 Không cần lưu trữ tính lại dễ dàng 28 ƯỚC LƯỢNG 30 II NGUYÊN LÝ TRONG REFACTORING 34 ĐỊNH NGHĨA REFACTORING 34 TẠI SAO NÊN REFACTORING .35 2.1 Refactoring cải thiện thiết kế phần mềm 35 2.2 Refactoring làm phần mềm dễ hiểu 36 2.3 Refactoring giúp tìm Bugs 37 2.4 Refactoring giúp chương trình chạy nhanh 37 KHI NÀO THỰC HIỆN REFACTORING 37 3.1 Refactor thêm chức 38 3.2 Refactor cần sửa lỗi (bug) .38 3.3 Refactor thực duyệt chương trình 38 VẤN ĐỀ VỚI REFACTORING .39 4.1 Cơ sở liệu (Database) 39 4.2 Thay đổi giao diện 40 REFACTORING VÀ HIỆU NĂNG XỬ LÝ 40 REFACTORING HỖ TRỢ TRONG VISUAL STUDIO 2005 .41 Nguyễn Thị Thanh Trúc – Mai Xuân Hùng MỘT SỐ VẤN ĐỀ TỐI ƯU HOÁ XỬ LÝ CHƯƠNG TRÌNH … Nguyễn Thị Thanh Trúc – Mai Xuân Hùng MỘT SỐ VẤN ĐỀ TỐI ƯU HOÁ XỬ LÝ CHƯƠNG TRÌNH … Chương 7I MỘT SỐ VẤN ĐỀ TỐI ƯU HỐ 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ữ ĐẶ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 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, Nguyễn Thị Thanh Trúc – Mai Xuân Hùng MỘT SỐ VẤN ĐỀ TỐI ƯU HOÁ XỬ LÝ CHƯƠNG TRÌNH … 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ữ Như ta biết 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 toá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 ư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 Nguyễn Thị Thanh Trúc – Mai Xuân Hùng MỘT SỐ VẤN ĐỀ TỐI ƯU HOÁ XỬ LÝ CHƯƠNG TRÌNH … 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 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 với Internet cho phép cần công bố tên máy (là tên gateway) cho tất thành viên mạng nội 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 Nguyễn Thị Thanh Trúc – Mai Xuân Hùng MỘT SỐ VẤN ĐỀ TỐI ƯU HỐ XỬ LÝ CHƯƠNG TRÌNH … 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 */ int isspam(char *mesg) { int i; for (i=0; i