Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 33 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
33
Dung lượng
338,36 KB
Nội dung
Bài 13 Tối ưu mã Mở đầu • Yêu cầu • Chương trình sau tối ưu phải tương đương • Tốc độ thực trung bình tăng • Hiệu đạt tương xứng với công sức bỏ • Có thể tối ưu mã vào lúc • Mã nguồn- người lập trình (giải thuật) • Mã trung gian • Mã đích Các mức độ tối ưu mã trung gian • Tối ưu cục • Tối ưu khối sở • Tối ưu đồ thị Tối ưu cục Kỹ thuật để cải tiến mã đích cách cục Một phương pháp để cải tiến chương trình trung gian (CT đích) cách xem xét dãy lệnh mã TG (đích) thay chúng đoạn mã ngắn hiệu Xu hướng Loại bỏ lệnh dư thừa Thơng tin dịng điều khiển Giản lược biểu thức đại số Sử dụng đặc trưng ngôn ngữ Tối ưu cục (peephole optimization) • Tính tốn biểu thức x := 32 trở thành x := x + 32 x := 64 • Mã không đến goto L2 x := x + Khơng cần • Tối ưu dịng điều khiển goto L1 trở thành goto L2 … L1: goto L2 Khơng cần khơng cịn lệnh sau L2 Tối ưu cục • Giản lược biểu thức đại số x := x + Khơng cần • Mã chết x := 32 x không dùng lệnh y := x + y y := y + 32 • Giảm chi phí tính tốn x := x * x := x + x x := x = j goto B6 B1 i=m-1 j=n Loại biểu thức chung t1 =4 * n v = a[t1] B5 B6 t6 = * i t11 = *i i=i +1 x = a[t6] x = a[t11] t2 = * i t8 = * j t12 = * i t3 = a[t2] t9 = a[t8] t13 = * n if t3 < v goto B2 a[t6] = t9 t14 = a[t13] a[t8] = x a[t12] = t14 goto B2 t15 = * n B2 B3 j=j–1 t4 = * j t5 = a[t4] if t5 > v goto B3 B4 if i >= j goto B6 a[t15] = x B1 i=m-1 j=n Loại biểu thức chung t1 =4 * n v = a[t1] B5 B6 t6 = * i t11 = * i i=i +1 x = a[t6] x = a[t11] t2 = * i t8 = * j t12 = * i t3 = a[t2] t9 = a[t8] t13 = * n if t3 < v goto B2 a[t6] = t9 t14 = a[t13] a[t8] = x a[t12] = t14 goto B2 t15 = * n B2 B3 j=j–1 t4 = * j t5 = a[t4] if t5 > v goto B3 B4 if i >= j goto B6 a[t15] = x B1 i=m-1 j=n Loại biểu thức chung t1 =4 * n v = a[t1] B5 B6 t6 = * i t11 = * i i=i +1 x = a[t6] x = a[t11] t2 = * i t8 = * j t13 = * n t3 = a[t2] t9 = a[t8] t14 = a[t13] if t3 < v goto B2 a[t6] = t9 a[t11] = t14 a[t8] = x t15 = * n goto B2 a[t15] = x B2 B3 j=j–1 t4 = * j t5 = a[t4] if t5 > v goto B3 B4 if i >= j goto B6 B1 i=m-1 j=n Loại biểu thức chung t1 =4 * n v = a[t1] B5 B6 t6 = * i B2 i=i +1 x = a[t6] t2 = * i t8 = * j t3 = a[t2] t9 = a[t8] if t3 < v goto B2 a[t6] = t9 B3 a[t8] = x j=j–1 t4 = * j t5 = a[t4] if t5 > v goto B3 B4 if i >= j goto B6 goto B2 t11 = * i x = a[t11] t13 = * n t14 = a[t13] a[t11] = t14 a[t13] = x B1 i=m-1 j=n Loại biểu thức chung t1 =4 * n v = a[t1] B5 B6 t6 = * i B2 i=i +1 x = a[t6] t2 = * i t8 = * j t3 = a[t2] t9 = a[t8] if t3 < v goto B2 a[t6] = t9 B3 a[t8] = x j=j–1 t4 = * j t5 = a[t4] if t5 > v goto B3 B4 if i >= j goto B6 goto B2 t11 = * i x = a[t11] t13 = * n t14 = a[t13] a[t11] = t14 a[t13] = x B1 i=m-1 j=n Loại biểu thức chung t1 =4 * n v = a[t1] B5 B6 x = a[t2] B2 i=i +1 t8 = * j t2 = * i t9 = a[t8] t3 = a[t2] a[t2] = t9 if t3 < v goto B2 B3 a[t8] = x goto B2 j=j–1 t4 = * j t5 = a[t4] if t5 > v goto B3 B4 if i >= j goto B6 t11 = * i x = a[t11] t13 = * n t14 = a[t13] a[t11] = t14 a[t13] = x B1 i=m-1 j=n Loại biểu thức chung t1 =4 * n v = a[t1] B5 B6 x = t3 B2 i=i +1 t8 = * j t2 = * i t9 = a[t8] t3 = a[t2] a[t2] = t9 if t3 < v goto B2 B3 a[t8] = x goto B2 j=j–1 t4 = * j t5 = a[t4] if t5 > v goto B3 B4 if i >= j goto B6 t11 = * i x = a[t11] t13 = * n t14 = a[t13] a[t11] = t14 a[t13] = x B1 i=m-1 j=n Loại biểu thưc chung t1 =4 * n v = a[t1] B5 B6 x = t3 B2 i=i +1 t9 = a[t4] t2 = * i a[t2] = t9 t3 = a[t2] a[t4] = x if t3 < v goto B2 B3 j=j–1 t4 = * j t5 = a[t4] if t5 > v goto B3 B4 if i >= j goto B6 goto B2 t11 = * i x = a[t11] t13 = * n t14 = a[t13] a[t11] = t14 a[t13] = x B1 i=m-1 j=n Loại biểu thức chung t1 =4 * n v = a[t1] B5 B6 x = t3 B2 i=i +1 a[t2] = t5 t2 = * i a[t4] = x t3 = a[t2] goto B2 if t3 < v goto B2 t11 = * i x = a[t11] t13 = * n t14 = a[t13] a[t11] = t14 B3 j=j–1 t4 = * j t5 = a[t4] if t5 > v goto B3 B4 if i >= j goto B6 a[t13] = x B1 i=m-1 j=n Loại biểu thức chung t1 =4 * n v = a[t1] B5 B6 x = t3 B2 i=i +1 a[t2] = t5 t2 = * i a[t4] = x t3 = a[t2] goto B2 if t3 < v goto B2 x = t3 t14 = a[t1] a[t2] = t14 a[t1] = x B3 j=j–1 t4 = * j t5 = a[t4] if t5 > v goto B3 B4 if i >= j goto B6 Tương tự với B6 B1 i=m-1 Copy propagation j=n t1 =4 * n v = a[t1] B5 B6 x = t3 B2 i=i +1 a[t2] = t5 t2 = * i a[t4] = x t3 = a[t2] goto B2 if t3 < v goto B2 B3 j=j–1 t4 = * j t5 = a[t4] if t5 > v goto B3 B4 if i >= j goto B6 x = t3 t14 = a[t1] a[t2] = t14 a[t1] = x B1 i=m-1 Copy propagation j=n t1 =4 * n v = a[t1] B5 B6 a[t2] = t5 t14 = a[t1] i=i +1 a[t4] = t3 a[t2] = t14 t2 = * i goto B2 a[t1] = t3 B2 t3 = a[t2] if t3 < v goto B2 B3 j=j–1 t4 = * j t5 = a[t4] if t5 > v goto B3 B4 if i >= j goto B6 B1 Giảm chi phí i=m-1 j=n t1 =4 * n v = a[t1] B5 B6 a[t2] = t5 t14 = a[t1] i=i +1 a[t4] = t3 a[t2] = t14 t2 = * i goto B2 a[t1] = t3 B2 t3 = a[t2] if t3 < v goto B2 B3 j=j–1 t4 = * j t5 = a[t4] if t5 > v goto B3 B4 if i >= j goto B6 B1 Giảm chi phí i=m-1 j=n t1 =4 * n v = a[t1] t2 = * i t4 = * j B2 t2 = t2 + t3 = a[t2] if t3 < v goto B2 B3 t4 = t4 - t5 = a[t4] if t5 > v goto B3 B4 if i >= j goto B6 B5 a[t2] = t5 B6 t14 = a[t1] a[t4] = t3 a[t2] = t14 goto B2 a[t1] = t3