The chips are down for Moore’s law
nature.com
nature.com
Some things that make increasing performance with feature size more difficult recently are that transistors spend lots of time velocity saturated, there's increased leakage current, and the capacitance of wires has come exceed transistor capacitance.
The article implies we will get even more specialized hardware that will speed up common categories of algorithms like gpus asics and FPGAs have been used.
I wonder what kinds of performance gains could be had from a merge sort asic for example.
I think the real interesting thing will be if new architectures beyond von neumann will allow us to think outside the box and break out into new algorithmic territory that is not obvious from our current perspective.
It's very hard for us to throw away our toolchain towers of Babel but I think the departure has already begun when you look at bitcoin mining and gpgpu programming.
Which is actually bad, because it entrenches existing solutions and makes it harder to switch to new, better algorithms.
Just look at cryptography: Now that AES is hardware accelerated in desktop CPUs, ChaCha has been bumped down to "that one algorithm for mobile users with shitty CPUs" with little to no chance of gaining significant traction on other markets until Intel decides to add hardware acceleration for it, too.
OpenGL is the perfect caution tale on what not to do when trying to make a hardware acceleration API.
There's a lot of low-hanging performance fruit in programming language design, compiler implementation, technology choice, and application design. For the most part, nobody takes it because it doesn't make economic sense. With Moore's Law, just wait a couple years and your shitty implementation is good enough.
It's possible for a skilled engineer to write code that is much more efficient. You have to compromise in other ways, like developer time or feature set. Up till now, those compromises have not been worth it, because somebody will beat you to market and make you irrelevant. In a world where "fast as an initial prototype" is not "fast enough", however, you could see firms actually start to compete on performance.
I predict that even without hardware changes, we'll see a bit of a maturation of the software industry, where people look at what folks actually do with their computers and then work to make that actually perform well. Possibly not for a few years, though.
Indeed but there is also huge scope for applying known techniques to existing languages, PHP7 for example is twice as fast as 5.6 (in the real world, I've seen this) with about half the memory usage.
The interesting thing is that anyone using PHP who goes to 7 gets that performance upgrade at essentially zero-cost.
In anything I'd written in the last 2 years I didn't have to change any code at all, just upgrade, run unit tests, do some sanity checks and deploy.
Performance increases was immediately noticeable on both response times and server loads.
One of the easiest wins I've ever had :).
Hardware will continue to evolve and since things can't stay the same and just get faster, things are going to get weirder. With that will come similarly weird low level APIs and c style language implementations (cuda, opencl, vulkan, spirv)
I still hold out hope that Rust, or some successor, will hit the sweet spot you mentioned.
One example is the whole IoT movement. Most of the real (industrial, medical, automotive) applications are efficiency/cost-savings focused. The central theme is connecting devices that we have now to better monitor, analyze, and utilize what we've already built.
Another example that is a bit further removed from computers is the whole Uber/car sharing trend. At any given time 95% of the cars in the world are parked somewhere, not in use. Even if we could only bring that down by 5%, we would be utilizing billions of dollars in capital more efficiently.
I also strongly believe that we will see this reflected in living situations with growing urban cores/hubs of activity and jobs. Suburbs are no longer economically viable at the scale at which we built and inhabited them post WWII, and as the infrastructure begins to decay and inequality increases, more and more people will move to the city to take advantage of the economies of scale of living a dense, vertical lifestlye.
I created a script that migrated data to a new system. The script took 48 hours to run, and we needed to do it over a weekend. The lead dev was unhappy with the performance. I suggested we just use a more powerful machine, and he gave me permission, but said it wouldn't help. I can't remember the specs of the machine, but it was double/triple as expensive as the original machine.
It improved performance only marginally. I went through my scripts, and started to debug it, looking for problems. Optimising my scripts easily doubled or tripled the speed.
Modern code generators are really, really good at straight-line code. Sure, if you're writing everything in Python or Ruby or PHP then there's a bunch on the table. But if you're already doing C or C++, probably not so much.
And going parallel / multithreaded / distributed is still hard.
I don't see low-hanging fruit unless you've already chosen to burn cycles for productivity. If you're already at the performance floor, all roads are going to be difficult.
The thing is it takes a ton of discipline to organize your data to get back that 10-50x and a lot of projects it just doesn't make sense.
C++ devs who work in high-performance industries (like games or finance) know how to write fast code. C++ is not used in most consumer software these days, and even if it is used, you often see slow practices like chasing pointers everywhere, using inheritance instead of generics, etc. Even in big-data, an industry that you'd think would really benefit from fast code, the primary open-source tools are in Java. You could probably recover a 2-4x speedup - two generations of Moore's Law - by rewriting Hadoop in C++, but nobody (besides Google, who is happily crunching data with MapReduce etc.) has bothered.
That's because writing fast, correct C++ code is hard, and it tends to be more economical to write in Python or Node.js and then rent more VMs. If it is no longer economical to rent more VMs, you can certainly recover a lot of that performance, but until we get languages that let you use the performance tricks of C++ but have the safety & ease of use of Python (I have high hopes for you, Rust), it probably won't happen.
I agree on all points, writing correct data oriented code is hard. I've got some hope for Rust though, a lot of the common patterns lend well to the pain points you enumerate(slices, pointer chasing, OO inheritance mess, ownership, etc).
Compilers will of course get better and better at automatically parallizing code, but a big thing that needs to occur in my opinion is the introduction of the concept of explicit partial ordering into mainstream programming languages. Traditional programming languages assume that the order statements occur in code is the order in which operations should occur (operator precedence for the generation of the AST excepted). Imagine instead a programming language where statements separated by a newline implied temporal equivalence, while statements separated by a semicolon implied a temporal ordering. This would enable the compiler to automatically parallelize code much more efficiently.
A bigger problem is that many algorithms aren't really parallelizable. Throw a single mutable shared variable into the mix - even something as innocuous as a counter, or memory allocation pointer, or a logging buffer - and suddenly you need locking and your threads may end up starving each other. Once of the biggest breakthroughs of MapReduce is that it forces you to write your algorithm as functions that operate on independent data. But as someone who's written a decent amount of MapReduces - the thought process about how you design a MapReduce-based algorithm is very different from (and significantly more difficult than) single-processor programming. You can't just go to an algorithms textbook and copy some pseudocode, you need to actually think through what the algorithm and what it's doing, and then rewrite many state updates as message-sends, merges, and CRDTs. (This, BTW, is why Google interviews focus so heavily on algorithms - in many other jobs "How would you find the shortest path between a trillion graph vertices?" is totally academic, but in big data it comes up all the time.)
Well, that gives room for improvement, a virus has quite a bit more logic inside than a single gate feature :)
It's already possible to tweak the process parameters to produce slow-but-efficient chips. I recently saw http://www.ti.com/lsds/ti/microcontrollers_16-bit_32-bit/msp... : 45 microamps/MHz up to 4MHz, runs down to 0.9V. Pair with a suitably low self-discharge battery and it'll run for a decade.
Perhaps what would help is to store energy locally, like our brain. Each cell has its own store of ATP, so a constant feed of ionic current is not needed.
There's also general-purpose designs like Intel's Polaris[1] 80-core CPU that's close to a decade old (GPUs of the time had 320 cores, so a modern Polaris might scale to 1024 cores).
Making neuron-like massively parallel hardware is one thing, making software to run on it another – we seem to have misplaced the source code to the human consciousness somewhere, alas, and reverse engineering is taking its time.
Yea this is not true. The 14nm or 11nm stuff from chip manufactures is more of a marketing thing. It's much more complicated than that.
That sentence is not wrong. It looks well stated.
The gate pitch of Intel's 14nm CPU process node is more like 70nm. [1]
[1] http://www.anandtech.com/show/8367/intels-14nm-technology-in...
There is a fundamental boundary on all technological progress.
Moore's law is stated in terms of a doubling of lowest cost transistors you can fit on a wafer, and results in massive yield gains if you shrink an existing design when moving from node to node (the "tick" in Intel's tick-tock cycle). So whatever customers want, you'll still move to the next node if the economics allow you to deliver the same at a lower cost. This is one of the things that drives game console economics, mid-life refreshes which allow delivering the same capabilities with cheaper and fewer chips (fewer decreases other manufacturing costs).
The heat problem and related end of "free" speed increases is due to the failure of Dennard scaling (https://en.wikipedia.org/wiki/Dennard_scaling) after a good 30 year run.
Every time the scale is halved, manufacturers need a whole new generation of ever more precise photolithography machines. Building a new fab line today requires an investment typically measured in many billions of dollars — something only a handful of companies can afford.
Ignoring the far out scaling limits, this is what I would have focused on. As far as I can tell, the biggest issue right now is the skyrocketing costs of lithography due to the multiple masks required for multiple patterning (https://en.wikipedia.org/wiki/Multiple_patterning).
If, and it's a big if (see Intel continuing to push out they date they plan to adopt it), when EUV lithography become practical that should change this very recent economic issue, substituting manufacturing costs in buying and running $$$ EUV machines for many fewer masks required for each design, lowering non-recurring engineering (NRE) expenses.
That could return a lot of the game to what it was like for a long time, albeit with only a very few foundries being able to afford these machines. The first generation the leading company in the Netherlands is trying is pretty insane in how they generate the light, by exciting tin vapor (!), imagine the inherent contamination potential for both the focusing optics and the wafer....
One other detail: to the extent a lot of companies start focusing on the economic ~22nm or so node that's just before costs skyrocket, we may be seeing some serious economies of scale as people focus on aspects other than the design shrink. Sure, you'd like smaller nodes, especially for lowest power applications, note how Intel is leading with mobile SKUs for it's newest smaller node chips, but that node is perfectly fine for a whole lot of things. Another economic factor to focus on, not everyone is an Intel, nVidia, Apple etc. that needs cutting edge nodes.
(I have old and myopic eyes so I don't do mobile devices and didn't know of such obvious in retrospect tricks. Another thing to push me to getting a cheap smartphone to replace my ancient Nokia candybar feature phone.)
So there's really no legitimate way to insist that Moore's law has to refer to the lowest cost number of transistors. It actually wasn't that by coinage and it certainly isn't that by common usage. I've even got a copy of a memo by Moore in my 6.175 lecture notes endorsing a broader conception of Moore's law.
Now, if you're in the weeds of designing a chip or node, yeah, things like feature size are paramount, but why are you going to the trouble of moving to a new node in the first place, especially with the end of Dennard scaling a decade+ ago? Power consumption could be an alternative to the raw economics, or maybe taking up less space in the smaller mobile form factors. Intel's leading with mobile chips for some reason.
I'm curious to see how this development will turn out.
Probably because in every other industry this would have been seen as anti-competitive behaviour.
Not really, since nobody prevented any company from coming up with even faster speeds / bigger transistor counts.
The whole coordination was to push the limits.
Not sure which industry would consider ... exponential improvements as "anti-competitive". More likely they would kill to be able to have them too.
The thing is, most industries begin with a short period of super-exponential improvements, most of what happen in the lab before the products even get sold. In just a few years, the industry is mature, and further improvements happen in a much slower rate.
Semiconductor industry is different. Because of economical factors, it couldn't have that super-exponential beginning, and had to slow down for decades of merely exponential growth. (It also may had the biggest rate of mature/immature efficiency we've ever seen - but that's another thing.)
Can you name any of those industries? Because most (if not all) industries and products I know, aside of IT, have none such "super-exponential" improvements at their beginnings, not even exponential ones year over year.
We don't have 100x better cars than in 1950.
Film cameras didn't get x better in their first years -- it was a slow and painful evolution that lasted decades to get to something like the 35mm film and standardized functionality.
We don't have 10x better air-conditioning, watches, guitars, etc.
The only places I can think of where that holds are things like memory, storage, CPUs, GPUs etc -- all IT related. And maybe batteries, though I doubt it.
Film cameras are at the cheap/fast evolving end, so I wouldn't expect to see most of the in lab models documented. Yet, the first released ones were very reliable - I doubt the first prototyped ones were so.
Thermal machines and watches were two examples of products that were slowed down by economical factors. Different economical factors than semiconductors, so they didn't got that the smooth exponential development.
I don't understand why people keep saying Moore's law will end soon... as if it's a forecast. I just checked an online site for cpus and the fastest one available was at 3.7 GHZ. It was maybe 3.2 GHZ two years ago. In 2001, I bought a computer that ran at 1 GHZ. That's 15 years ago! Moore's law is usually defined as doubling every 18 months. Even if we stretched it to every 24 months, we should be at well over 100 GHZ. Even if we account for the 4 cores, it's still not happening.
What am I missing here? It seems like Moore's law has been dead for years. Please don't tell me about experimental cpus that are faster or theoretical processors. Moore's law is defined as speed increases while the price stays the same. What matters is what cpus are available to consumers.
No. As stated in the second paragraph of the article, Moore's law states that the number of transistors on a microprocessor chip will double every two years or so.
The next frontier was faster caches and memory, so we could keep those processors burning at max speed more of the time, with fewer idles waiting on input or output. Then we needed faster main storage, so we could spend less time fetching data from slow spinning disks into our limited, fast memory. Voila, SSDs. Now we're down to fast CPUs, fast caches, fast memory, fast disks, and slow networking. Someday we'll get wide-spread fiber deployed, and that gate becomes less of a problem.
Through all of this, the effective speed of computers has continued to rise, although the top-line limit of CPU Hz hasn't changed much.
[1] http://electronics.stackexchange.com/questions/122050/what-l...