01/10/2018, 16:21

Xin tài liệu về tối ưu code C/C++

Xin chào tất cả mọi người, mình đang gặp một dự án cần phải cải thiện tốc độ chạy của hệ thống. Đang bế tắc phần này nên mong mọi người chó thể chia sẻ với mình tài liệu hoặc trang nào hay nói về tối ưu mã nguồn để tăng tốc chương trình được không? mình code C/C++ nhé.

P/S: Mọi người cũng có thể chia sẻ với mình về kinh nghiệm tối ưu một sản phẩm thực tế nhỉ?

Tao Không Ngu. viết 18:22 ngày 01/10/2018

Hi chazo1994.
Nói vậy thì khó lắm. Bạn cần xác định xem chạy châm do thuật toán hay do code. Nếu bản chất thuật toán đã chậm rồi thì tối ưu code cũng không giải quyết được nhiều.

Dark.Hades viết 18:26 ngày 01/10/2018

Xem lại các tham biến của hàm đã dùng reference chưa.
Các tham trị là dạng dữ liệu nguyên thuỷ (hoặc sizeof <= sizeof(pointer)) thì nên để tham trị thay vì pointer/tham chiếu
Các dữ liệu return có dung lượng lớn, thay bằng copy, hãy thử dùng pointer(smart pointer)
inline các hàm có tỉ lệ gọi nhiều

Cố gắng hạn chế exception.

Vuio viết 18:24 ngày 01/10/2018

Mình biết có vài cách sau, bạn thử tìm hiểu xem

  1. Dùng mã nội tuyến (có thể tăng kích thước exe)
  2. Dùng multi thread
  3. Đặt priority (độ ưu tiên) cao hơn cho process (dùng SetPriorityClass)
  4. Đổi build mode từ debug sang release
  5. Bật optimize của compiler
  6. Hạn chế đọc ghi vào file nhiều, những gì cần thiết cứ để lại trên ram
Hung viết 18:23 ngày 01/10/2018
  1. Sử dụng Profiler để tìm đoạn code chạy chậm nhất.
  2. Optimize đoạn code đó.
  3. Lặp lại bước 1 đến khi đạt requirement.

Thiết lập profiler quan trọng hơn là cách optimize như thế nào.

chazo1994 viết 18:26 ngày 01/10/2018

thuật toán hay do code. Nếu bản chất thuật toán đã chậm rồi thì tối ưu code cũng không giải quyết được nhiều.

Vấn đề của mình nằm ở cả hai, về phần thuật toán mình sẽ tìm cách giải quyết sau. Bây giờ trước mắt cần tối ưu code một chút để ra được một phiên bản, sau đó nâng cấu phiên bản sau.

chazo1994 viết 18:31 ngày 01/10/2018

những gì cần thiết cứ để lại trên ram

Cảm ơn bạn rất nhiều, nó rẩt hữu ích.

chazo1994 viết 18:33 ngày 01/10/2018

, thay bằng copy, hãy thử dùng pointer(smart pointer)
inline các hàm có tỉ lệ gọi nhiều

Mình cũng đang tìm kiếm một tool profiler cho C/C++ trên linux mà chưa thấy cái nào hay (gprof thấy không hay lắm). Bạn có thể gợi ý cho mình một vài tool được không ?

kethanbi viết 18:29 ngày 01/10/2018

Cái này mình nghĩ do bạn xử lí thế nào. Bạn có thể mô tả hệ thống bạn đang làm cái gì. Cách xử lí ra sao. Mn có thể dựa trên đó tư vấn bạn biện pháp tốt hơn chứ nói k k tối ưu thế này thì khó lắm

Florastamine viết 18:37 ngày 01/10/2018

Dùng Valgrind đi, kết hợp Qt Creator. Hoặc KCacheGrind, nó cũng là wrapper cho Valgrind. gprof thì khá đơn sơ và muốn output đồ họa để dễ hình dung thì hơi nhọc.

Windows thì có thể dùng CodeXL hoặc built-in profiler của VS. (nếu dùng VS)

chazo1994 viết 18:23 ngày 01/10/2018

oke thank cậu, mình sẽ thử.

chazo1994 viết 18:23 ngày 01/10/2018

lắm

Cái này mình chỉ mong là có thể được mọi người chia sẻ kinh nghiệm, và một số tài liệu nói chung về tối ưu thôi. Còn chương trình của mình nó hơi đặc thù nên hệ thống nêu ra cũng khó cho mọi người có thể optimize. Vả lại phần cần optimize lại là của một cái thư viện phần xử lý trong nó mình vẫn chưa nắm hết, đành optimize kiểu blackbox nên mới cần tối ưu code chứ không tối ưu thuật toán.

huh? viết 18:27 ngày 01/10/2018

Bạn có thể tìm mấy quyển optimize C++ code trên này. Tuy nhiên mình cũng không chắc chắn lắm tốc độ sẽ được cải thiện nhiều hay không khi áp dụng mấy cái đó.

stackoverflow.com
grepsedawk

The Definitive C++ Book Guide and List

c++, c++-faq
asked by grepsedawk on 05:23AM - 23 Dec 08

Chế Vũ Gia Hy viết 18:36 ngày 01/10/2018

Mới đọc trên reddit xong, share cho bạn.

reddit

r/cpp - Optimize code in c++

45 votes and 69 comments so far on Reddit

chazo1994 viết 18:30 ngày 01/10/2018

Cảm ơn bạn nhiều nhé! Dù có cải thiện được tốc độ hay không thì có một điều đó là kinh nghiệm và kiến thức của mình sẽ tăng lên sau khi đọc nó.

chazo1994 viết 18:31 ngày 01/10/2018

Cảm ơn bạn nhiều nhé, nó hữu ích quá

Thược Nguyễn viết 18:34 ngày 01/10/2018

em thấy bác cứ debug xem đoạn nào chậm, rồi sẽ sửa được cho nhanh hết ấy mà

Bài liên quan
0