Currently, semiconductors are fabricated mostly in 2D, but as we approach atomic scale we clearly will need to make more use of 3D fabrication to continue scaling.
Already, the metal interconnects use 12-15 layers, with very thick copper power lines running on top, and increasingly thin signal busses as we approach the bottom transistor layer. Transistors themselves are growing increasingly 3D, with the thin flat gate conduction channel now universally extruded into a vertical gate "fin FET".
Micron, a major manufacturer of semiconductor RAM, has been investing in a die-stacking system they call hybrid memory cube, using through-silicon vias to route signals in 3D space between 4 or 8 layers of silicon. Even this modest layering increases bandwidth, reduces latency somewhat, and improves energy usage dramatically, because signals can escape via a 3D trapdoor instead of following a longer path across the chip to the outside.
One disadvantage of moving to 3D is heat dissipation through conduction occurs only on surfaces, making it harder to cool the interior of a volume than an area. Within-die cooling, where the coolant is pumped through channels cut into the silicon itself, is currently only used for niche applications like cooling particle detectors.
Consider, if you will, water. Water is composed of molecules of hydrogen and oxygen. A *lot* of molecules: one mole of water weighs about 18 grams (a little over one tablespoon), but contains 6.02 x 1023 water molecules. (For comparison, the total count of all the bits on all the hard disks ever made comes to about 1023bits.)
Water is also very fast. Its molecular orientations change in around 50 femtoseconds (10-15 seconds, millionths of a nanosecond). So in one second, while bouncing around each water molecule explores 2 x 1013 (20 Terahertz!) random orientations with the other molecules in its immediate neighborhood. You can watch this sort of wriggling in any atomic-level simulation, like this biomolecule in super-duper-slow-mo, or this potassium channel still billions of times slower than realtime.
So the molecules in one tablespoon of water are rated at 1.2 x 1037 orientations/second. That's a ridiculous amount of potential computational horsepower, if we could figure out how to harness it!
Rather than compute with just plain water, biological systems use various interesting chemicals dissolved in the water. Information is encoded in a long linear polymer called DNA, made of a sequence of nucleotide "bases": adenine, guanine, cytosine, and thymine (which is switched to uracil in RNA). In the "coding" region of DNA, these nucleotides A, G, C, and T/U are "expressed" into proteins, the giant molecules that get stuff done in your cells. There are also long stretches of DNA that do not code for proteins; formerly called "junk DNA" because we didn't understand its function, these segments now appear to be (1) used structurally, often directly alongside proteins (2) determining how often a given stretch of DNA "executes" into a protein, or regulation. DNA is typically stored in an inactive, coiled-up orientation called a chromosome.
Amazingly, every known living entity uses the same basic coding scheme to get from DNA to proteins: the Universal Genetic Code. The seqence of DNA that encodes a protein is composed of three-letter "codons", similar to machine code: each protein begins with an "ATG" sequence, and subsequent codons representamino acids to be added to the protein, until the protein is ended with one of the three stop sequences, TAA, TAG, or TGA. A typical protein forms from a chain of between one hundred and one thousand amino acids--similar to the length of many real functions in a computer program!
|Binary bits: 0 or 1||Nucleotide bases: A, G, C, or T/U|
|8-bit bytes of x86 machine code||three-base codons in Universal Genetic Code|
|Stored on disk (stable version)||Stored in DNA (double-stranded helix)|
|Operating system loader||RNA polymerase: load DNA into mRNA|
|Runnable in RAM (loaded program)||Used from (m)RNA (single-stranded)|
|CPU: executes machine code in RAM||Ribosome: transcribes RNA to protein|
|DLL shared library||Viral DNA|
|One function||One protein|
|One program||One cell|
|Many programs working together
|Configuration file (written by installer)||Methylation sequence|
|Exit condition||Self-destruct sequence, like telomere|
Not only does natural DNA work like a computer program, you can *build* a computational system using DNA, called "biological computing". The advantage of biological computing is density--since the bits in your problem data be represented by a single molecule, and the computation proceeds in parallel and in 3D, you can search enormous search spaces quickly, although it can be hard to extract the answer.
For example, the human immune system fabricates antibodies, which have two sticky ends: both ends are designed to stick to a particular type of virus, bacteria, or parasite. The middle of the antibody flags the pathogen for disposal by the immune system, and in the meantime the pathogens start sticking together due to the two sticky ends on the antibody.
Here's a good tour of various nano-scale sizes.
|Diameter||Mass (hydrogens)||Mass (Kg)|
|atom||0.1nm||1 ... 200 Da||1.6 ... 300 × 10−27Kg|
|protein||2 ... 6nm||10k ... 100k Da||1.6 ... 16 × 10−23 Kg|
|3..10um||3.75 x 1012Da||6 x 10-15 Kg (for 750MB of data!)|
|10 ... 30um||6 x 1014 Da||1 x 10-12 Kg|
The bottom line: each human cell contains a few billion proteins, the individual moving parts in the cell. Each cubic centimeter of a person contains about a billion cells. The compounding billions are why biological systems can do such amazing things, like self-healing or recognizing pictures of cats.
Leonard Adleman demonstrated how to use DNA to quickly perform an exhaustive search in parallel. The idea is to dump all the input molecules into a well-mixed test tube. The inputs stick together in various ways, some of which represent the outputs you're looking for. You then have to use chemistry to winnow out the (huge number of) incorrect outputs until you're left with the correct outputs, which you can read off. Specifically, Adleman used the travelling salesman problem. He represented each city with a short sequence of DNA, call the sequences A through Z. The routes between each each city were represented by a piece of DNA that will stick to ("bind") to one city and the next, where the length of the strand corresponds to the distance between the cities. He then mixed all the cities and routes together, where they stuck together randomly. Now, a solution to the salesman problem is encoded as a strand of cities and routes. A solution has two features:
Other folks have recently built Turing machines with DNA, and "DNA nanofabrication" is a huge research field nowdays.
You can get companies online that will synthesize custom genes for you. For example, $5 will buy you 25 nano-mols of custom DNA snippets to shoot into a species of your choice. 1 mol is 6.022 x 1023 molecules. So your 25 nano-mols is actually 1.5 x 1016 molecules. That's 3000 trillion custom DNA snippets per dollar! (For comparison, a $100 chip with a billion transistors has just 10 million transistors per dollar.)
CS 441 Lecture Note, 2014, Dr. Orion Lawlor, UAF Computer Science Department.