2009-03-18 33 views
25

Số tbb::scalable_allocator trong các khối xây dựng luồng của Intel thực sự làm gì dưới mui xe?Công cụ scalable_allocator của Intel TBB hoạt động như thế nào?

Nó chắc chắn có thể có hiệu quả. Tôi vừa mới sử dụng nó để giảm 25% thời gian thực hiện của ứng dụng (và tăng mức sử dụng CPU từ ~ 200% lên 350% trên hệ thống 4 lõi) bằng cách thay đổi một đơn std::vector<T> thành std::vector<T,tbb::scalable_allocator<T> >. Mặt khác trong một ứng dụng khác, tôi đã nhìn thấy nó tăng gấp đôi mức tiêu thụ bộ nhớ đã lớn và gửi mọi thứ để trao đổi thành phố.

Tài liệu của riêng Intel không cung cấp cho rất nhiều (ví dụ: phần ngắn ở cuối số FAQ) này. Bất cứ ai có thể cho tôi biết những gì nó sử dụng thủ thuật trước khi tôi đi và đào sâu vào mã của nó bản thân mình?

CẬP NHẬT: Chỉ cần sử dụng TBB 3.0 lần đầu tiên và thấy tốc độ tốt nhất của tôi từ scalable_allocator. Thay đổi một đơn vector<int> thành một số vector<int,scalable_allocator<int> > giảm thời gian chạy của một cái gì đó từ 85 giây xuống còn 35 (Debian Lenny, Core2, với TBB 3.0 từ thử nghiệm).

Trả lời

18

Có một bài báo tốt về bộ cấp phát: The Foundations for Scalable Multi-core Software in Intel Threading Building Blocks

kinh nghiệm hạn chế của tôi: Tôi quá tải mới toàn cầu/xóa với TBB :: scalable_allocator cho các ứng dụng AI của tôi. Nhưng có rất ít thay đổi trong hồ sơ thời gian. Tôi đã không so sánh việc sử dụng bộ nhớ mặc dù.

+2

Cảm ơn! Bài viết chứa chính xác loại thông tin tôi đang tìm kiếm. – timday

+3

Liên kết ban đầu hiện không còn tồn tại, nhưng CiteSeer có PDF: http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.71.8289 –

+4

Để thêm một điểm dữ liệu: trong ứng dụng cụ thể của tôi, phân bổ quyền tạm dừng tốc độ ở khoảng 15 chủ đề, qua đó nó sẽ giết tất cả tăng tốc và 40 nó sẽ chậm hơn nhiều so với thread đơn. Với 'scalable_allocator' được sử dụng trong các hạt nhân cho mỗi luồng, nút cổ chai đã biến mất và dự kiến ​​tỷ lệ quay trở lại. (máy có 40 lõi vật lý). – Adam

0

Giải pháp bạn đề cập được tối ưu hóa cho CPU Intel. Nó kết hợp các cơ chế CPU cụ thể để cải thiện hiệu suất.

Cách đây không lâu, tôi đã tìm thấy một giải pháp rất hữu ích khác: Fast C++11 allocator for STL containers. Nó hơi tăng tốc độ STL container trên VS2017 (~ 5x) cũng như trên GCC (~ 7x). Nó sử dụng hồ bơi bộ nhớ để phân bổ các yếu tố mà làm cho nó cực kỳ hiệu quả cho tất cả các platofrms.

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