Página 1 de 1
Otimizar operação matematica no clipper
Enviado: 03 Nov 2008 18:54
por ANDRIL
Pessoal, estou fazendo um teste simples:
inicio=1
fim=100000
Ocorre que no inicio, mais ou menos até 10.000 vai rapido e começa durante o loop ficar mais lento. Esta lentidao tem como resolvê-la? Tem alguma lib que faça o processador trabalhar mais rapido no calculo de variaveis.
Notei que conforme o valor de inicio se torna maior, mais lento o calculo fica.
Ate+
Re: Otimizar operação matematica no clipper
Enviado: 03 Nov 2008 20:36
por Maligno
Esse código executa dentro de uma máquina virtual que interpreta os opCodes. Acho que a cada iteração o cálculo pode estar sendo reinterpretado. A falta dessa otimização explicaria a lentidão exagerada. Sua necessidade é só com inteiros? Acho que internamente todos os cálculo numéricos são tratados como ponto flutuante, o que é um agravante.
A solução seria uma biblioteca matemática que lide com cálculos de inteiros e que seja feita em C ou Assembly. Ou fazer uma função pra isso. Ou, dependendo da aplicação, criar uma tabela de constantes com valores pré-calculados. Aliás, isso não é incomum.
Re: Otimizar operação matematica no clipper
Enviado: 04 Nov 2008 12:00
por ANDRIL
Compilei o mesmo exemplo em xharbour pra ficar 32bits e para minha surpresa ficou 3x mais lento. Imaginei que fosse ocorrer o contrário.
Se tivesse um modo de limpar o overhead durante o ciclo, acho que resolveria. Coloquei memory(-1) em alguns pontos, mais nao surtil efeito nenhum.
Já criei constantes, mais tbem nao resolveu!
Vou continuar tentando, se alguem tiver alguma ideia, agradeço.
Ate+,
Re: Otimizar operação matematica no clipper
Enviado: 04 Nov 2008 14:42
por Adalberto
Ola Andril,
Fiz uma copia de seu código, compilei assim:
Clipper Prueba
Blinker Fi Prueba
Logo o executei e finalizou em menos de um segundo, como e que você vê a demora?, Precisa mais rápido de milésimas de segundo?
Testei com inicio:= 1 e Fim:= 1000000 // um milhão
Executou em menos de 3 (três) segundos.
Um abraço
Re: Otimizar operação matematica no clipper
Enviado: 05 Nov 2008 06:42
por ANDRIL
Adalberto, tambem obtive o mesmo resultado que vc. Após perder um dia inteiro em uma única função (logaritimo) acabei por achar a tal "demora". Nada tinha a haver com o processador, e sim, com o próprio fluxo do logaritimo matemático, ou seja, a demora esta "correta".
Agradeço a ajuda de todos.
Ate+
Otimizar operação matematica no clipper
Enviado: 06 Nov 2008 17:30
por Pablo César
Olha pessoal, eu tenho a "intuição" de um druida que talvez essa operação fose feita de algum outro modo, muito possível em C e não em Clipper. O que eu acho que talvez essa operação venha a sofrer demora por causa da alocação do conteúdo numa área distante ao acesso a ULA (unidade Lógica Aritmérica) que a faz atraves da UC (Unidade de Controle) e que os Registradores (pequenas memórias que auxiliam o processador) estariam não tendo o acesso de tais endereço de forma não tão direta quanto poderia. Isto é, os registradores estaria copiando tais resultados (obtido da ULA) para a memória principal (RAM) através da UC (unidade de controle). Talvez falei chinês, nem eu mesmo entendo direito... hihihi
Ja ouví falar de bibliotecas para finalidades matemáticas, talvez seja este o caminho ou então escolher outro tipo de processador... talvez um que seja mais específico para cálculo matemáticos...
Desculpem se falei besteira, mas tem uma certa lógica. É questão também de entender como trabalham os componentes de um computador.
Re: Otimizar operação matematica no clipper
Enviado: 06 Nov 2008 17:45
por Maligno
Pablo César escreveu:Ja ouví falar de bibliotecas para finalidades matemáticas, talvez seja este o caminho
Para alguns tipos de cálculos avançados esse é o único caminho. Mas imagino que o que o OP precisa não chega a tanto. Estou só supondo.
ou então escolher outro tipo de processador... talvez um que seja mais específico para cálculo matemáticos...
Se fosse nos tempos do guaraná com rolha, até diria que seria o caso de instalar um co-processador. Antes ele não existia por default. Era comprado à parte. Se não tivesse, o código de emulação entrava em ação sempre que o processador encontrava uma instrução de co-processamento matemático.
Mas há um bom tempo já não é mais assim. Se bem que o Clipper ainda carrega o código de emulação, já totalmente inútil. Hoje a unidade matemática é um núcleo especializado dentros dos processadores X86, e é padrão nos PCs, seja qual for o fabricante. E tinha que ser mesmo, senão não haveria compatibilidade.
Otimizar operação matematica no clipper
Enviado: 06 Nov 2008 22:42
por Pablo César
Maligno escreveu:Se fosse nos tempos do guaraná com rolha, até diria que seria o caso de instalar um co-processador. Antes ele não existia por default. Era comprado à parte. Se não tivesse, o código de emulação entrava em ação sempre que o processador encontrava uma instrução de co-processamento matemático.
Agora fazendo um pouco de fundamentação teórica... (ou falando um pouco demais... hihihi) queria esclarecer que ao que eu me referia sobre processadores é com respeito ao tipo RISC versus CISC ou até mesmo um processador de main frame.
A Apple projetou seu processador RISC a qual utiliza um conjunto reduzido de instruções e que compete ou competia com o processador da Intel CISC o qual possue um número maior de instruções (mais funções matemáticas). O que facilita a vida do programador, pois o mesmo teria de codificar instruções mais complexas para alcançar seu objetivo num processador da Apple. Sei que não é o caso do colega, mas valeria a pena fazer um teste a nível de experiência: se tivesse disponibilidade de um Apple, e faria um exemplo que para um processador RISC para fazer uma multiplicação 5x2 realiza a operação 2+2+2+2+2. Também podemos dizer que mais rápido nem sempre significa melhor. Os computadores da Apple (power pc, I-mac), não são tão populares no Brasil e não dá para dizer qual é melhor. Mas quando o assunto é, por exemplo, processamento de vídeo, som e gráfico... os preferidos são os de processadores RISC. Também a questão de retro compatibilidade coloca a Intel em posição comercial previlegiada no mercado.
Ao que eu quero chegar, talvez o atual mercado, esteja "evoluindo" para criar processadores mais rápido e mais complexos para atender as funções gráficas e não tanto as funções matemáticas. Podemos observar que Pentium II já incorporam a tecnologia MMX (MultiMedia eXtensoins), a qual foi desenvolvida especialmente para processar video, audio , dados gráficos de um modo mais eficiente.
Claro como disse o Maligno, os processadores da família x86, usada em micros PC, são basicamente processadores de números inteiros. Muitos aplicativos porém, precisam utilizar números fracionários, assim como funções matemáticas complexas e que também podem emular via software estas funções matemáticas complexas, através da combinação de várias instruções simples, porém com uma baixa performance.
A instalação de um coprocessador aritmético é justamente auxiliar o processador principal no cálculo destas funções complexas. Como o coprocessador possui instruções específicas para executar vários tipos de cálculo, ele é em média de 30 a 50 vezes mais rápido do que o processador principal executando o mesmo tipo de cálculo via emulação. Só não sei se este componente é possível instalar nos microcomputadores da nossa atualidade.
Re: Otimizar operação matematica no clipper
Enviado: 11 Nov 2008 22:29
por vagucs
Andril,
A lentidão é por causa da saida de tela, mesmo em uma maquina virtual nao deveria ficar tão lento. Faça o teste com e sem a saida de tela e confira se vai dar alguma diferença.