[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [oc] Beyond Transmeta...



> I think you are forgeting something. Time to execute 100 sequential
> instructions
> with ILP=3 can NOT be executed faster than 33 cycles! (if not using
> superpredictivity
> methods, which are useless for real implementations).

Oh no, I'm not sure what you mean by ILP=3.

> Another thing is:
> When writting mouse handling routine you would implement mouse button as
> integer... you are SW guy, you should know that. Everybody is doing so.

For the persistent network only 1bit will be necesary per button. When using 
a network as an X86 processor it would probably be an integer for 
compatibility. The network excels at bit alignments, it can interlace bits, 
numbers that are integers do not even have to exist right next to each other.

> Your network simply won't know that there won't be other number than 0 or 1.
> Reading from HW port itself leads a compiler without clue what will it get
> from there...
> And I assume that you consider having all port values documented by compiler
> tremendous overkill. But this is not HW port property - external functions
> all have such uncertanties...

Ports are mapped to bits in the network, when the bit's values change, their 
relationships are recalculated, and all related bits if effected by the 
change are recalculted. Think of it as each bit connected to a port are like 
interrupts, when their values change the interrupt the system to be executed, 
this makes the system more reactionary to outside influence.

The compiler does not have to look at things as bits, although it would help 
in reducing memory usage. This also depends on how the network is configured, 
if the network is configured like an X86 system, then it would compile just 
like an x86 compiler, if its setup like an RISC the same thing, if it was 
custom it would compile for that custom processor, or if it was setup as a 
persistent network or somewhere inbetween a single processor and a persistent 
network, it would convert the code into a network. I believe I have discussed 
this before, when I was converting number equations into a network, I don't 
see code being much diffrent except added branching and looping, which can be 
achieved in various ways (branching seems easy enough o me, and looping is 
probably the more complicated one to setup because it is a nested branch). 
The better part of it is the shifting, being able to shift a network 
representing a program around, like shifting an equation around will allow 
you access to certain variables from other equation. Shifting may be the 
other hard part to solve for, but if it works it should do many great things, 
and its use will result in an effecient system, the more resources its given 
the more just about every application can effectively use to increase 
performance, imageine if you could build an application and it would build a 
custom processor for every part of that application (the application plays 
music, so it creates a network of multiple DSPs, and decompressors, and a 
processor to run the application), and you had a lot of 1 bit processors 
crunching away at this and enough memory to hold those processor networks. 
Your creating processors from bits and their relationships.

> You should know that programs have to be written for parallelity you
> mentioned.
> (there are special languages for parallel computers, but who uses them?)
> There is currently no known way to find parallelity between functions,
> etc...
> I am currently fighting this battle myself. I will try to find a way to
> convert
> sequential programs to parallel based through ILP (or any other suitable
> method).

If you look at functions as a serial stream of instructions, then there does 
not seem to be an easy way to find parallelity between functions. Once they 
are converted to a network, its just like an equation, they get broken down 
naturally, and you find that some instructions can be executed simultaniously 
while others cannot (they are to dependant on order), and by rearranging how 
a function works you can cause even more parallelity between functions, the 
network would essentially do the same thing. For example if I had to add 10 
number together, there is some things you cannot do in parallel. If you do it 
serially you do 9 adds one after the other, if you break it down to a network 
you can see that you can shift them around and do 5 adds simultaniously, and 
then 4 adds simultaniously after that, that is 2 passes versus 9 passes. And 
if you can only do 2 adds simultaniously then you would do 4 passes. Addition 
is simple but you can get more complicated forms of shifting with using 
subtraction, multiplies, divides, square roots, etc... in a binary network 
output is a result, inputs are your variables.

Leyland Needham