When Mistakes Improve Performance
jd and other readers pointed out BBC coverage of research into "stochastic" CPUs that allow communication errors in order to reap benefits in performance and power usage. "Professor Rakesh Kumar at the University of Illinois has produced research showing that allowing communication errors between microprocessor components and then making the software more robust will actually result in chips that are faster and yet require less power. His argument is that at the current scale, errors in transmission occur anyway and that the efforts of chip manufacturers to hide these to create the illusion of perfect reliability simply introduces a lot of unnecessary expense, demands excessive power, and deoptimises the design. He favors a new architecture, that he calls the 'stochastic processor,' which is designed to handle data corruption and error recovery gracefully. He believes he has shown such a design would work and that it would permit Moore's Law to continue to operate into the foreseeable future. However, this is not the first time someone has tried to fundamentally revolutionize the CPU. The Transputer, the AMULET, the FM8501, the iWARP, and the Crusoe were all supposed to be game-changers but died cold, lonely deaths instead — and those were far closer to design philosophies programmers are currently familiar with. Modern software simply isn't written with the level of reliability the stochastic processor requires (and many software packages are too big and too complex to port), and the volume of available software frequently makes or breaks new designs. Will this be 'interesting but dead-end' research, or will Professor Kumar pull off a CPU architectural revolution really not seen since the microprocessor was designed?"
If the processor goofs up the instructions that its supposed to execute, how does it recover gracefully?
Bu) I l/ved in thE day oI the 2400 baUUUd modem.
Please read my Canon EOS tech blog at http://www.everyothershot.com
Wouldn't it be simpler to simply add redundancy and CRC or something similar to that effect?
I wonder what Harold would have to say about Prof. Kumar's theory.
http://www.object404.com
The "robustification" of software, as he calls it, involves re-writing it so an error simply causes the execution of instructions to take longer.
Ooh, this is tricky. So we can reduce CPU power consumption by a certain amount if we rewrite software in such a way that it can slowly roll over errors when they take place. There are some crude numbers in the document: a 1% error rate, whatever that means, causes a 23% drop in power consumption. What if the `robustification' of software means that it has an extra "check" instruction for every three "real" instructions? Now you're back to where you started, but you had to rewrite your software to get here. I know, it's unfair to compare his proven reduction in power consumption with my imaginary ratio of "check" instructions to "real" instructions, but my point still stands. This system may very well move the burden of error correction from the hardware to the software in such a way that there is no net gain.
Consider that we currently can't even write software that is reliable on relatively error-free hardware. Introducing faulty hardware will just make everything suck even more.
This is just like all the other "solutions" to problems that only require well designed, bug free software. That just ain't gonna happen. Programming is complex and our little fuzzy/faulty brains aren't very good at it.
The whole TFS and most of the TFA is a load of non-sequiturs. If they bothered linking the papers it might have been useful, but no, it's another shining example of tech journali^H^H^H^H^H^H^H total bullshit.
It might be something to do with clock variability and operations that are retry-able on error. Or they could be running a clock signal from a grandfather clock.
Sounds like Kumar and his friend Harold have been spending too much time baking weed brownies and not silicon wafers.
I think the invisible hand of the market has its middle finger extended
--A wise old fart named SC0RN
I don't see how allowing a higher error rate will enable them to put more transistors on a chip.
Le français vous intéresse?
More importantly, if the software is more robust so as to detect and correct errors, then it will require more clock cycles of the CPU and negate the performance gain.
This CPU design sounds like the processing equivalent of a perpetual motion device. The additional software error correction is like the friction that makes the supposed gain impossible.
Current software can't recover from its own errors most of the time, but we're supposed to trust it to handle hardware ones, too?
I'll trade some speed for reliability, thanks. Rebooting sucks and this sounds like a great way to do more of it.
Why use a stochastic processor which makes mistakes when we can use our brains, which make mistakes?
Ethernet is an improvement over than token ring, yet Ethernet has collisions and token ring doesn't.
Token ring avoids collisions, Ethernet accepts collisions will take place but has a good error recovery system.
The summary talked about the communication links... I remember when we were running SLIP over two-conductor serial lines and "overclocking" the serial lines. Because the networking stack (software) was doing checksums and retries, it worked faster to run the line into its fast but noisy mode, rather than to clock it conservatively at a rate with low noise.
If the chip communications paths start following the trend of off-chip paths (packetized serial streams), then you could have higher level functions of the chip do checksums and retries, with a timeout that aborts back even higher to a software level. Your program could decide how much to wait around for correct results versus going on with partial results, depending on its real-time requirements. The memory controllers could do this, using the large, remote SRAM and RAM spaces as an assumed-noisy space and overlaying its own software checksum format on top.
This is really not so different from modern filesystems which start to reduce their trust in the storage device, and overlay their own checksum, redundancy, and recovery methods. You can imagine bringing these reliability boundaries ever "closer" to the CPU. Of course, you are right that it doesn't make sense to allow noisy computed goto addresses, unless you can characterize the noise and link your code with "safe landing areas" around the target jump points. It makes even less sense to have noisy instruction pointers, e.g. where it could back up or skip steps by accident, unless you can design an entire ISA out of idempotent instructions which you can then emit with sufficient redundancy for your taste.
And maybe some potato salad?
With all the mistakes I've made, I could be a superman by now.
This ain't rocket surgery.
He favors a new architecture, that he calls the 'stochastic processor,' which is designed to handle data corruption and error recovery gracefully.
I dub thee neuron.
Shai Schticks:"You don't make peace with friends, you make peace with enemies"
...the problem is software. In the last twenty years, we've gone from machines running at a few MHz to multicore, multi-CPU machines with clock speeds in the GHz, with corresponding increases in memory capacity and other resources. While the hardware has improved by several orders of magnitude, the same has largely not been true of software. With the exception of games and some media software, which actually require and can use all the hardware you can throw at them, end user software that does very little more than it did twenty years ago could not even run on a machine from 1990, much less run usably fast. I'm not talking enterprise database software here, I'm talking about spreadsheets and word processors.
All of the gains we make in hardware are eaten up as fast or faster than they are produced by two main consumers: useless eye-candy for end users, and higher and higher-level programming languages and tools that make it possible for developers to build increasingly inefficient and resource-hungry applications faster than before. And yes, I realize that there are irresistible market forces at work here, but that only applies to commercial software; for the FOSS world, it's a tremendous lost opportunity that appears to have been driven by little more than a desire to emulate corporate software development, which many FOSS developers admire for reasons known only to them and God.
It really doesn't matter how powerful the hardware becomes. For specialist applications, it's still a help. But for the average user, an increase in processor speed and memory simply means that their 25 meg printer drivers will become 100 meg printer drivers and their operating system will demand another gig of RAM and all their new clock cycles. Anything that's left will be spent on menus that fade in and out and buttons that look like quivering drops of water -- perhaps next year, they'll have animated fish living inside them.
Proud member of the Weirdo-American community.
We all learn (or are supposed to) from our mistakes how is a machine supposed to act differently? Its simple logic.
The trend lately seems to be to build hardware that runs existing software faster. Designing hardware without legacy support would make for faster, more power efficient hardware. Futhermore, hardware is expensive to modify, whereas software is relatively cheap to update.
OTOH, since the world relies on commercial software distributed in binary form, hardware makers have to support it. Today, the hardware is built so the software doesn't need to be changed, despite the fact that computers would perform at a much higher level if it were the other way around. I suppose one could point out that we have so much software today that porting all of it would isn't practical. Of course, the current state of affairs is solely due to the Windows on x86 near-monoculture. People seem to love sticking with what works, rather than go through a bit of pain to achieve higher levels. I suppose people expect that computers aren't ever going to move past the general design standardized in the 1990s.
IMHO, what we need is a clean break, a complete redesign, every decade or so. At that point, most decade-old software should be emulatable, and we get the benefits of the ever-advancing state of computer science. Plus the periodic chaos should prevent complacency and increase competition, while the decade long stability would allow for optimization and provide a common build target. Fat chance that Microsoft or big business would ever go along with that idea though.
Suppose those CPUs really allow for faster instruction handling using less resources, maybe you could put more in a package, for the same price, which on a hardware level would give rise to more processing cores at the same cost. (Multi-Core stochastic CPUs)
Naturally, you have the ability to do parallel processing, with errors possible, but you are able to process instructions at a faster rate.
On the software side, the support for concurrency is a mayor selling point, of course, there has to be something able recover from those pesky stochastics gracefully. I come up with the functional language 'Erlang'.
This is taken from wikipedia
http://en.wikipedia.org/wiki/Erlang_(programming_language)#Concurrency_and_distribution_orientation
Concurrency supports the primary method of error-handling in Erlang. When a process crashes, it neatly exits and sends a message to the controlling process which can take action. This way of error handling increases maintainability and reduces complexity of code
From the official source:
http://www.erlang.org/doc/reference_manual/processes.html#errors
Erlang has a built-in feature for error handling between processes. Terminating processes will emit exit signals to all linked processes, which may terminate as well or handle the exit in some way. This feature can be used to build hierarchical program structures where some processes are supervising other processes, for example restarting them if they terminate abnormally.
Asked to 'refer to OTP Design Principles for more information about OTP supervision trees, which use[s] this feature' I read this:
http://www.erlang.org/doc/design_principles/des_princ.html
A basic concept in Erlang/OTP is the supervision tree. This is a process structuring model based on the idea of workers and supervisors. Workers are processes which perform computations, that is, they do the actual work. Supervisors are processes which monitor the behaviour of workers. A supervisor can restart a worker if something goes wrong. The supervision tree is a hierarchical arrangement of code into supervisors and workers, making it possible to design and program fault-tolerant software.
This seems well fit? Create a real, physical machine for a language both able to reap its benefits and cope with the trade-off.
Or maybe I'm too far off (I'm bored technologically, allow me some paradigmatic change at slashdot).
TamedStochastics - Hiring.
Yes, checksumming on dedicated hardware was my first thought as well.
It sounds similar.
If it requires software changes that are not 100% automated, then this won't fly. Programmers have a hard enough time writing sequential programs, let alone multithreaded ones. Now they're supposed to also foresee and check hardware errors? I think not.
I note that the entire idea hinges on the s/w component, yet the article hides the complexity under the harmless-sounding term "robustification".
Another idea from the ivory towers that is good at generating papers, but not actual machines. IMHO.
I have designed a CPU that uses only one transistor, requires absolutely no power, and is infinitely fast! Of course at the moment the only instruction it can run is NOP, but I'm working on the problem...
Garbage in, garbage out, professor. A computer that isn't accurate is no longer useful. We might as well go back to using thousands of humans to double-check other thousands of humans. Oh wait no those require FAR more energy and time.
Seven puppies were harmed during the making of this post.
AMD and nVidia's workstation cards are the same as their gaming cards, the only difference being that the workstation ones are certified to produce 100% accurate output. If a gaming card colours a pixel wrong every now and then it's no big deal and the player probably won't even notice.
As OpenCL and other "abuses" of GPU power become more popular, "colors a pixel wrong" will eventually happen in the wrong place at the wrong time on someone using a "gaming" card.
...that the Transmeta Crusoe processor has sod-all to do with porting or different programming models. The whole point of the Crusoe was that it could distil down various types of instruction (e.g. x86, even Java bytecode) to native instructions it understood. It could run 'anything' so to speak, given the right abstraction layer in between
Its lack of success was nothing to do with programming - just that no one needed a processor that could these things. The demand wasn't there
I had a physics prof for freshman physics that said you learn more from mistakes. I told him that we must be physics experts by now.
And yes, I realize that there are irresistible market forces at work here, but that only applies to commercial software; for the FOSS world, it's a tremendous lost opportunity that appears to have been driven by little more than a desire to emulate corporate software development, which many FOSS developers admire for reasons known only to them and God.
I think I know why. If free software lacks eye candy, free software has trouble gaining more users. If free software lacks users, hardware makers won't cooperate, leading to the spread of "paperweight" status on hardware compatibility lists. And if free software lacks users, there won't be any way to get other software publishers to document data formats or to get publishers of works to use open data formats.
We rarely write software that is even robust enough to be secure against unexpected input on our current "reliable" chips (see: Viruses and other malware).
The idea of having application programmers cope with the new unpredictable hardware errors is seriously flawed.
In the end an additional "software" layer (probably actually firmware) will have to deal with this new type of hardware error; Application level coding (and existing software) will continue working as usual.
If this turns out to be faster than current techniques: Meh. A new faster processor and a new buzzword will be born.
I'll be interested when I can buy the new hardware and run *nix on it; Until then the only buzzword that comes to mind is "vaporware".
I've seen this before, except for an application that made more sense: GPUs. A GPU instruction is almost never critical. Errors writing pixel values will just result in minor static, and GPUs are actually far closer to needing this sort of thing. The highest-end GPUs draw far more power than the highest-end CPUs, and heating problems are far more common.
It may even improve results. If you lower the power by half for the least significant bit, and by a quarter for the next-least, you've cut power 3% for something invisible to humans. In fact, a slight variation in the rendering could make the end result look more like our flawed reality.
A GPU can mess up and not take down the whole computer. A CPU can. What happens when the error hits during a syscall? During bootup? While doing I/O?
it could take off, but in specialized areas like embedded designs (low power - long battery life consideration)
and in server farms (low power, low cooling and electric costs).
embedded and server applications do not have the bloated huge application suites that need porting.
ie: big bloated popular desktop apps likes photoshops and excels are not an issue for this new
cpu design approach to be adopted.
server apps 'relatively' speaking are much less bloated, and often have been ported a zillion times already
adding error robustness is doable and worth doing for the potential savings.
embedded apps don't mind doing what it takes to achieve battery life noticably longer than the competitor.
and often do such specialized (read: not bloated) functions that error robustness should also be doable -- even if currently
glossed over.
but, regardless how desireable this turns out to be, if a "big guy" (read Intel) couldn't be bothered to push :(
it, it'll die
He apparently wants us to take a step backwards to the days when crashes were frequent, such as with Windows 98. Software quality has a long way to go already. Does he not realize that making programmers deal with such an issue would bring software quality back into the Dark Ages?
As it is, programmers aren't given enough time to write software that works bug-free. Schedules are always rushed. This would dramatically increase: the burden on developers, the quantity of bugs, the number of developers being fired because they didn't get a project accomplished nearly as quickly as someone who pulled off a similar project 5 years earlier, the frustration of the users and developers (and transitively, the number of heart attacks around the world due to elevated blood pressure), the number of security vulnerabilities in software, and the migration rate to processor vendors who didn't make this mistake.
In short: this guy is on crack!
I think Mr Kumar is confusing the performance of the designer to develop a useful power effecient product today on a modern process with the performance of the end result. There is no law or provable proposition that that a useful processor needs to be sloppy to outperform a neat competitor. This only holds true when you fail to include the cost of being sloppy and limit the intelligence and creativity of the designer. Any figures you produce to prove your point are by definition limited to a narrow limited set of defined tradeoffs.. It does not represent what is possible when someone smarter than yourself is desinging a solution.
The space is difficult and getting more and more so. Deal with it or find another job. For quite some time now innovations in the space have always come from techniques to mitigate complexity and error. When your designing non-trivial ASICs its what you do.
In certain areas analog computers make sense. Heck our brains are analog computers but asking a classic computing environment to check itself is a non-starter in terms of any product users will accept.
Circut design is somewhat of an art. There are an infinite array of subtle tradeoffs and clever hacks one can use to improve performance such as use of crosstalk to bootstrap charging of neighboring caps, clock gating, distributed clocking, intentional glitching, even the use of analog circuts in certain limited roles.
What pisses me off the most about articles like this is that designers suffer from tunnel vision and therefore act like morons. I mean look at a modern desktop PC. Intel et al tout their speedstep, bus power management, LPC..etc to save energy and they have epicly failed. Why does a computer doing absoultely nothing need to use >100 watts to sit idle? If they can't get reasonable power scaling from clock gating then why not just design an idle processor thats slow and stupid (ie ATOM) and shut the other crap down when its not needed. If people really cared about power there are a lot of realitivly low tech solutions that would work and make huge dents in world demand for energy to power electronics.
But we still have a situation where GPU designers would rather let their processors idle at 70c to protect against temp gradients and not have to account for effects of temperature changes on their circuts.
This reminds of Java2K, a esoteric programming language inspired by physics. When you do measurements in physics, you have to be specific about the error. You have to deal with it, so you have to think about how to minimize it in your contraptions.
In Java2k, all instructions can misbehave. So x1/x2 will divide x1 by x2, but do so only with a probability of 90% correctly. And all variables start with random values, "like in real physics". A language impossible to work with?! Turns out, you can at least do simple things:
integer variable x
integer variable y
y = x/x
at the end of the computation, y=1 -- with a probability of 90%. Now, how to proceed...?
but now I want some White Castle.
APK quotes people (including myself) without context and should not be trusted. Just thought you should know.
. . . is a calculated move.
Bring it on down to the actual transistor level and compare it to the brain - we use x more neurons for a given job than a human might use transistors for a similar function.
The brain expects neurons to misfire and goes on averages of clusters. This allows neurons to be kept on more of a hair trigger, which makes them less energetically expensive to change state. The same can theoretically be done with transistors - we use fairly high voltage (I'm not an EE, feel free to correct me here) differences to register as 1 or 0, but if we allowed for higher error rates, we could use closer values, or have a RANGE of values and get better than binary complexity, at a lower energy cost.
Ethernet has lower latency than token ring, and is over all easier to implement. However its bandwidth scaling is poor, when you are talking old school hub ethernet. The more devices you have, the less total throughput you get due to collisions. Eventually you can grind a segment to a complete halt because collisions are so frequent little data gets through.
Modern ethernet does not have collisions. It is full duplex, using separate transmit and receive wires. It scales well because the devices that control it, switches, handle sending data where it needs to go and can do bidirectional transmission. The performance you see with gig ethernet is only possible because you do full duplex communications with essentially no errors.
The point is not that mistakes can improve performance, but that allowing for mistakes improves performance.
Simply put, we already use this. Network transport may have errors, and these are dealt with at higher levels. As long as a corruption can be detected, we are ok. But, if a computation results in an error, and the checking of it may also result in an error, we have a problem. Some part must be guaranteed. But the transmission can be handled the same way that networks are handled.
If the store is not reliable, we can use RAID 5 or the like. This can even be done with main memory. But, we can't easily segregate the parts that have to be retained because they are expensive to recompute from those that are easy to recompute. Certainly RAID 5 storage doesn't make that distinction.
But, between a auto correcting storage and a correcting data transport, something like this should be implementable.
Now, I have to read the fine article to determine why he thinks that this will allow speeds to increase. Certainly I can see it in limited areas. For example, a network packet buffer need not be 100% reliable. Nor must a raw disk buffer (in both cases, the error correction will happen a layer up).
Just another "Cubible(sic) Joe" 2 17 3061
And .. what if there is an error or corruption during the recovery process .. eh?
Faster performance is a luxury we don't really need. We only have applications demanding higher performance because it's available. There might possibly be a niche role for this in dedicated hardware for exploring certain computational problems, such as protein folding or monte carlo simulations or whatever, but not in our home computers.
stochastic screens help when scanning documents by allowing you to get pretty good visuals with lower resolution (fewer ppi).
not sure how the stochastic method could help with computing though. don't the values need to be either ON or OFF?
stochastic screens give the illusion of gray (both on AND off)
Remember kids, if you're not paying for the service, YOU ARE THE PRODUCT THAT IS BEING SOLD.
Besides their robbing ink business, HP is a very prestigious company with decades of experience on computing. Intel is the company who does the actual chip. Both of them and their billions along with support from Microsoft couldn't manage to release the compiler which will do it and traditional "lets plug 64bit to x86" of AMD won.
I mean it really needs a lot to convince those guys to do anything to rely on "clever compilers". Billions lost for nothing, lots of code erased, lots of company image wasted. If Intel was something like ARM Holdings or AMD and did that mistake, there wouldn't be an Intel today.
Nobody (in end user, game etc.) does reliable multi-core execution yet. Of course a lot of stuff works with multi-core, I watch since my quad g5 purchase but at some point, e.g. even a simple thing (compare to game) like set MAKEFLAGS='-j4' may do insane things from time to time. That is basic multi core, perhaps it shouldn't be even called multi-core (just 4 tasks running in parallel).
Will this be 'interesting but dead-end' research(?)
Yes.
Who wants a crap processor or at least one that has guarenteed errors?
I bet we'll get ratings like "80% accuracy" lol
I couldn't read the article or the journalist mess resulting from article but I guess it is something like dust particles on lens. If someone takes a photo with couple of dust particles on lens (and can't notice it), why would a device/encoder (especially lossy one) would care about minor quirks and spend time for "absolutely pixel perfect" data?
I guess people smiling at this article will have to think again ;)
http://www.thocp.net/biographies/papers/goto_considered_harmful.htm
There area plenty of other ideas to deal with noisy chips.. I'd point out DARPA's SyNAPSE program as an example. Due to quantum constraints, the future of deterministic computation must eventually deal with the noise in a robust manner. The above efforts are focusing on memristor technology.
I don't know whether stochastic architectures do better than noisy memristor ones, but either way we'll have to learn how to program in an environment that the least predictable element is not the one at the console.
I see lots of people down on the theory - even though the original proposal was for highly-error forgiving applications - because somehow it means we can't trust the computations from the CPU anymore.
People - realize that you can't trust them NOW.
As someone who's spent way too much time in the ZFS community talking about errors, their sources and how to compensate, let me enlighten you:
modern computers are full of uncorrected errors
By that, I mean that there is a decided tradeoff between hardware support for error correction (in all the myriad places in a computer, not just RAM) and cost, and the decision has come down on the side of screw them, they don't need to worry about errors, at least for desktops. Even for better quality servers and workstations, there are still a large number of places where the hardware simply doesn't check for errors. And, in many cases, the hardware alone is unable to check for errors and data corruption.
So, to think that your wonderful computer today is some sort of accurate calculating machine is completely wrong! Bit rot and bit flipping happens very frequently for a simple reason: error rates per billion operations (or transmissions, or whatever) have essentially stayed the same for the past 30 years, while every other component (and bus design, etc.) is pretty much following Moore's Law. The ZFS community is particularly worried about disks, where the hard error rates are now within two orders of magnitude of the disk's capacity (e.g. for a 1TB disk, you will have a hard error for every 100TB or so of data read/written). But, there's problems in on-die CPU caches, bus line transmissions, SAS and FC cable noise, DRAM failures, and a whole host of other places.
Bottom line here: the more research we can do into figuring out how to cope with the increasing frequency of errors in our hardware, the better. I'm not sure that we're going to be able to force a re-write of applications, but certainly, this kind of research and possible solutions can be taken care of by the OS itself.
Frankly, I liken the situation to that of using IEEE floating point to calculate bank balances: it looks nice and a naive person would think it's a good solution, but, let me tell you, you come up wrong by a penny more often that you would think. Much more often.
-Erik
There are always four sides to every story: your side, their side, the truth, and what really happened.
RAM, Disk drives, CD-ROMs or modems are all designed to allow significant possibility of errors and employ redundancy to minimize impact on the end user. Why would anyone think CPUs would be exempt from similar design needs? Most demanding calculations take much less time to verify than to perform. If you can factor large numbers or compress files twice faster but with 5% error rate, wouldn't you spring up for an error-free coprocessor or slower error-correcting verification code as a trade off? No software will need to be rewritten except the error-correcting compiler, but specialized languages may be available to those who want to take advantage of raw unreliable mode for video encoding or such.
I can see this working for a graphics chip -- after all, who cares if a tiny portion of an image is a pixel or two off? For execution of an actual application, however, I think this idea sucks. There are far better ways to reduce power consumption, like asynchronous- or reversible computing techniques.
'He who has to break a thing to find out what it is, has left the path of wisdom.' -- Gandalf to Saruman
Computer hardware that is slow, but does what it is told, without error?
Or computer hardware that is Defective by Design, that might launch a first strike on Russia (without human approval) at any time, and that depends on a bug-free pattern to the bugginess PLUS bug-free error handling code to prevent a nuclear holocaust?
"And the King had the idiot who proposed the over-complex 'speedup' scheme thrown to the alligators in the moat, and the rest of the kingdom got to live another day."
Hamming code detects errors and corrects them and is used in RAID arrays and Satellite transmissions.
The Instruction set would have to be designed so that when a mistake is made it can be detected, also known as the hamming distance but it could be done.
http://en.wikipedia.org/wiki/Hamming_code
http://en.wikipedia.org/wiki/Hamming_distance
http://en.wikipedia.org/wiki/Richard_Hamming
What kind of name is that anyhow? Kumar? What is that five o's or two u's?
One of the more drastic consequences of poorly-performing software, is that hardware companies keep having huge incentives for creating faster and faster machines. That in itself, would be a good thing.
The bad thing is, that the arms-race of hardware performance, is what causes the HUGE power-demand, leading to poor battery times, and lots of heat-production. Many Desktop-PSU:s today are in the 600-700W range (and above), which is about the output effect on a small microwave-oven. If you're not careful regularly opening up your machine cleaning it out, it's going to get clogged by dust. That's a recipe for a fire-hazard. (In a recent lecture on fire-safety, I learnt fire-hazards by computer-overheating is on the rise, to no surprise.)
If instead Software developers maintained a focus for designing and coding efficient applications, the performance of ~6 years old machines would be _VERY_ snappy for all common tasks today. Then the incentive for creating faster machines for the average Joe would not be as great (since Joe does not care if starting the browser takes 50ms or 100ms, he does not notice anyways), so the hardware competition could happen in other qualities; power-consumption, reliability, price.
Especially, fewer houses would burn down because someone forgot the laptop on in the sofa.
It would be awesome if it worked and the idea gets adopted.
Current CPU architecture is antiquated and lame. We need something new.
Nice to read a sane and open-minded comment and after so many foolish rants from closed minded individuals here on slashdot. If it were left to the typical slashdot crowd, no far-looking scientific breakthrough would have ever progressed beyond the proposal stage.
As a game developer, I used to not think about the possibility of hardware errors much. Until I had a very difficult-to-pin-down bug which turned out to be a hardware defect in a single L2 cache line on the console hardware. It worked fine for the first few years of its life, and then this one bit developed a "stickyness" so that sometimes it would return the wrong value and cause our software to crash.
We then ran an exhaustive RAM reading and writing test on all of the devkits our team was using, and it turned up *three more* kits that couldn't read and write correctly to all of their RAM. These are $10,000 devkits, but their reliability is about the same as the consumer hardware people have at home. Is it any surprise that consoles often need to be shipped back to MS or Sony or Nintendo and replaced? It no longer surprises me in the least.
Desktop computers may be a little ahead of consoles in reliability, but when you're doing BILLIONS of calculations every second, its inevitable that random physical quirks (cosmic ray strike or whatever) will mess one of them up sooner or later. Anyone who overclocks their PC knows that if you OC too much you start to fail the reliability tests because errors are creeping in.
Now, encoding/decoding tolerance? You can do it, but will anyone watch it?
This research will go nowhere.
Now, if he was encoding porn tolerance, we'd really have something society needs. But you know, that only leads to more needs. Like keyboard protectors.
I've fallen off your lawn, and I can't get up.
Strangely enough, there were such things as stochastic computers in the 70's. The Wikipedia article is in French, but you can use the Google translator (?) if you want to :
http://fr.wikipedia.org/wiki/Calculateur_stochastique
If a program supports Turing-Complete macros, then it can do absolutely anything a Turing Machine can do (given sufficient memory) and a Turing Machine can do anything that is computationally possible.
The output of a classical Turing machine is one boolean value: either "halted true" or "halted false". The theoretical Turing machine has no conception of interactive input and output. So being Turing complete isn't enough; I/O capability is also crucially important, and that's where your "make it practical" comes into play.
1. fuzzy logic
2. http://tech.slashdot.org/article.pl?sid=09/02/08/1716235
The MAFIAA is a bunch of mindless jerks who will be the first up against the wall when the revolution comes
Then the incentive for creating faster machines for the average Joe would not be as great (since Joe does not care if starting the browser takes 50ms or 100ms, he does not notice anyways), so the hardware competition could happen in other qualities; power-consumption, reliability, price.
I believe this has already happened; witness the rise of netbooks and nettops. One can finally buy an entry-level gaming PC (an ION nettop such as Acer Aspire Revo) for the price of a game console. But on full-size desktop PCs, nonlinear video editing has gone from LDTV to SDTV to HDTV in the past seven years, multiplying the pixel count by a factor of 27 (corresponding to seven years of Moore's law).
IEEE Spectrum had a similar article last year. Check out the images for a little better understanding of the tradeoff. It's pretty clever stuff.
Actually what make ethernet work is not the error recovery but the error detection. The hard part of making a more robust CPU and memory model is not recovering from errors, but detecting them at all. This adds complexity to the whole stochastic design, and I think at some level the error detection needs to be error free, so that the success of the error recovery can be evaluated. Like a Hamming code which can correct all one bit errors and detect all two bit errors, as you add robustness to the detection, through more complex schemes like Fire codes, the resources in the error detection are greater than the error detection. And balancing by making the entire system more error prone is clearly not a solution.
If application programmers used interpreted languages such as .net or java, then the error detection/recovery could be handled by the framework instead of the individual application and no code changes/refactoring would be needed at all other than the framework itself.