Alguem quer/pode ajudar ???

1. Alguem quer/pode ajudar ???

???
gokernel

(usa Linux Mint)

Enviado em 17/07/2012 - 19:54h


Olá pessoal !!!

Em "primeira mão" estou disponibilizando o código (base/protótipo) do meu "BYTECODE"( JBC - Jump Byte Code ) caso alguem queira ajudar a melhorar a velocidade de execução ( que alias já é super rapido):


Se alguem quiser ajudar a é só postar as melhorias que agradecerei.

DETALHE: este codigo vai ser atualizado para o meu projeto JBC ...

DETALHE2: ... praticamente compilei o código(melhoria) de "cabeça" hoje a tarde ... ;).



//-------------------------------------------------------------------
// A tiny ByteCode example ... changed
//
// FILE: jump.c
//
// This work is based in this:
//----------------------------
// http://byteworm.com/
// Benjamin Kittridge. Copyright (C) 2010, All rights reserved.
//----------------------------
//
// Test Speed ... this execute in 0.452 second in a ( CORE i3 2.1 MHZ )
//
// BY: gokernel - gokernel@hotmail.com
//-------------------------------------------------------------------

#include <stdio.h>
#include <time.h>

#define NEXT goto *(++ip)->jmp

#define NOP 0
#define INC 1
#define CMP 2
#define JMP 3
#define END 4

typedef struct Tasm Tasm;

struct Tasm {
void *jmp;
int arg;
};

void *Gtable [5] = { NULL };
Tasm code[5];


void run (Tasm *o)
{
register int a = 0;

// Setup the Gtable only one
if (Gtable [0] == NULL)
{
Gtable [0] = && label_nop;
Gtable [1] = && label_inc;
Gtable [2] = && label_cmp;
Gtable [3] = && label_jmp;
Gtable [4] = && label_end;
return;
}

Tasm *ip;

goto *(ip=o)->jmp;

label_nop: NEXT;

label_inc: a++; NEXT;

label_cmp: if (a != ip->arg) ip++; NEXT;

label_jmp: goto *(ip=o+ip->arg)->jmp;

label_end: printf ("Exiting OK ... a = %d\n", a);
}


void setup_code (Tasm *o)
{
// 00: { INC },
// 01: { CMP, 100000000 },
// 02: { JMP, 4 },
// 03: { JMP, 0 },
// 04: { END }

o[0].jmp = Gtable [INC]; o[0].arg = 0;
o[1].jmp = Gtable [CMP]; o[1].arg = 100000000; // compare a == 100 000 000
o[2].jmp = Gtable [JMP]; o[2].arg = 4;
o[3].jmp = Gtable [JMP]; o[3].arg = 0;
o[4].jmp = Gtable [END]; o[4].arg = 0;
}

int main (int argc, char *argv[])
{
run (NULL); // set the Gtable opcode( labels to jump )

// This set the ( code->jmp, code->arg )
setup_code (code);

printf ("Please wait ...\n");

clock_t init = clock ();
run (code);
clock_t end = clock ();

printf ("TIME: %ld\n", end - init);

return 0;
}



So para ter uma ideia da velocidade comparada a linguagem script atualmente mais rapida LUA:


--------------------------------------

-- Simple test count 100 000 000

value=0;

inicio = os.clock();

for i=0, 100000000 do value=i end

fim = os.clock();

print("Value : "..value.." "..fim-inicio);

--------------------------------------


Este teste acima foi executado em 3.100 segundos ... em um( CORE i3 2.1 MHZ )




  


2. Re: Alguem quer/pode ajudar ???

Perfil removido
removido

(usa Nenhuma)

Enviado em 18/07/2012 - 15:31h

Olá.

Por enquanto a possível (?) possibilidade de melhoria que penso neste momento depende do restante do código.

#define NOP 0
#define INC 1
#define CMP 2
#define JMP 3
#define END 4


Dependendo do que se for determinar, de como será alimentado o programa, alguns desses números podem ser escolhidos como potências de dois: 1, 2, 4, 8... para casar algum padrão de código mais fácil.

Não estes, necessariamente. Ele está bem elaborado, o código é bem preciso.

Seria mesmo o caso de se procurar/criar algum padrão matemático.

Se reduzir o código e não atrasar desvios de baixo nível (goto), será um caminho.


3. Re: Alguem quer/pode ajudar ???

???
gokernel

(usa Linux Mint)

Enviado em 18/07/2012 - 22:14h

Olá Listeiro 037 !!!

Este projeto JBC ( Jump Byte Code ) desenvolvo nas horas vagas e como um hobby ... geralmente dou uma adiantada nos finais de semana ( folga de trabalho ) ...

Amanha atualizarei o codigo na pagina aficial do google code.

Basicamente as funcoes "publicas" da biblioteca que ja existem e funcional sao essas:

void jbc_CoreInit (void);

Tasm *jbc_CoreOpen ( char *FileName );

void jbc_CoreRun ( Tasm *code );

01 - label ja esta funcionando ...
02 - funcoes externas em C tambem é funcional, mas em fase de testes ...

OBS: para compilar para melhor desempenho utilizar a opcao ( -O2 ) do gcc.

Amanha no final da tarde atualizarei o codigo .

Abraço !


4. Re: Alguem quer/pode ajudar ???

???
gokernel

(usa Linux Mint)

Enviado em 19/07/2012 - 18:46h


Pronto, código JBC atualizado aqui:
http://code.google.com/p/jbc/downloads/list

Ou pode-se ver o core(jbc_core.c) direto aqui:
http://codepad.org/unFYqBg7




5. Re: Alguem quer/pode ajudar ???

???
gokernel

(usa Linux Mint)

Enviado em 21/07/2012 - 12:00h


E mais uma vez atualizada para 0.7.1

add opcode: _WHILE

Pagina Oficial, com o codigo completo e exemplos:
http://code.google.com/p/jbc/downloads/list

Ou pode-se ver somente o core ( jbc_core.c ):
http://codepad.org/3ZXfm5dF



6. Re: Alguem quer/pode ajudar ???

jarlisson moreira
jarlisson

(usa Fedora)

Enviado em 21/07/2012 - 12:25h

voce ainda usa o conectiva mesmo?


7. Re: Alguem quer/pode ajudar ???

???
gokernel

(usa Linux Mint)

Enviado em 21/07/2012 - 13:33h

Olá Jarlisson !!!

Atualmente uso o windows 7 em 99% do tempo, mas tenho o MINT tambem instalado que quase não utilizo , somente algumas vezes para testar a portabilidade.

E muitas vezes utilizo o SmartPhone para postar/ler na net que alias estou utilizando para postar este direto do sófa .


8. Re: Alguem quer/pode ajudar ???

???
gokernel

(usa Linux Mint)

Enviado em 28/07/2012 - 18:22h


JBC 0.7.2 atualizada ... codigo completo e exemplos ( .jbc ):
http://code.google.com/p/jbc/downloads/list

Opcode adicionado:
----------------------------------------------------
_library - para carregar bibliotecas ( .dll ou .so ) ...
_import - para importar funcoes para Gfunc[] ...
----------------------------------------------------

Ou somente o core ( jbc_core.c ) online:
http://codepad.org/bWH1CHHz







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts