Página 1 de 2

CPU dual-core ( como alocar threads ? ) -> C++Builder

MensagemEnviado: 06 Jan 2009 16:00
por andre_luis
Pessoal,

Tenho uma pergunta pros experts :
Como consigo alocar uma thread por core ?

Eu sei que posso fazer isso no Windows manualmente por programa, mas como fazer isso ainda na compilação ?

+++

MensagemEnviado: 06 Jan 2009 17:42
por msamsoniuk
nao pode! :)

o que vc pode fazer eh criar um montao de threads, por exemplo, 100 threads... se tiver 2 cores, vai ter em media 50 em cada core, se tiver 4 cores vai ter em media 25 em cada core.

MensagemEnviado: 06 Jan 2009 20:11
por Jorge_Francisco
Pode criar uma thread e mandar executar depois de compilado, ou pode
cria-la em tempo de execução.


Posso passar um exemplo amanhã de como fazer no builder.

Vlw

MensagemEnviado: 07 Jan 2009 07:42
por chipselect
esse tipo de alocação é gerenciada pelo sistema operacional e não está acessível para o usuário, pelo menos não de uma maneira fácil.

Re: CPU dual-core ( como alocar threads ? ) -> C++Builder

MensagemEnviado: 07 Jan 2009 07:59
por Rodrigo_P_A
Não sou expert, mas veja:

http://en.wikipedia.org/wiki/.NET_Frame ... mework_4.0

não é o C Builder, mas a nova ferramenta da odiada MS, vai suportar paralelismo

Re: CPU dual-core ( como alocar threads ? ) -> C++Builder

MensagemEnviado: 07 Jan 2009 11:47
por msamsoniuk
urra! eles estao 20 anos atrasados entao hein! :)

Rodrigo_P_A escreveu:Não sou expert, mas veja:

http://en.wikipedia.org/wiki/.NET_Frame ... mework_4.0

não é o C Builder, mas a nova ferramenta da odiada MS, vai suportar paralelismo

Re: CPU dual-core ( como alocar threads ? ) -> C++Builder

MensagemEnviado: 07 Jan 2009 13:08
por Rodrigo_P_A
Marcelo Samsoniuk escreveu:urra! eles estao 20 anos atrasados entao hein! :)

Rodrigo_P_A escreveu:Não sou expert, mas veja:

http://en.wikipedia.org/wiki/.NET_Frame ... mework_4.0

não é o C Builder, mas a nova ferramenta da odiada MS, vai suportar paralelismo


é, a borland tbm, pelo que eu li, disseram aqui que não era possível fazer isso em C++ da Borland...

Re: CPU dual-core ( como alocar threads ? ) -> C++Builder

MensagemEnviado: 07 Jan 2009 16:09
por msamsoniuk
por isso eh melhor usar gcc com libpthread :)

http://sourceware.org/pthreads-win32/

Rodrigo_P_A escreveu:
Marcelo Samsoniuk escreveu:urra! eles estao 20 anos atrasados entao hein! :)

Rodrigo_P_A escreveu:Não sou expert, mas veja:

http://en.wikipedia.org/wiki/.NET_Frame ... mework_4.0

não é o C Builder, mas a nova ferramenta da odiada MS, vai suportar paralelismo


é, a borland tbm, pelo que eu li, disseram aqui que não era possível fazer isso em C++ da Borland...

Re: CPU dual-core ( como alocar threads ? ) -> C++Builder

MensagemEnviado: 07 Jan 2009 17:59
por Rodrigo_P_A
Marcelo Samsoniuk escreveu:por isso eh melhor usar gcc com libpthread :)

http://sourceware.org/pthreads-win32/

Rodrigo_P_A escreveu:
Marcelo Samsoniuk escreveu:urra! eles estao 20 anos atrasados entao hein! :)

Rodrigo_P_A escreveu:Não sou expert, mas veja:

http://en.wikipedia.org/wiki/.NET_Frame ... mework_4.0

não é o C Builder, mas a nova ferramenta da odiada MS, vai suportar paralelismo


é, a borland tbm, pelo que eu li, disseram aqui que não era possível fazer isso em C++ da Borland...


aí, sim, dada uma solução

obrigado pela dica

MensagemEnviado: 07 Jan 2009 17:59
por andre_luis
Marcelo Samsoniuk escreveu:nao pode! :)

o que vc pode fazer eh criar um montao de threads, por exemplo, 100 threads... se tiver 2 cores, vai ter em media 50 em cada core, se tiver 4 cores vai ter em media 25 em cada core.


Sim, mas o que eu queria era garantir que uma thread ( ou um executável ) terá prioridade sobro os demais.

No C++Builder, eu sei que posso atribuir prioridade distinta às threads internas de um programa; até aí atende parcialmente ao que eu queria. Mas acredito que reservando uma CPU para um executável seria até mais eficiente.

Mas se isso que perguntei, pode ser feito até manualmente pelo usuário dentro do Windows,

Código: Selecionar todos
CTRL+ALT+DEL > Gerenciador_de_Tarefas > Processos > (selecionar processo: botão esquerdo) > (Definir Afinidade: botão direito )


Será que não seria possível eu fazer isso via registro ? Vou dar mais uma pesquizada. Ainda não estou convencido que não é possível.

Valeu.

+++

MensagemEnviado: 07 Jan 2009 20:34
por msamsoniuk
na pthreads existe uma funcao padronizada que faz isso... e outras formas nativas em outros sistemas operacionais:

http://members.unine.ch/patrick.marlier ... u_affinity

MensagemEnviado: 07 Jan 2009 21:06
por andre_luis
Pelo que entendi, essa funcionalidade já é nativa no Linux, correto ?

Bom, encontrei um aplicativo que faz isso, mas que infelizmente não é free :

http://www.bitsum.com/prolasso.php

+++

MensagemEnviado: 07 Jan 2009 22:02
por msamsoniuk
acho q com o pthreads vc faz isso em qq plataforma cujo escalonador de processos suporte mascarar processadores.

MensagemEnviado: 08 Jan 2009 07:03
por helton
Até onde eu sei...o taskmgr (ctrl+alt+del) é um software feito em C++ (visual c++) que acessa uma DLL...( como tudo no windows ), portanto é possível você criar um acesso a essa DLL dentro do borland, e priorizar o seu programa que está rodando em um determinado processador. Diferentemente de uma THREAD no seu programa...acho que é mais vantajoso deixar o escalonador do windows fazer o serviço dele...

MensagemEnviado: 08 Jan 2009 11:21
por msamsoniuk
mas com esse mecanismo vc nao esta deixando um core dedicado para seu programa nao... na verdade, isso apenas deixa o processo mais lento, pq se vc tem 100 processos para rodar em um dualcore, teria que mascarar 99 deles para rodar no core 0 e apenas um para rodar no core 1.

como vc nao vai fazer isso, os outros 99 processos vao continuar se distribuindo nos dois cores a cada oportunidade de escalonar, enquanto o processo que vc mascarar para rodar no core 1 vai ter metade das oportunidades de rodar e portanto deve rodar com metade da performance. ou seja, 50% do tempo que ele teria direito ele esta dando de presente para outro processo.

na pthreads existe essa funcionalidade justamente para limitar a performance dos softwares, ou seja, vc tem uma maquina com 32 cpus, mas pagou por uma licenca que permite apenas 4 cpus. se vc quer mais cpus e mais performance, vc compra mais licencas.