Pergunta

O que faz a tbb::scalable_allocator em Intel Threading Building Blocks realmente fazer sob o capô?

Pode certamente ser eficaz. Eu apenas utilizado para tirar 25% off tempo de execução an aplicativos (e ver um aumento na utilização da CPU de ~ 200% a 350% em um sistema 4-core) alterando um único std::vector<T> para std::vector<T,tbb::scalable_allocator<T> >. Por outro lado, em outro aplicativo Eu já vi isso dobrar um consumo de memória já grande e enviar as coisas para a cidade de swap.

própria documentação da Intel não dá muito longe (por exemplo, uma pequena seção no final deste FAQ ). Alguém pode me dizer o que truques que ele usa antes de eu ir e cavar seu código de mim mesmo?

Atualizar : Apenas usando TBB 3.0 pela primeira vez, e visto o meu melhor aceleração de scalable_allocator ainda. A alteração de um único vector<int> para um vector<int,scalable_allocator<int> > reduziu o tempo de execução de algo de 85s a 35s (Debian Lenny, Core2, com TBB 3,0 a partir de testes).

Foi útil?

Solução

Há um bom papel no alocador: As bases para Software escalável multi-core em Intel threading Building Blocks

A minha experiência limitada: Eu sobrecarregado o novo global / apagar com o tbb :: scalable_allocator para a minha candidatura AI. Mas houve pouca mudança no perfil de tempo. Eu não comparar o uso de memória embora.

Outras dicas

A solução que você mencionou é otimizado para Intel CPUs. Ele incorpora mecanismos de CPU específicos para melhorar o desempenho.

Algum tempo atrás eu encontrei outra solução muito útil: rápido C ++ 11 alocador para contêineres STL . É ligeiramente acelera recipientes STL sobre VS2017 (~ 5x), bem como no GCC (~ 7x). Ele usa pool de memória para elementos de alocação que torna extremamente eficaz para todos os platofrms.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top