What Kind of Lithography Will Be Used at 7nm?
semiengineering.com
semiengineering.com
I do agree with your fundamental point that there will definitely be an end to Moore's law. It's just that the mere number of silicon atoms doesn't make <7nm infeasible.
http://www.anandtech.com/show/8367/intels-14nm-technology-in...
I should also add, many people think 5nm will be technically feasible, although I don't think anyone knows how at scale, but there are serious question as to whether or not it makes economic sense. Thus the node may not be developed for some time, but because of business reasons.
A tangent: really, the only place that multiple discrete CPU cores make any sense at all is on servers, because servers are frequently made to run multiple submitted workloads, each containing their own serial-bottleneck parts (vis. the old concept of a "time-sharing" computer.) And even then, these days, those cores may perhaps be useful only for the sake of serving as a more efficient substrate for virtualization; there's not much you can do with one four-core VM that you couldn't do better by treating it as four one-core VMs.
"Virtual machine" has come to refer to a specific isolation and security model through, effectively, having a microkernel (the hypervisor) with hardware-accelerated microkernel RPC (hypercalls). But the abstract concept of a virtual machine doesn't require that isolation; it just requires partitioning of resources so that you can treat each partition as its own independent virtual Von Neumann machine.
A DB that pins each of its worker threads to a separate core, has a set amount of non-pageable memory reserved for each thread (and perhaps does SR-IOV to get network frames directly to the right thread) is effectively, in resource allocation terms, four independent virtual Von Neumann machines. Each pinned thread sees no context switches, gets no cache incoherency, suffers no NUMA-based latencies, etc. You've got four little machines, each with their own uncontested memory-bus and network bandwidth, that just happen to share die space (and thus have a cheap IPC fabric between them.)
I mean, you get 90% of what having a modern hypervisor-managed VM gives you just by using processes in the first place (as opposed to the old "single shared address space" model of the Apple II and IBM PC, where things like TSRs made sense.) But in the decades since the invention of the "process" concept, we've gone past the original conception of a "process" as its own virtual machine, and optimized for multi-user, heavily-multiprocessing time-sharing workloads where context switches are frequent, memory bandwidth is shared, IO hardware is shared (and thus has its access linearized through the kernel), etc. We've realized that most people don't need to be allocated a circuit, so scheduling packets will do; that most people don't need memory reservations, so an OOM killer will do; that most people don't write hard real-time software, so context switching will do; etc. (And we've even given up on the address-space isolation, with threads and other shared-memory IPCisms.)
Most of what we use hypervisor-managed VM setups for today is simply to enforce the resource partitioning that Operating Systems gave up on, so that we can have "processes" that actually do give us resource guarantees. If you're an ops person and you don't know what workload you're going to be running but want that enforcement there anyway, hypervisor-based VM management makes perfect sense. On the other hand, if you as the developer get to design your entire "embedded system" or "appliance" or "service" of OS+app yourself, you can throw out the hypervisor and get your VM model from the OS itself, by teaching your app to tweak the OS in all sorts of places ala Snabb Switch.
Either way, the goal is to partition your machine into several smaller independent ones that never have to wait in a queue behind one-another. You can get that from an OS, or from a hypervisor; but what you get is virtual Von Neumann machines either way.
But, most software that people "parallelize" with pthreads is not that type of software, and would be much better served being split into independently-partitioned shared-nothing worker processes, ala Redis. Not only for performance sake, but also because that frees you from the operational constraint of needing a single big machine to run it on. (You still can run all your shared-nothing worker processes on the same piece of Big Iron, but you don't have to, and that flexibility is important for designing a solution in the face of unknown usage profiles.)
The number of applications that can't be multithreaded is very small, and not the kind of thing you run on your phone.
AFAIK, the only companies able to produce modern chips are Intel, TSMC, Samsung and GlobalFoundries; and Intel only makes chips for very select third parties, such as Altera, which they did ultimately buy.
It's a bit like how separating railway infrastructure owner and railway operator is good for having more competition among the operators. If you need to build a whole network to run a few trains (compared to renting it on existing infrastructure), then that's a pretty big moat.