2009-01-23 28 views
26

Tôi đã chơi với boost :: pool một vài lần ở những nơi mà nó dường như với tôi Tôi đã nghiêm túc búa đống với rất nhiều đối tượng "khuấy". Nói chung tôi đã sử dụng boost::object_pool hoặc boost::pool_alloc làm thông số mẫu STL. Tuy nhiên kết quả là luôn luôn rằng hiệu suất là hầu như không thay đổi, hoặc xấu đi đáng kể.Bạn đã bao giờ đạt được tốc độ tăng tốc đáng kể bằng cách sử dụng boost :: pool?

Tôi tò mò muốn nghe về bất kỳ câu chuyện thành công nào với nó.

Tôi nên tìm những loại thứ gì trong việc tạo hồ sơ có thể cho biết tăng :: hồ bơi có khả năng giúp đỡ?

Có thực sự là khá khó để cải thiện trên malloc cũ tốt?

Trả lời

20

hồ Memory là hiệu quả nhất imo để chế biến theo phong cách giao dịch, nơi bạn có thể phân bổ đến hồ bơi và sau đó khi giao dịch được thực hiện, chỉ cần đổ nó vào lãng quên. Tốc độ thực sự không phải là mỗi phân bổ sẽ nhanh hơn nhiều khi bạn sẽ có phân mảnh bộ nhớ gần bằng không trong một ứng dụng đang chạy rất dài.

Sắp xếp, có vẻ như các ứng dụng của bạn không đảm bảo sử dụng các nhóm bộ nhớ

+0

Điều này thực sự đã trả lời câu hỏi (mặc dù tôi chắc chắn phạm tội tối ưu hóa sớm trong trường hợp này, như được ghi nhận bởi các trả lời khác). – timday

3

Bạn có thể muốn theo dõi các vấn đề hiệu suất của mình trước khi phân bổ bộ nhớ trước khi bắt đầu tối ưu hóa cho điều đó.

Vì vậy, hãy thu hẹp hồ sơ của bạn để xác định vị trí của vấn đề. Điều này có thể có nhiều cuộc gọi đến cùng một mã có thể không mất nhiều thời gian khi chỉ được gọi một lần.

10

Tối ưu hóa mù không tốt. Hãy thử sử dụng bộ cấp phát bộ nhớ google, bạn thậm chí không cần phải biên dịch lại ứng dụng của mình. Bạn có thể tìm thấy những gì bạn cần biết ở đây:

http://google-perftools.googlecode.com/svn/trunk/doc/tcmalloc.html

Gaetano

+0

Cảm ơn con trỏ. Một trong những thứ mà tôi đang chơi là các nhóm bộ nhớ riêng biệt, nhưng tcmalloc trông giống như một cách dọn dẹp chúng. – timday

16

Có, tăng tốc 500%. Ứng dụng (khá ngu ngốc, nhưng đôi khi bạn phải làm việc với những gì bạn nhận được) sao chép các phần tử từ 1 std :: map sang một vòng lặp khác (có một số quyết định trong vòng lặp), và phân bổ kết quả trên các máy chủ đa luồng/xử lý dẫn đến tranh chấp đống. Tôi đã thêm nhóm tăng cường làm người cấp phát trên bản đồ thứ hai và kết quả là tốc độ thực thi ứng dụng tăng 500%.

Các vấn đề liên quan