문제

무엇을합니까 tbb::scalable_allocator 인텔 스레딩 빌딩 블록은 실제로 후드 아래에서 수행합니까?

확실히 효과적 일 수 있습니다. 방금 앱의 실행 시간을 25% 할인하기 위해 사용했습니다 (4 코어 시스템에서 CPU 활용이 ~ 200%에서 350%로 증가 함). std::vector<T> 에게 std::vector<T,tbb::scalable_allocator<T> >. 반면에 다른 앱에서 나는 이미 큰 메모리 소비를 두 배로 늘리고 Swap City에 물건을 보냈습니다.

인텔의 자체 문서는 많은 것을 제공하지 않습니다 (예 : 이것의 끝 부분에 짧은 섹션 자주하는 질문). 누구든지 내가 가서 코드를 직접 파헤 치기 전에 어떤 트릭을 사용하는지 말해 줄 수 있습니까?

업데이트: 처음으로 TBB 3.0을 사용하고 Spelable_allocator에서 가장 좋은 속도를 보았습니다. 싱글 변경 vector<int> a vector<int,scalable_allocator<int> > 무언가의 런타임을 85 대에서 35s로 줄였습니다 (테스트에서 TBB 3.0으로 Debian Lenny, Core2, Core2).

도움이 되었습니까?

해결책

할당 자에 좋은 논문이 있습니다. 인텔 스레딩 빌딩 블록의 확장 가능한 멀티 코어 소프트웨어의 기초

제한된 경험 : AI 응용 프로그램을 위해 TBB :: Scalable_allocator로 글로벌 신규/삭제를 과부하했습니다. 그러나 시간 프로필에는 거의 변화가 없었습니다. 그래도 메모리 사용량을 비교하지 않았습니다.

다른 팁

언급 한 솔루션은 Intel CPU에 최적화되었습니다. 성능을 향상시키기 위해 특정 CPU 메커니즘을 통합합니다.

언젠가는 또 다른 매우 유용한 솔루션을 찾았습니다. STL 컨테이너 용 빠른 C ++ 11 할당 자. VS2017 (~ 5x)과 GCC (~ 7x)의 STL 컨테이너 속도를 약간 속입니다. 요소 할당에 메모리 풀을 사용하여 모든 Platofrms에 매우 효과적입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top