Half a croissant, on a plate, with a sign in front of it saying '50c'
h a l f b a k e r y
Invented by someone French.

idea: add, search, annotate, link, view, overview, recent, by name, random

meta: news, help, about, links, report a problem

account: browse anonymously, or get an account and write.

user:
pass:
register,


                       

External PC processors

External PC processors for PCs & general APIs for external processors.
  (+2)
(+2)
  [vote for,
against]

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...

helix, Jan 12 2004

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?
theircompetitor, Jan 12 2004
  

       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.
helix, Jan 12 2004
  

       Baked, sorry. See my link. BTW, someone tell me, what's proper voting etiquette for an idea that's been baked?
Size_Mick, Jan 13 2004
  

       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...
helix, Jan 13 2004
  

       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.
timbeau, Jan 13 2004
  

       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).
kropotkin, Jan 13 2004
  

       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.
krelnik, Jan 13 2004
  

       Since baked by Intel as Xeon Phi, and since discontinued.
notexactly, Apr 25 2019
  
      
[annotate]
  


 

back: main index

business  computer  culture  fashion  food  halfbakery  home  other  product  public  science  sport  vehicle