TĂNG HIỆU QUẢ CHƯƠNG TRÌNH và PHONG CÁCH lập TRÌNH

95 393 0
TĂNG HIỆU QUẢ CHƯƠNG TRÌNH và PHONG CÁCH lập 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

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

Ngày đăng: 11/11/2015, 17:02

Từ khóa liên quan

Mục lụ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ài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan