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

Programação C em geral

Moderadores: 51, guest2003

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

Mensagempor andre_luis » 06 Jan 2009 16:00

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 ?

+++
"Por maior que seja o buraco em que você se encontra, relaxe, porque ainda não há terra em cima."
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

Mensagempor msamsoniuk » 06 Jan 2009 17:42

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.
Avatar do usuário
msamsoniuk
Dword
 
Mensagens: 2935
Registrado em: 13 Out 2006 18:04

Mensagempor Jorge_Francisco » 06 Jan 2009 20:11

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
Avatar do usuário
Jorge_Francisco
Dword
 
Mensagens: 1009
Registrado em: 12 Out 2006 09:53
Localização: Rio de Janeiro

Mensagempor chipselect » 07 Jan 2009 07:42

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.
chipselect
Word
 
Mensagens: 744
Registrado em: 16 Out 2006 18:50

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

Mensagempor Rodrigo_P_A » 07 Jan 2009 07:59

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
Avatar do usuário
Rodrigo_P_A
Dword
 
Mensagens: 2237
Registrado em: 12 Out 2006 18:27
Localização: Osasco - S.P - Brasil

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

Mensagempor msamsoniuk » 07 Jan 2009 11:47

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
Avatar do usuário
msamsoniuk
Dword
 
Mensagens: 2935
Registrado em: 13 Out 2006 18:04

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

Mensagempor Rodrigo_P_A » 07 Jan 2009 13:08

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...
Avatar do usuário
Rodrigo_P_A
Dword
 
Mensagens: 2237
Registrado em: 12 Out 2006 18:27
Localização: Osasco - S.P - Brasil

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

Mensagempor msamsoniuk » 07 Jan 2009 16:09

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...
Avatar do usuário
msamsoniuk
Dword
 
Mensagens: 2935
Registrado em: 13 Out 2006 18:04

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

Mensagempor Rodrigo_P_A » 07 Jan 2009 17:59

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
Avatar do usuário
Rodrigo_P_A
Dword
 
Mensagens: 2237
Registrado em: 12 Out 2006 18:27
Localização: Osasco - S.P - Brasil

Mensagempor andre_luis » 07 Jan 2009 17:59

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.

+++
"Por maior que seja o buraco em que você se encontra, relaxe, porque ainda não há terra em cima."
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

Mensagempor msamsoniuk » 07 Jan 2009 20:34

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
Avatar do usuário
msamsoniuk
Dword
 
Mensagens: 2935
Registrado em: 13 Out 2006 18:04

Mensagempor andre_luis » 07 Jan 2009 21:06

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

+++
"Por maior que seja o buraco em que você se encontra, relaxe, porque ainda não há terra em cima."
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

Mensagempor msamsoniuk » 07 Jan 2009 22:02

acho q com o pthreads vc faz isso em qq plataforma cujo escalonador de processos suporte mascarar processadores.
Avatar do usuário
msamsoniuk
Dword
 
Mensagens: 2935
Registrado em: 13 Out 2006 18:04

Mensagempor helton » 08 Jan 2009 07:03

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...
Helton Marques
"Priorize as Prioridades"
helton
Byte
 
Mensagens: 146
Registrado em: 16 Out 2006 09:18
Localização: São José-SC

Mensagempor msamsoniuk » 08 Jan 2009 11:21

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.
Avatar do usuário
msamsoniuk
Dword
 
Mensagens: 2935
Registrado em: 13 Out 2006 18:04

Próximo

Voltar para Visual C++/C/C++/C#

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

x