Busca

Busca  



Todos os Horários estão como UTC - 3 horas




Criar novo tópico Responder Tópico  [ 11 Mensagens ]  Ir para a página 1, 2  Próximo
Autor Mensagem
 Assunto do Tópico: Quantas vezes o codigo ASM, é mais rapido que o C.+perguntas
MensagemEnviado: Qui Mar 30, 2006 6:04 am 
Offline
Avatar de usuário

Data de registro: Qui Set 29, 2005 2:02 am
Mensagens: 47
Bom é essa a pergunta... A unica coisa que eu sei, é que é bem mais rapido.


Editado pela última vez por v3n0w em Qui Mar 30, 2006 5:29 pm, num total de 1 vezes

Voltar ao topo
 Perfil  
 
 Assunto do Tópico:
MensagemEnviado: Qui Mar 30, 2006 8:57 am 
Offline
Avatar de usuário

Data de registro: Dom Fev 13, 2005 12:56 pm
Mensagens: 56
Localização: Chapecó, Santa Catarina
A não ser em casos *muito* específicos, a diferença não é significativa. Na dúvida faça um programa simples e confira.


Voltar ao topo
 Perfil  
 
 Assunto do Tópico:
MensagemEnviado: Qui Mar 30, 2006 10:49 am 
Offline

Data de registro: Seg Out 07, 2002 3:15 pm
Mensagens: 316
Localização: Rio de Janeiro/RJ
Na verdade, essa pergunta não faz muito sentido.
O que o compilador C faz é transformar seu código em instruções para seu computador. Instruções essas que tem relação 1 para 1 com o ASM. Ou seja, é como se o seu programa C virasse um ASM.

Bom, aonde vc poderia ganhar velocidade, seria entendendo COMO o compilador gera o ASM, saber onde ele faz um ASM não otimizado para o seu objetivo e aí, nesses casos, fazer seu próprio ASM.

Agora, o compilador geralmente é algo MUITO inteligente que vai gerar um código provavelmente BEM otimizado que não é qualquer um que consegue fazer melhor.

Quem usa ASM, geralmente usa misturado ao programa C (ou Pascal), em pontos críticos que o programador SABE que o compilador não vai fazer a melhor solução.


Voltar ao topo
 Perfil  
 
 Assunto do Tópico:
MensagemEnviado: Qui Mar 30, 2006 5:20 pm 
Offline
Avatar de usuário

Data de registro: Qui Set 29, 2005 2:02 am
Mensagens: 47
Bom, fazendo um progaminha, nao vai dar pra notar a diferença.. Mas vejamos assim, um emulador de snes feito em asm, roda em 486(dos), já outro emulador de snes, feito em C, precisa de no minimo um pentium 2.

Seria no caso, o ZSNES, e o SNES9X respectivamente.

E assim, o ZSNES é 86% em asm, sera que eles se dariam o trabalho de fazer em asm, por hobby mesmo, ou porque fica mais rapidao mesmo?

E eu nao creio que o compilar gere um asm, a partir de C, que fique parecido como se fosse orignalmente progamado em asm.

Mas aproveitando o topico, eu tenho mais algumas perguntinhas...

Como pode um progama ser progamado em 2 linguagens?? Onde ficaria o eixo entre as duas linguagem? Biblioteca C acessa ASM? Como ele seria compilado?

Outra.. A maioria dos codigos fontes que eu pego eu simplismente nao acho o MAIN, o codigo é super dividido... Ou seja, seria possivel de fazer um codigo em C, sem o main? Ou ele estaria em algum lugar e eu que nao to achando?

Como exemplo olhem o codigo do pcsx2, emulador de psx2, e vejam se vcs acham um main, na coisa. http://www.pcsx2.net/pcsx2download.php?aid=180

Vlww :wink:


Voltar ao topo
 Perfil  
 
 Assunto do Tópico:
MensagemEnviado: Qui Mar 30, 2006 6:05 pm 
Offline

Data de registro: Seg Out 07, 2002 3:15 pm
Mensagens: 316
Localização: Rio de Janeiro/RJ
Não falei que é sempre a mesma velocidade. Falei que na maioria dos casos não vale a pena ou não há diferença. E qua pra fazer diferença o cara tem que conhecer muito bem o ASM e o que o COMPILADOR fazem.

Programar em C em ASM nao eh bem duas linguagens, como seria C e Pascal. Não esqueca que todo o código C vai virar ASM. voce consegue no C e no Pascal também criar uma procedure e colocar código ASM dentro dela. Tenho um exemplo aqui em algum lugar... depois procuro e posto

Ah... e SIM, acredito que tem gente que faz em ASM por puro prazer... Sem contar que um emulador é algo BEM específico, que é basicamente traduzir as chamadas de API dos dois Sistemas Operacionais e traduzir as chamadas ASM.

v3n0w escreveu:
Bom, fazendo um progaminha, não vai dar pra notar a diferença.. Mas vejamos assim, um emulador de snes feito em asm, roda em 486(dos), já outro emulador de snes, feito em C, precisa de no minimo um pentium 2.

Seria no caso, o ZSNES, e o SNES9X respectivamente.

E assim, o ZSNES é 86% em asm, sera que eles se dariam o trabalho de fazer em asm, por hobby mesmo, ou porque fica mais rapidao mesmo?

E eu não creio que o compilar gere um asm, a partir de C, que fique parecido como se fosse orignalmente progamado em asm.

Mas aproveitando o tópico, eu tenho mais algumas perguntinhas...

Como pode um progama ser progamado em 2 linguagens?? Onde ficaria o eixo entre as duas linguagem? Biblioteca C acessa ASM? Como ele seria compilado?

Outra.. A maioria dos codigos fontes que eu pego eu simplismente não acho o MAIN, o codigo é super dividido... Ou seja, seria possivel de fazer um codigo em C, sem o main? Ou ele estaria em algum lugar e eu que não to achando?

Como exemplo olhem o codigo do pcsx2, emulador de psx2, e vejam se vocês acham um main, na coisa. http://www.pcsx2.net/pcsx2download.php?aid=180

Vlww :wink:


Voltar ao topo
 Perfil  
 
 Assunto do Tópico:
MensagemEnviado: Qui Mar 30, 2006 6:13 pm 
Offline
Avatar de usuário

Data de registro: Dom Fev 13, 2005 12:56 pm
Mensagens: 56
Localização: Chapecó, Santa Catarina
v3n0w escreveu:
Bom, fazendo um progaminha, não vai dar pra notar a diferença.. Mas vejamos assim, um emulador de snes feito em asm, roda em 486(dos), já outro emulador de snes, feito em C, precisa de no minimo um pentium 2.


Dá sim. Com um programinha simples com algumas funções, loops, ponteiros e afins já é possível quantificar o quão eficiente o compilador é.

v3n0w escreveu:
Seria no caso, o ZSNES, e o SNES9X respectivamente.

E assim, o ZSNES é 86% em asm, sera que eles se dariam o trabalho de fazer em asm, por hobby mesmo, ou porque fica mais rapidao mesmo?

E eu não creio que o compilar gere um asm, a partir de C, que fique parecido como se fosse orignalmente progamado em asm.


Gera sim. Sente . Embora eu deva admitir que acho o trabalho de desenvolvimento de um emulador uma área aonde é bem possível achar muitos dos casos específicos que eu quis citar, isto não quer dizer muita coisa. Existem coisas muito mais complexas feitas em sua maior parte em C (vide o kernel do Linux, por exemplo).
E o que o Ashdrubal falou é verdade, é muito mais vantagem conhecer o compilador que você está usando (bem como as possibilidades de otimização que ele te fornece) e utilizado assembly aonde você sabe que o resultado não será bom, do que simplesmente escrever tudo usando assembly.

v3n0w escreveu:
Mas aproveitando o tópico, eu tenho mais algumas perguntinhas...

Como pode um progama ser progamado em 2 linguagens?? Onde ficaria o eixo entre as duas linguagem? Biblioteca C acessa ASM? Como ele seria compilado?


Isso varia de compilador para compilador. No caso do gcc, você usa uma "extensão" que é definida usando:
Código:
__asm__ ("
codigo ");


v3n0w escreveu:
Outra.. A maioria dos codigos fontes que eu pego eu simplismente não acho o MAIN, o codigo é super dividido... Ou seja, seria possivel de fazer um codigo em C, sem o main? Ou ele estaria em algum lugar e eu que não to achando?


Você não está achando porque:
1) Basicamente: não tem. main(), no C é apenas um alias para definir o começo do segmento "text" de um binário, ou seja, aonde realmente começa o código.
2) Entretanto, você deve encontrar a função inicial do programa a partir da definição do segmento. Ex.:
3) Varia de arquitetura para arquitetura.

Código:
.global: main
blá
blá
blá

main:
código


v3n0w escreveu:
Como exemplo olhem o codigo do pcsx2, emulador de psx2, e vejam se vocês acham um main, na coisa. http://www.pcsx2.net/pcsx2download.php?aid=180

Vlww :wink:


Esse código em questão tem um main sim (pelo menos para Linux). Ele está no arquivo Linux/LnxMain.c (linha 54).

Por fim, ressalto que alguma das coisas que eu falei podem não se aplicar a outras plataformas. Eu conheço bem pouco de assembly, e em geral em Linux e FreeBSD.

[]'s


Voltar ao topo
 Perfil  
 
 Assunto do Tópico:
MensagemEnviado: Qui Mar 30, 2006 9:39 pm 
Offline
Avatar de usuário

Data de registro: Qui Set 29, 2005 2:02 am
Mensagens: 47
AngusYoung escreveu:
v3n0w escreveu:
Bom, fazendo um progaminha, não vai dar pra notar a diferença.. Mas vejamos assim, um emulador de snes feito em asm, roda em 486(dos), já outro emulador de snes, feito em C, precisa de no minimo um pentium 2.


Dá sim. Com um programinha simples com algumas funções, loops, ponteiros e afins já é possível quantificar o quão eficiente o compilador é.

v3n0w escreveu:
Seria no caso, o ZSNES, e o SNES9X respectivamente.

E assim, o ZSNES é 86% em asm, sera que eles se dariam o trabalho de fazer em asm, por hobby mesmo, ou porque fica mais rapidao mesmo?

E eu não creio que o compilar gere um asm, a partir de C, que fique parecido como se fosse orignalmente progamado em asm.


Gera sim. Sente . Embora eu deva admitir que acho o trabalho de desenvolvimento de um emulador uma área aonde é bem possível achar muitos dos casos específicos que eu quis citar, isto não quer dizer muita coisa. Existem coisas muito mais complexas feitas em sua maior parte em C (vide o kernel do Linux, por exemplo).
E o que o Ashdrubal falou é verdade, é muito mais vantagem conhecer o compilador que você está usando (bem como as possibilidades de otimização que ele te fornece) e utilizado assembly aonde você sabe que o resultado não será bom, do que simplesmente escrever tudo usando assembly.

v3n0w escreveu:
Mas aproveitando o tópico, eu tenho mais algumas perguntinhas...

Como pode um progama ser progamado em 2 linguagens?? Onde ficaria o eixo entre as duas linguagem? Biblioteca C acessa ASM? Como ele seria compilado?


Isso varia de compilador para compilador. No caso do gcc, você usa uma "extensão" que é definida usando:
Código:
__asm__ ("
codigo ");


v3n0w escreveu:
Outra.. A maioria dos codigos fontes que eu pego eu simplismente não acho o MAIN, o codigo é super dividido... Ou seja, seria possivel de fazer um codigo em C, sem o main? Ou ele estaria em algum lugar e eu que não to achando?


Você não está achando porque:
1) Basicamente: não tem. main(), no C é apenas um alias para definir o começo do segmento "text" de um binário, ou seja, aonde realmente começa o código.
2) Entretanto, você deve encontrar a função inicial do programa a partir da definição do segmento. Ex.:
3) Varia de arquitetura para arquitetura.

Código:
.global: main
blá
blá
blá

main:
código


v3n0w escreveu:
Como exemplo olhem o codigo do pcsx2, emulador de psx2, e vejam se vocês acham um main, na coisa. http://www.pcsx2.net/pcsx2download.php?aid=180

Vlww :wink:


Esse código em questão tem um main sim (pelo menos para Linux). Ele está no arquivo Linux/LnxMain.c (linha 54).

Por fim, ressalto que alguma das coisas que eu falei podem não se aplicar a outras plataformas. Eu conheço bem pouco de assembly, e em geral em Linux e FreeBSD.

[]'s


pow cara legal, voce parece manjar...

E sobre emulacao de chips, vc sabe algo? O cara mandou eu comecar na emulacao, emulando, o chip8, voce sabe doque se trata?


Voltar ao topo
 Perfil  
 
 Assunto do Tópico:
MensagemEnviado: Qui Mar 30, 2006 10:11 pm 
Offline

Data de registro: Seg Fev 13, 2006 9:14 pm
Mensagens: 83
v3n0w escreveu:
Bom, fazendo um progaminha, não vai dar pra notar a diferença.. Mas vejamos assim, um emulador de snes feito em asm, roda em 486(dos), já outro emulador de snes, feito em C, precisa de no minimo um pentium 2.


v3n0w, essa não é uma comparação válida. Ninguem pode garantir que os dois programas implementam exatamente os mesmos algoritmos! Outra coisa, um deles pode simplesmente exigir pentium 2 para poder aproveitar-se das instruções novas de vetorização que ele oferece, onde ele consegue processar mais dados com menos ciclos. ;)

O Compilador tem sim vários estágios em que ele transforma o código C ou C++ para otimizá-lo, no entanto, ele muitas vezes é conservador. É ai que a rotina asm pode ser mais rápida, o programador conhecendo melhor a estrutura do programa pode fazer uma otimização mais agressiva do que o compilador... no entanto, na maioria das vezes o compilador faz um trabalho melhor. A seleção de instruções é uma coisa por exemplo que varia muito de CPU para CPU.

Lembre-se que a micro otimização não costuma trazer os melhores resultados, e você deve focar primeiramente na otimização dos algoritmos, e sempre baseado em métricas obtidas de um profiler. É a regra do 80-20, ou 90-10 como alguns acreditam, que diz que 80% do tempo de execução se passa em 20% do código.... por isso não faz sentido perder tempo otimizando tudo para ter um ganho ínfimo.

Otimização é um assunto muito interessante, mas lembre-se que o mais importante é que o programa funcione, por isso o ideal é ter a otimização em mente mas deixá-la para o final, depois que tudo funciona como deveria ;)


Voltar ao topo
 Perfil  
 
 Assunto do Tópico:
MensagemEnviado: Qui Mar 30, 2006 11:05 pm 
Offline
Avatar de usuário

Data de registro: Qui Set 29, 2005 2:02 am
Mensagens: 47
Correa escreveu:
v3n0w escreveu:
Bom, fazendo um progaminha, não vai dar pra notar a diferença.. Mas vejamos assim, um emulador de snes feito em asm, roda em 486(dos), já outro emulador de snes, feito em C, precisa de no minimo um pentium 2.


v3n0w, essa não é uma comparação válida. ninguém pode garantir que os dois programas implementam exatamente os mesmos algoritmos! Outra coisa, um deles pode simplesmente exigir pentium 2 para poder aproveitar-se das instruções novas de vetorização que ele oferece, onde ele consegue processar mais dados com menos ciclos. ;)

O Compilador tem sim vários estágios em que ele transforma o código C ou C++ para otimizá-lo, no entanto, ele muitas vezes é conservador. É ai que a rotina asm pode ser mais rápida, o programador conhecendo melhor a estrutura do programa pode fazer uma otimização mais agressiva do que o compilador... no entanto, na maioria das vezes o compilador faz um trabalho melhor. A seleção de instruções é uma coisa por exemplo que varia muito de CPU para CPU.

Lembre-se que a micro otimização não costuma trazer os melhores resultados, e você deve focar primeiramente na otimização dos algoritmos, e sempre baseado em métricas obtidas de um profiler. É a regra do 80-20, ou 90-10 como alguns acreditam, que diz que 80% do tempo de execução se passa em 20% do código.... por isso não faz sentido perder tempo otimizando tudo para ter um ganho ínfimo.

Otimização é um assunto muito interessante, mas lembre-se que o mais importante é que o programa funcione, por isso o ideal é ter a otimização em mente mas deixá-la para o final, depois que tudo funciona como deveria ;)


Ah, sim o problema de otimizacao, é um problema serio do emuladores de vgs atuais, o de dreamcast, tem pouca otimizacao, já que foi abandonado e o do psx2, esta comecando a ser otimizado agora... Com um salto de 20x, a velocidade anterior.
de 1 fps, foi para 20fps.. hehehe


Voltar ao topo
 Perfil  
 
 Assunto do Tópico:
MensagemEnviado: Sex Mar 31, 2006 9:04 am 
Offline
Avatar de usuário

Data de registro: Dom Fev 13, 2005 12:56 pm
Mensagens: 56
Localização: Chapecó, Santa Catarina
v3n0w escreveu:
...

E sobre emulacao de chips, você sabe algo? O cara mandou eu comecar na emulacao, emulando, o chip8, voce sabe doque se trata?


Eu não conheço o chip em questão, mas se eu entendi direito o que ele quis dizer ele deve ter lhe recomendado a implementar, via código, o funcionamento de um chip específico. Eu não vou nem entrar no mérito de explicar porque eu não tenho conhecimento sobre o assunto. Se eu fosse você, eu começaria por aqui e por aqui.

Boa sorte!


Voltar ao topo
 Perfil  
 
Mostrar mensagens anteriores:  Organizar por  
Criar novo tópico Responder Tópico  [ 11 Mensagens ]  Ir para a página 1, 2  Próximo

Todos os Horários estão como UTC - 3 horas


Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 0 visitantes


Você não pode criar novos tópicos neste fórum
Você não pode responder tópicos neste fórum
Você não pode editar suas mensagens neste fórum
Você não pode excluir suas mensagens neste fórum
Você não pode enviar anexos neste fórum

Ir para:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Traduzido por phpBB do Brasil
logo
logo

Copyright © 2000-2010 Fórum PCs - Todos os direitos reservados.
Não nos responsabilizamos por danos de qualquer espécie causados pelo uso das informações aqui divulgadas.