Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 95 trang
THÔNG TIN TÀI LIỆU
Cấu trúc
TĂNG HIỆU QUẢ CHƯƠNG TRÌNH VÀ PHONG CÁCH LẬP TRÌNH
Efficient Programs
Dùng chỉ thị chương trình dịch
Nhưng...
Writing Efficient Code
Khởi tạo 1 lần, dùng nhiều lần
Inline functions
Slide 8
Static Variables
Slide 10
Stack, heap
Macros
Tính toán trước các giá trị
Loại bỏ những biểu thức thông thường
Sử dụng các biến đổi số học!
Dùng “lính canh” -Tránh những kiểm tra không cần thiết
Dùng “lính canh” ….
Dịch chuyển những biểu thức bất biến ra khỏi vòng lặp
Không dùng các vòng lặp ngắn
Giảm thời gian tính toán
Tính Sigmoid
Slide 22
Tính Sigmoid – Giải pháp
Slide 24
Slide 25
Slide 26
Results
Luu y !
Những quy tắc cơ bản Fundamental Rules
Quy tắc tăng tốc độ
Quy tắc tăng tốc độ : cont.
Quy tắc lặp : Loop Rules
Quy tắc lặp : Loop Rules
Procedure Rules
GOOD PROGRAMMING STYLE
Slide 36
Slide 37
Slide 38
Slide 39
Slide 40
Slide 41
Slide 42
Program Style
Slide 44
Structure: Spacing
Structure: Indentation (cont.)
Slide 47
Structure: “Paragraphs”
Slide 49
Structure: Expressions
Structure: Expressions (cont.)
Slide 52
Slide 53
C Idioms
Naming
Comments
Comments (cont.)
Slide 58
Function Comments
Function Comments (cont.)
Slide 61
Modularity
Bottom-Up Design is Bad
Top-Down Design is Good
Top-Down Design in Reality
Ví dụ: Text Formatting
Ví dụ về Input and Output
Thinking About the Problem
Writing the Program
The Top Level
Reading a Word
Reading a Word (cont.)
Slide 73
Saving a Word
Saving a Word (cont.)
Printing the Last Line
Deciding When to Print
Printing with Justification
Printing with Justification (cont.)
Slide 80
Clearing the Line
Modularity: Tóm tắt ví dụ
The “justify” Program
Slide 84
Slide 85
Optimizing C and C++ Code
Optimizing C and C++ Code (tt)
Slide 88
Một vài ví dụ tối ưu mã C, C++
Slide 90
Slide 91
Tối ưu đoạn code sau :
Floating_point
Slide 94
Slide 95
Nội dung
TĂNG HIỆU QUẢ CHƯƠNG TRÌNH VÀ PHONG CÁCH LẬP TRÌNH Efficient Programs Trước hếế t giải thuật Hãy dùng giải thuật hay nhấất Sau nghĩ tới việc tăng tính hiệu code Ví dụ : Tính tổng n sốấtự nhiên kêấtừ m void main() { long n,m,i , sum ; cout [...]... sốếcác chương trình, việc tăng tốế c độ thực hiện là cấồ n thiếết Tuy nhiến, cố tăng tốế c độ cho những đoạn code khống sử dụng thường xuyến là vố ích ! 28 Những quy tắc cơ bản Fundamental Rules Đơn giản hóa Code – Code Simplification : Hấồu hêất các chương trình chạy nhanh là đơn giản Vì v ậy, hay don giản hóa chương trình để nó chạy nhanh hơn Đơn giản hóa van đếồ- Problem Simplification: Để tăng. .. Để tăng hiệu quả của chương trình, hãy đơn giản hóa vấấ n đêồmà nó giải quyêất Khống ngừng nghi ngờ - Relentless Suspicion: Đặt dấấ u hỏi vêồsự cấồn thiêất của mỗi mẩu code và mỗi trường , mỗi thuộc tính trong cấấu trúc dữ liệu Liến kếế t sớm - Early Binding: Hãy thực hiện ngay cống việc để tránh th ực hi ện nhiêồ u lấồn sau này 29 Quy tắc tăng tốc độ Có thể tăng tốế c độ băồ ng cách sử d... thể giảm băồng cách s ử dụng thêm các cấấ u trúc dữ liệu với các dữ liệu bổ xung hoặc băồng cách thay đổi các dữ liệu trong cấấu trúc sao cho dễ tiêấp cận hơn Lưu các kếế t quả được tính trước: Thời gian tính toán lại các hàm có th ể giảm bớt băồ ng cách tính toán hàm chỉ 1 lấồn và lưu kêất quả, những yêu cấồu sau này s ẽ được xử lý băồng cách tìm kiêấm từ mảng hay danh sách kêất quả thay vì tính... cái gì đó, đáng đ ể ta mạo hiểm Nói chung sẽ là tốết nếế u ta tuấn th ủ các quy tác sau đấy : Một quy tăế c quan trọng trong phong cách lập trình là “Tính nhấết quán” Nếế u bạn chấế p nhận một cách thức đặt tến hàm hay biếến, hăồng thì hãy tuấn thủ nó trong toàn bộ chương trình Đấồ u mỗi CT, nến có một đoạn chú thích … Mỗi CT con phải có một nhiệm vụ rõ ràng M ột CT con ph ải đ ủ ngăến để người... cho Tính i = (X – X0)/Delta; phép trừ sốấthực và 1 phép chia sốấthực Tính sigmoid(x) 1 phép nhấn float và 1 phép cộng float 1 26 Results Nếế u dùng exp(x) : Mỗi lấồn gọi mấấ t khoảng 300 nanoseconds với 1 máy Pentium 4 tốấc độ 2 Ghz Dùng tìm kiếế m trến mảng và nội suy tuyếến tính : Mỗi lấồ n gọi mấấ t khoảng 30 nanoseconds Tốế c độ tăng gập 10 lấồn Đổi lại phải tốấ n kêấm thêm từ... vậy , sigmoid(x) chiếế m phấồn lớn thời gian (khoảng 70-80%) 22 Tính Sigmoid – Giải pháp Thay vì tính hàm mọi lúc Tính hàm tại N điểm và xấy dựng 1 mảng Trong mỗi lấồn gọi sigmoid x0 sigmoid(x0) x1 sigmoid(x0) x2 sigmoid(x0) giá trị gấồ n nhấất của x và kêấ t quả ứng với giá trị ấấy Thực hiện nội suy tuyêấ n tính - linear interpolation Tìm x3 sigmoid(x0) x4 sigmoid(x0) x5 sigmoid(x0) x6 sigmoid(x0)... danh sách kêất quả thay vì tính lại hàm 30 Quy tắc tăng tốc độ : cont Caching: Dữ liệu thường dùng cấồn phải dễ tiêấp cận nhấấ t, luốn hiện hữu Lazy Evaluation: Khống bao giờ tính 1 phấồ n tử cho đêấn khi cấồn để tránh những sự tính toán khống cấồ n thiêất 31 Quy tắc lặp : Loop Rules Những điểm nóng - Hot spots trong phấồn lớn các chương trình đếến từ các vòng lặp: Đưa Code ra khỏi các vòng... cấồn kêất hợp chung vào 1 vòng lặp 32 Quy tắc lặp : Loop Rules Kếế t hợp các phép thử - Combining Tests: Trong vòng lặp càng ít kiểm tra càng tốấ t và tốất nhấất chỉ một phép thử LTV có thể phải thay đổi điêồu kiện kêất thúc vòng lặp “Lính gác” hay “Vệ sĩ” là một ví dụ cho quy tăấc này Loại bỏ Loop : Với những vòng lặp ngăấ n thì cấồn loại bỏ vòng lặp, tránh phải thay đổi và kiểm tra điêồu kiện...Stack, heap Khi thực hiện , vùng dữ liệu data segment của 1 chương trình được chia làm 3 phấồn : - static, stack, và heap data Static: global hay static variables Stack data: - các biêấn cục bộ của ct con - ví dụ double_array trong ví dụ trên Heap data: - Dữ liệu được cấấp... nến tính trước 1 lấồn và lưu lại giá trị, rốồi dùng giá trị ấếy sau này static int[] values = int f(int i) { {0, 0, 2,3*3-3, , 9*9-9}; if (i < 10 && i >= 0) int f(int i) { { if (i < 10 && i >= 0) return i * i - i; { return values[i]; } } return 0; return 0; } } 13 Loại bỏ những biểu thức thông thường Đừng tính cùng một biểu thức nhiếồ u lấồn! Một sốếcompilers có thể nhận biếế t và xử lý for (i = 1; ... Simplification : Hấồu hêất chương trình chạy nhanh đơn giản Vì v ậy, hay don giản hóa chương trình để chạy nhanh Đơn giản hóa van đếồ- Problem Simplification: Để tăng hiệu chương trình, đơn giản hóa... thiện hiệu từ 10% đêấn 300% Nhưng Bạn thực cải tiếế n mà trình dịch khống thể Bạn phải loại bỏ tấế t chỗ bấết hợp lý code Làm cho chương trình hiệu nhấất Có thể phải xem lại thấế y chương trình. .. tác sau : Một quy tăế c quan trọng phong cách lập trình “Tính nhấết quán” Nếế u bạn chấế p nhận cách thức đặt tến hàm hay biếến, hăồng tuấn thủ toàn chương trình Đấồ u CT, nến có đoạn thích