Usar processamento 8 Nucleos

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

Moderador: Moderadores

Avatar do usuário
fladimir
Colaborador
Colaborador
Mensagens: 2445
Registrado em: 15 Nov 2006 20:21

Usar processamento 8 Nucleos

Mensagem por fladimir »

Marcos, baseado no q eu escrevi e no artigo, estou me referindo a nossos sistemas executando um processo (exemplo gerando 1 relatorio q demora 8min) e consume o processamento de 01 núcleo sendo q temos 8 núcleos, não teria q processar muito mais rápido? tipo 1 min por exemplo
Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:

“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”
.


Até 2017    Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL


Novos Projetos:

   Desktop Visual           Windev Desktop
   Celular Android/iOS   Windev Mobile
   WEB                            Windev Web


Sejamos gratos a Deus.
marcosgambeta
Usuário Nível 3
Usuário Nível 3
Mensagens: 332
Registrado em: 16 Jun 2005 22:53

Usar processamento 8 Nucleos

Mensagem por marcosgambeta »

fladimir escreveu:Marcos, baseado no q eu escrevi e no artigo, estou me referindo a nossos sistemas executando um processo (exemplo gerando 1 relatorio q demora 8min) e consume o processamento de 01 núcleo sendo q temos 8 núcleos, não teria q processar muito mais rápido? tipo 1 min por exemplo
Pela lógica, uma aplicação usando uma thread não dividiria seu trabalho em mais de um núcleo. Então, o processamento de um relatório não seria afetado.

E tem a questão do acesso ao disco. Mesmo que a geração do relatório seja agilizada de certa forma, a velocidade ficaria nivelada pela velocidade com que o software lê os dados do HD.

Talvez jogando o processamento do relatório numa thread separada, ocorra alguma melhora no desempenho.
Atenciosamente,
Marcos Antonio Gambeta
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

Usar processamento 8 Nucleos

Mensagem por Jairo Maia »

Olá Pessoal,

Apenas continuando dentro desse raciocínio:

Quanto a essa questão, tudo que li até agora quando tive oportunidade, ela existe para permitir uma limitação, não uma ampliação. E sempre também li que a melhor performance é deixar esse gerenciamento por conta do SO.

Mas... aprender é sempre bom.

Outrossim, a internet está vasta de "especialistas" dizendo que é o aplicativo que tem que gerenciar isso, porém, nunca vi nenhuma explicação tecnicamente plausível. Apenas "achometros".
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Usar processamento 8 Nucleos

Mensagem por asimoes »

Uma boa ferramenta da MS é o monitor de recursos.
Screen Shot 03-16-17 at 03.27 PM.PNG
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Usar processamento 8 Nucleos

Mensagem por asimoes »

Um bom teste pra ver como trabalha a compilação do harbour (fork)
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Usar processamento 8 Nucleos

Mensagem por asimoes »

Estou gerando uma compilação do harbour agora, olha só o hbmk2
Vários processos sendo executados e encerrados
Screen Shot 03-16-17 at 03.39 PM.PNG
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Usar processamento 8 Nucleos

Mensagem por asimoes »

fiz uma cópia de arquivos com o Fastcopy agora ele criou 9 threads para copiar, super rápido.
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Usar processamento 8 Nucleos

Mensagem por asimoes »

Olha só que coisa interessante fazendo um teste de criação de tabela temporária

Código: Selecionar todos

DbCreate("mem:tstMemory", aField, "DBFCDX", .T., "tstMemory")
APPEND FROM ConRec.DBF FOR field->Cancelado == 'S' WHILE Evento() //para não sobrecarregar a aplicação
Observem que o executável demo.exe utilizou 4 threads ?????
Screen Shot 03-16-17 at 04.03 PM.PNG
Screen Shot 03-16-17 at 04.03 PM.PNG (4.37 KiB) Exibido 2805 vezes
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
fladimir
Colaborador
Colaborador
Mensagens: 2445
Registrado em: 15 Nov 2006 20:21

Usar processamento 8 Nucleos

Mensagem por fladimir »

Obrigado pelas explicações...

No teu caso Alexandre essa parte final q vc colocou ... While Evento() // para não sobrecarregar a aplicação
Q não entendi muito bem, o q faz Evento() ?
Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:

“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”
.


Até 2017    Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL


Novos Projetos:

   Desktop Visual           Windev Desktop
   Celular Android/iOS   Windev Mobile
   WEB                            Windev Web


Sejamos gratos a Deus.
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Usar processamento 8 Nucleos

Mensagem por asimoes »

Sabe aquela mensagem a "aplicação não está respondendo" serve para isso, tem situações que o executável trava por conta disso. a função Evento() é para evitar isso e usa hwg_DoEvents() mas pode ser outra que tenha a mesma finalidade.
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
fladimir
Colaborador
Colaborador
Mensagens: 2445
Registrado em: 15 Nov 2006 20:21

Usar processamento 8 Nucleos

Mensagem por fladimir »

Em console precisa será?
Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:

“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”
.


Até 2017    Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL


Novos Projetos:

   Desktop Visual           Windev Desktop
   Celular Android/iOS   Windev Mobile
   WEB                            Windev Web


Sejamos gratos a Deus.
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Usar processamento 8 Nucleos

Mensagem por asimoes »

Principalmente console, faça o teste
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
janio
Colaborador
Colaborador
Mensagens: 1846
Registrado em: 06 Jul 2004 07:43
Localização: UBAJARA - CE

Usar processamento 8 Nucleos

Mensagem por janio »

aSimoes,

Pode postar a função EVENTO()?

Janio
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Usar processamento 8 Nucleos

Mensagem por asimoes »

Janio,

Segue a função Evento()

Código: Selecionar todos

FUNCTION Evento
   hwg_DoEvents()
RETURN .T.
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Claudio Soto
Colaborador
Colaborador
Mensagens: 566
Registrado em: 27 Ago 2012 12:31
Localização: Uruguay
Contato:

Usar processamento 8 Nucleos

Mensagem por Claudio Soto »

DoEvents tiene que ser implementada a nivel de C:

Código: Selecionar todos

//-------------------------------------------------------------------------------------//
HB_FUNC ( DOEVENTS )
//-------------------------------------------------------------------------------------//
{
   MSG Msg;
   HWND hDlgModeless = NULL;
   while( PeekMessage ( &Msg, NULL, 0, 0, PM_REMOVE ) )
   {   
      hDlgModeless = GetActiveWindow();   // this is not better way of take Handle of Modeless Dialog Box

      if ( hDlgModeless == NULL || !IsDialogMessage ( hDlgModeless, &Msg ) )   // ADD June 2015
      {
         TranslateMessage ( &Msg );
         DispatchMessage  ( &Msg );
      }
   }
}
Lo que hace DoEvents es vaciar la cola de mensajes de Windows haciendo que los mismos sean procesados, esto evita que la aplicación se congele. Cuando una aplicación demora más de 5 segundos en procesar sus mensajes Windows muestra el famoso mensaje que la aplicación no responde dando la sensación de que la aplicación se travo. Por eso a nivel de prg a veces dentro de los bucles o de rutinas que demoran mucho hay que colocar DoEvents para evitar esto.
Saludos.
Dr. Claudio Soto
(Uruguay)
http://srvet.blogspot.com
Responder