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ỉ?

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.

3 Likes

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.

3 Likes

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
4 Likes
  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.

4 Likes

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.

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

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 ?

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

1 Like

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)

3 Likes

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

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.

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 đó.

1 Like

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

1 Like

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ó.

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

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à :slight_smile:

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?