h a l f b a k e r yLoading tagline ....
add, search, annotate, link, view, overview, recent, by name, random
news, help, about, links, report a problem
browse anonymously,
or get an account
and write.
register,
|
|
|
Please log in.
Before you can vote, you need to register.
Please log in or create an account.
|
I had this ideea thinking about modern graphics cards and how they have so much computing power but which remains unused a lot of the time.
So why not create PCI processor+memory cards that you can plug in into your PCI slots, and use them to do parallel processing (besides using normal CPUs) in any
regular PC.
They would just come with their own memory onboard, technically they would should not be harder to manufacture
then a graphic card (for example at speeds of a few hundred Mhz and 64-128 Mb RAM they should cost a farely small amount, comparable to, or less then, a normal graphics card).
The memory on the board would be mapped into the adress space of the process using it, so programs would simply write code into that memory, and then use a specialised control API (let's name it External Processor Api, EPA) which should ideally be a standard, used for any tipe of compatible processor, and with ports across the existing OSs. The API would most likely be some DLL or equivalent which would interface with the manufacturer's driver for the card, similar to what OpenGL for example does for graphic cards.
Sketch for a simple API:
GetProcessorInfo(processordata *data)
//get some processor info such as memory size, processor id, number of flags if implemented (see below), other capabilities,etc..
ExectueCode(void *code)
//adress of memory-mapped code to execute
SetSignalFlag(int)
ClearSignalFlag(int)
ReadSignalFlag(int)
//sets,clears,reads a signal, out of n signals the processor has.. used for sincronization and stuff
void *GetCurrentAdress()
//adress of the program counter
IsRunning()
//checks if the processor is running any code at the moment
StopCode()
//stop program
Of course the running process would be able to simply read/write the memory of the plug in processor at any time since it's mapped into it's adress space, although that would probably cause slowdown, because of the memory access from the main CPU.
Which is why i used the flag ideea, and have 2 separate memories with a separate memory controller on the board. A tipical program would load code&data into the board memory, run and when processing is finished (= one of the flags is set), retrieve the results. Thus only a limited number of memory "syncronizations" between the board and the main PC memory would occur. The operation would be asyncronous/parallel.
As you can see i haven't defined the type of processor that would be on the board. It could be general purpose (even i386 compatible), it oculd be very specialised (for math processing, engeneering, etc..), it could be some hardware implementation of a VM, it could just be for testing technology, it could be an emulation of old processor (Z80, etc...).
It could even be a porcessor that does something additional to just giving results back, as in having some ouput on the back of the card which can be used for different purposes such as automation (where it would probably most useful in practice, since you could still use a PC to control the process, yet have the software run realtime, because it dosen't compete with the other PC processes for time).
All this would be handled transparantely by the usage of the generalised API, which communicates with the specific manufacturer's low-level driver. Applications need only query the processor's type and capabilities to see if it's what they require. Also you could have more then one card installed at the same time...
Wired News article (recent)
http://www.wired.co...,1282,60791,00.html Basically just what you said [Size_Mick, Oct 04 2004]
From PlayStation to supercomputer
http://portal.ncsa....s/psx/news.com.html [krelnik, Oct 04 2004]
Archived copy of above Wired article (no longer recent)
http://web.archive....,1282,60791,00.html [notexactly, Apr 25 2019]
[link]
|
|
how is this different from the old co-processor setup Intel architectures support? Just in the PCI aspect? What about Compact PCI? |
|
|
The coprocessor was a specialised processor for floating point. I'm not sure (never heard of this) you could replace it with a general-purpose processor, or some processor that would be specialised in another field.
The main emphasis would be on the "plug and play" aspect of the thing, you can just put the processor you need in, either to add to your main processing power, or deal with your very specialised problem.
Also the generalised API which would permit such different processors to be used without too much hassle for programmers. |
|
|
It has memory too, so you'd basicly compile programs in some programming language on the PC (producing code for the target processor ofc), and put them in the cards own memory and execute them there, resulting in good parallel performance. The coprocessor used the main system memory.
Main applications in my opinion would be CPU intensive computations & automation, especially real-time. |
|
|
Baked, sorry. See my link. BTW, someone tell me, what's proper voting etiquette for an idea that's been baked? |
|
|
No i didn't. It isn't quite what i've thought about, i was more thinking about a standard for a lot of different types of cheap external processors, but i guess it's close enough :(... $25000 ? that sounds like a lot, i was thinking a few hundered $ max... |
|
|
Baked. Apple ]['s had 3rd party
add-in 8088, Z80 or even 80286
boards which you could place into
any one of its 8 slots....and this in
the early 1980's. |
|
|
Acorn computers used to market co-processors for their BBC Microcomputers in the mid-1980s. They were separately boxed units which connected to an expansion port on the bottom of the main computer. Originally a large number were planned, but I think only one or 2 were ever put into production. |
|
|
Also, if you're working on software development for non-PC hardware it is common to use development boards with a PCI interface which connect to your PC and allow you to run programs, much like this idea describes. |
|
|
Even Nintendo for the NES and SNES and Sega for the Mega Drive have supplied add-on processors either in game carts or in separate plug-in units. |
|
|
I certainly don't think either the Wired article or this idea are anything new. |
|
|
There are specific problems with this as a general-purpose consumer product, for instance the need to recompile software for each different coprocessor (optimisation and recompilation would be essential for vector processors and other number crunching engines). |
|
|
I saw an interesting article about a project to build a parallel supercomputer out of Playstation 2 game machines. The interesting part was the reason the PS2 was good for this was not the main CPU but the special purpose graphics coprocessor. The math operations it is optimized for are also useful for certain other sorts of scientific research. See link. |
|
|
Since baked by Intel as Xeon Phi, and since discontinued. |
|
| |