Como aproveitar a presença de multiplos processadores?

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

sambomb
Usuário Nível 3
Usuário Nível 3
Mensagens: 250
Registrado em: 24 Out 2008 17:02
Localização: Itaocara - RJ - Brasil

Como aproveitar a presença de multiplos processadores?

Mensagem por sambomb »

Olá, gostaria de saber como deixar meu exe compativel com sistemas que possuem multiplos processadores...
Exemplo: em um sistema com 2 núcleos sem outros processos (pesados) rodando ele teria uma eficiencia X , onde o 1º núcleo cuidaria do SO e etc e o 2º apenas do meu sistema, sendo esse o aproveitamento máximo mas em um sistema com 3 ou mais núcleos o desempenho deveria ser aumentado ao utilizar mais de um processador para aumentar a eficiencia de processamento do meu executável.

Os processos que necessito dessa "melhoria" são lineares, ou seja, preciso finalizar um bloco para executar o próximo, sendo assim o uso de Threads não seria a solução...

Sei que existem programas e jogos que utilizam esse tipo de recurso, não sei se atraves de Threads, no caso de jogos talvez sim, mas tem o exemplo do winrar que aparentemente é linear pois realiza gravação de um arquivo.
Imagem

Rca Sistemas - Itaocara - RJ
Avatar do usuário
vagucs
Membro Master
Membro Master
Mensagens: 1480
Registrado em: 10 Jul 2004 10:45
Localização: Ipanema - MG
Contato:

Re: Como aproveitar a presença de multiplos processadores?

Mensagem por vagucs »

Bom, o SO gerencia isto muito bem, mas vc precisa usar threads para que o seu sistema abra multiplos processos. O SO gerencia qual o processador assumirá o trabalho.

Você pode também, via API escolher qual o processador vai ser usado em uma determinada thread, mas acho que isto é deveras desnecesário.

Pelo gerenciador de tarefas é possivel definir afinidades de processos com uma determinada CPU.

procure por "thread affinity source code" no google, vai achar muitos artigos a respeito.
Sem mais
Wagner Nunes
www.vagucs.com.br
sambomb
Usuário Nível 3
Usuário Nível 3
Mensagens: 250
Registrado em: 24 Out 2008 17:02
Localização: Itaocara - RJ - Brasil

Re: Como aproveitar a presença de multiplos processadores?

Mensagem por sambomb »

Até ae eu já sabia.... Queria saber se havia algum modo de dividir o processamento entre múltiplos processadores, mas aparentemente não é possível...
Só existem soluções para realizar "múltiplos processos"...

Mesmo assim obrigado ;)


Obs.: Pode dar um exemplo de um local em que seria interessante o uso de threads?
Imagem

Rca Sistemas - Itaocara - RJ
Avatar do usuário
vagucs
Membro Master
Membro Master
Mensagens: 1480
Registrado em: 10 Jul 2004 10:45
Localização: Ipanema - MG
Contato:

Re: Como aproveitar a presença de multiplos processadores?

Mensagem por vagucs »

bom, dividir um mesmo processo para 2 processador ai não tem jeito não.

Poucos processos seriam possíveis, mas quando um determinado processo depende de um resultador de fatores do inicio do mesmo, seria impossível dividir a tarefa, e mesmo quando existe esta possibilidade é algo que tem que ser muito bem programado.

Igual um processamento de uma image. Dependo do efeito você poderá usar 2 processadores, 1 faz a primeira parte da imagem e outro a segunda parte. Mas existem efeitos que nao tem como um segundo processador fazer o restante, pois ele depende de como irá ficar o início da imagem.

Então tudo depende.
Sem mais
Wagner Nunes
www.vagucs.com.br
sambomb
Usuário Nível 3
Usuário Nível 3
Mensagens: 250
Registrado em: 24 Out 2008 17:02
Localização: Itaocara - RJ - Brasil

Re: Como aproveitar a presença de multiplos processadores?

Mensagem por sambomb »

Pelo visto é realmente inviável... Mas por enquanto não irei mais precisar desse artificio, achei um erro no meu código que estava atrasando o programa, agora de mais de 1 hora para executar o bloco demoro 4:31 minutos.


Observação: o erro estava em basicamente 1 linha apenas.

Código: Selecionar todos

...
   //-- Calcular o tamanho do txt
   //nLinhas := MlCount( cTxt) //-- O erro estava aqui, faltavam os parâmetros
   nLinhas := MlCount( cTxt,3000,,,.T.)
   oMeter:nTotal := nLinhas

   oText:SetText("Calculando estrutura do arquivo")

   //-- Roda todas as linhas do TXT
   for i := 1 TO nLinhas
...
Imagem

Rca Sistemas - Itaocara - RJ
Responder