Lançado MentaAffinity - Para threads críticos com fome de processador!

7 respostas
saoj

http://mentaaffinity.soliveirajr.com/

Alguns threads simplesmente não podem ser interrompidos. O MentaAffinity é um framework em Java que te permite travar os seus threads em processadores lógicos específicos sem que eles sejam interrompidos por ninguém. Dessa maneira vc pode escolher uma estratégia para maximizar a utilização dos caches L1 e L2 além de nunca mais perder tempo com context switches e hardware interrupts.

Acho que além da api bem fácil de utilizar, a documentação simplifica bastante os conceitos separando a arquitetura em Chip, Core e Processor.

O que vc vai querer testar:

:arrow: Dois threads rodando em chips separados (só compartilham L3)
:arrow: Dois threads rodando em cores separados (só compartilham L2 e L3)
:arrow: Dois threads rodando no mesmo core (compartilham L1, L2 e L3)

A última opção necessita de suporte a hyper-threading.

Para ter certeza que está funcionando, use o comando ‘top’ do Linux e depois pressione ‘1’.

Qualquer dúvida poste aqui.

7 Respostas

Ironlynx

Dois threads rodando no mesmo core (compartilham L1, L2 e L3)

Se precisa de HT só funciona num Intel?Já testou na abordagem modular como funciona num Bulldozer?

saoj

Ironlynx:
Dois threads rodando no mesmo core (compartilham L1, L2 e L3)

Se precisa de HT só funciona num Intel?Já testou na abordagem modular como funciona num Bulldozer?

Cada abordagem tem suas vantagens e desvantagens. Só colocando os threads para rodar que dá para ter uma idéia. Vai depender tb se os threads precisam compartilhar dados ou não.

Não precisa de HT, mas eu achava que, pelo menos no mundo Intel, um Core = um processador lógico a não ser que tenha HT, aí são dois.

Ironlynx


Não precisa de HT, mas eu achava que, pelo menos no mundo Intel, um Core = um processador lógico a não ser que tenha HT, aí são dois.

Na teoria, a abordagem modular seria muito mais rápida do que a com núcleos lógicos(i.e.:se fossem consideradas mesma frequência e implementação de cache), mas bugs horrorosos principalmente no sistema de prefetch e no L3 e uma má abordagem e alta latência do L1 tornaram o Bulldozer uma piada.Mas a nova versão dele(núcleo Piledriver) já tá mostrando uns ganhos espantosos.A APU Trinity(núcleo Piledriver SEM L3), já tem mostrado um processamento de inteiros até 40% mais rápida.Coisas boas virão.Parabéns pelo projeto. :wink:

Ataxexe

Parabéns, Sérgio.

Vi que tem umas coisas parecidas com o Java-Thread-Affinity <https://github.com/peter-lawrey/Java-Thread-Affinity>. Quais seriam as diferenças entre o MentaAffinity e esse?

saoj

Ataxexe:

Vi que tem umas coisas parecidas com o Java-Thread-Affinity <https://github.com/peter-lawrey/Java-Thread-Affinity>. Quais seriam as diferenças entre o MentaAffinity e esse?

API bem mais simples e documentação bem mais clara. Eu tentei usar o Java-Thread-Affinity e não consegui. Abri esse issue: https://github.com/peter-lawrey/Java-Thread-Affinity/issues/32

O que mais me motiva é tentar escrever códigos bastante simples de entender e usar. Está cheio de frameworks poderosos e complexos por aí.

Uma coisa que percebo tb que as vezes tão ou mais importante que o código é a documentação.

maior_abandonado

meus parabens… mesmo, não só pelo projeto mas pela quantidade de projetos que você tem anunciado… inclusive vi recentemente você anunciando aqui um outro que se não me engano também era relacionado a threads(não lembro exatamente o que), aliás faz bem pouco tempo… está de parabéns mesmo por esse trabalho…

jmag

Parabéns, Sérgio.

Já utilizei alguns de seus projetos… e gostei bastante :slight_smile:

abraços

Criado 19 de abril de 2012
Ultima resposta 20 de abr. de 2012
Respostas 7
Participantes 5