Computing with Random Pulses Promises to Simplify Circuitry and Save Power
spectrum.ieee.org
spectrum.ieee.org
The cost of moving data is proportional to the number of toggles you have to push through the wire. And with this representation, the number of toggles is immense. Bill Dally noted at SysML the other week that this kind of data format is almost the worst possible number format you could construct, if you care about power, because on average there must be lots of toggles.
It's too bad the article doesn't include any comparisons to see why the authors believe this is a good idea. The neuromorphic story is getting a little threadbare at this point, without data to back it up.
As an aside: I found this aspect (and the amount of dark silicon in modern CPUs) very interesting when watching Simon Knowles talk on their graph core design. They try to reduce this cost, maximise compute and minimise dark silicon by using a far more localised memory architecture (granted what they are doing is naturally more parallel than a CPU though).
I think you are correct when thinking about dropping this into a normal CPU design as a bolt on discrete block of logic... but perhaps it's better used as a hardware building block for specialised processing. i.e rather than exposing it as an actual instruction on its own, use it as the building block of an algorithm implemented in hardware that requires really fast arithmetic but does not need to be perfectly deterministic (with no back and forth to registers until the end result) keep in mind it truly can be fast inside a single clock because fixed length streams (i.e words) can be processed in parallel.
I guess in short i'm saying: avoid the serialisation process until necessary, chain the probabilistic arithmetic until done _then_ do the expensive de-serialisation. My intuition tells me it would have value then, but I don't know.
1) x68s RAM needs to move huge amounts of data cheaply and extremely reliability. This requires a lot of power to fight noise. Once you're allowed to have a few bit flips, the bus voltages can be made much power directly lowering losses.
2) A significant portion of the large energy costs is actually in computing associated with memory movement! (according to Sohmers from REX Computing, about 40%). Encoding, queuing on processor, Decoding, fetching, queuing on the memory controller, and caching again on the CPU takes a lot of logic.
I think it's quite possible this approach is superior for low precision floating point applications that currently use CPUs/GPUs. Note this allows lowering voltages for the whole system, including interfaces and memory.
Also, data movement doesn't dominate the energy cost of all applications; there are plenty of operations still compute-bound (e.g. some evolutionary methods), it's just that the applications more in vogue are like that. There are plenty of applications that are currently done in DSPs and ASICs because of heavy computational costs (error correction decoding as mentioned in the article) that might benefit from this.
---
As far as I know, it is still an open question whether it is possible to generalize this approach for data-efficiency. I have a few ideas I've been playing around with but none that seem to work yet.
To be fair, you don’t need thousands or millions of transistors for a functional ALU, such as the ones we built in college.
I’d imagine the reason it’s more practical to use something with 1M transistors rather than something with 10 or 100 is the ease of integration, (amazingly) simplified manufacturing, and supply chains already existing. I.e. why not throw a 1M transistors in when it’s actually cheaper?
So then, I’m sure there is value in what’s proposed, but for a layperson, what is the real, practical advantage of this?
Mind you, modern low power chips use absolutely minuscule amounts of power. I suspect this technique will need a lot of refinement before its actually competitive.
The main trouble with this technique, I suspect, is it doesn't get at the root of where power is really spent. Yes, anything costs power, but is that where all the juice is really going? A famous stat from the P4 days was, 40% of chip power was spent just driving the clocks. I'm sure it's better today, but how much? What about all the leakage in the SRAMs?
Future processors focused on increased parallelization and returned to less power-hungry clock speeds.
Indeed, and some of the variants of early mainframes were bit-serial in order to reduce cost, with a corresponding (significant) decrease in performance too. An ALU can be less than a dozen transistors or so if it's completely serial --- which seems to be what this article is going towards, but there's a reason bit-serial processors have basically become extinct: they're horribly slow. Any power savings is negated by the multiple-times-longer every operation takes, so the total energy does not decrease. In fact, since now frequency has to increase, and power consumption increases superlinearly with frequency, it's a net loss.
One memorable microcontroller with a bit-serial ALU is the CDP1802 --- and it takes 16 clock cycles for a single 8-bit add instruction.
Each bit being completely independent seems to make it trivial to parallelise. I know they describe it as "serial" but I don't see anything inherently serial about it.
High order numbers being impractical anyway means in practical use people would probably settle on predefined word lengths rather than actual "bit streams". You can multiply your 256bit word (8bit probabilistic integer) in the time it takes to propagate through a single AND gate - the shortest possible, giving you the fastest clock - or if sharing the clock with other far more time consuming blocks in traditional CPUs it allows you to do a great many probabilistic multiplications in a single clock with the same silicon in the same block.
Admittedly what i'm suggesting uses 256 gates not a dozen, but the performance will be significantly better in terms of how much clock it takes up. I think the real problem with this method is the cost of serialising into the probabilistic bit stream. That needs to be avoided as much as possible to make this useful.
http://csl.yale.edu/~rajit/ps/stochastic.pdf
Basically, stochastic computing takes exponentially more time and energy to perform the same computation at the same precision, and has a higher error rate. If you want to save energy on precision, it would be better to use bit or digit serial operators.
Note of disclosure, this paper was written by my adviser and I am currently writing two papers on digit-serial arithmetic operators.
I suppose that wouldn't be a random pattern though, each iteration through it would be the same.
You might make do with a very long prime value like 4073 that just clocks around endlessly, which will rarely line up meaningfully with anything else.
It does seem memory intensive though, maybe these minor issues aren't a big deal in simple enough systems that this could ever work anyway.
Maybe you just use 127 bits or something to randomize it, probably more than enough since the goal is likely mostly to avoid aliasing. Even with multiple incoming synchronized sources if you use different mixing patterns it might work out fine.
https://en.wikipedia.org/wiki/Computation_of_cyclic_redundan...
The effect is a true quantum process whereby one electron tunneling across the junction triggers a large number of other electrons into moving.
Just gonna toss that out there and see if anyone with more expertise can comment on the similarities or differences.
Sigma-delta ADC converters internally generate something like this from the analog signal (though they often use more than one bit) and then sum the values over a window to get the actual value that they output.
[edit]
This actually makes me wonder if you could get decent power savings with 2-bit add/multipliers and streams of 2-bit values; that would significantly decrease the stream-length required for more precise calculations.
Let's say you have an image sensor where the 1s in each stream represent arrival of a photon at a particular location. Then do your image processing with the streams. Finally convert to a traditional image format for storage.
How do I get this number? Bitcoin mining. Compare the hashes per watt of a CPU to the hashes per watt on an ASIC. The difference can be entirely attributed to the efficiency of the CPU circuit design. It is nearly impossible to design better ASIC's because the specification for SHA256 practically is the circuit design.
A multiplexer with a magic random input? If you merely alternate, then you have a non-i.i.d. sequence, and your next gate can mess up.
But more importantly, the source of data in the applications are analog themselves and they are skipping the step of manually calculating an exact value before doing calculations.
Nope, its 50% ones and zeros.