Como eu faço um aplicativo multi-threaded usar todos os núcleos no Ubuntu no VMWare?

2

Eu tenho um aplicativo C ++ multi-threaded (usando pThreads) que processa um arquivo simples enorme que funciona muito bem no Windows - usa todos os quatro núcleos na minha CPU insignificante. O cliente quer executar o mesmo código na Red Hat em uma máquina de CPU 64 Xeon que exala fogo. Então eu compilo aqui (g ++), executei no Ubuntu no VMWare, e o código usou apenas um dos quatro núcleos. Então, eu estou pensando que é um problema VMWare, e eu enviar código para o cliente - onde ele faz a mesma coisa (tanto quanto eu posso dizer remotamente - mpstat -P ALL mostra as CPUs mal carregado). Preciso fazer algo para forçar a Red Hat a distribuir os tópicos? Há algo que estou perdendo - estou tentando mudar a prioridade "legal" a seguir - mas sinto que estou perdendo alguma coisa.

Eu posso postar código - mas, como eu disse, funciona muito bem no Windows, usa pThreads, etc.

    
por Jeff 29.06.2011 / 07:27

1 resposta

1

Eu tentaria diagnosticar se isso é um problema com seu ambiente de VM ou seu código. Aqui estão algumas coisas a considerar sobre sua VM.

  • Você tem o vmware configurado para permitir acesso a várias CPUs? Não tenho experiência com versões recentes, mas costumava ser algo que você tinha que permitir especificamente. No VirtualBox, eu tenho uma opção na configuração da máquina virtual que informa quantas CPUs o convidado tem permissão para trabalhar.

  • Se você cat /proc/cpuinfo do seu convidado do Ubuntu você vê mais de uma CPU?

  • Você obtém o uso adequado de múltiplas CPUs se você faz algo genérico como entrar no seu kernel e executar uma compilação do kernel com make -j10 ?

Se qualquer uma dessas coisas aparecer errado, elas indicarão que sua VM está configurada incorretamente, em vez de haver um problema com seu código.

    
por 29.06.2011 / 10:30