Re: Translator Runtime Checking

new topic     » goto parent     » topic index » view thread      » older message » newer message

Hey!
Yall keep mailing me complaints bout' me choking this
place with posts, and then I didn't see a single
damned post by anyone in the last six hours, so I'm
gonna post to keep Topica from deleting the list
because it has being abandoned or some shit ;)


--- Robert Craig <rds at RapidEuphoria.com> wrote:
> Most of the checks that are done inside a library
> routine
> are still there, since the library routines are
> shared
> between the interpreter and the translator. In most
> cases
> this checking adds very little overhead.
> 
> The in-line, generated C code has virtually no
> checks.
> - no subscript out of bounds check
> - no uninitialized variable check
> - no type checks

Hmm...

> The lack of error checking accounts for some of the
> speed-up in translated code, but there are also many
> other
> reasons why translated code is faster than the
> interpreter.
> 
> So why isn't it as fast as hand-coded C?

That's what I was woundering... ;)

> On sieve.ex and shell.ex, I think it's now about
> two thirds as fast as hand-coded C.

Excelent news, ain't it guys?

> It's hard to make it 100% as fast as hand-coded C.
> Some of the main reasons are:
>     - Euphoria doesn't require you to specify your
> data types
>       e.g. a sequence could contain an arbitrary mix
> of data
>       and you can't tell until runtime what the data
> types are
> 
>     - Euphoria looks after all your dynamic storage
> allocation needs.
>       C leaves it up to you to call malloc and free
> and keep track
>       of things.
> 
>     - Euphoria supports integer calculations that
> overflow
>       automatically into floating-point as needed.
> The translator
>       also supports this, and must check for
> overflow.

And if you'd write a C program 'as it should', meaning
with integer to float overflows (tip: Some modern FPUs
make floating point operations faster than some
integer 
operations. Maybe atoms should be declared as
'floats'?
You'll eliminate a lot of checks!),
and garbage collection through refernce counting (read
the article about that on Gamedev.net explaining how
to do it), then any C program will run at 2/3rds its
original speed.
A lot of commercial games out there actually run
2/3rds slower because of (often crappy) memory
handling routines and garbage collection.

Plus, most high-performance games out there were coded
in C++, not C, wich is slower than C anyways (because
of classes, constructors and destructors being called
upon declaration, the size of a class in memory,
etc.).

> Regards,
>    Rob Craig
>    Rapid Deployment Software
>    http://www.RapidEuphoria.com


Keep up the good work, man!
The translator rocks!


Mike The Spike

new topic     » goto parent     » topic index » view thread      » older message » newer message

Search



Quick Links

User menu

Not signed in.

Misc Menu