Página 1 de 1

Como aproveitar a presença de multiplos processadores?

Enviado: 26 Ago 2009 10:31
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.

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

Enviado: 26 Ago 2009 14:13
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.

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

Enviado: 27 Ago 2009 08:40
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?

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

Enviado: 27 Ago 2009 15:26
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.

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

Enviado: 27 Ago 2009 16:52
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
...