All Erlang Related Articles
In a recent article, Fady Younan wrote “We have to realize that the world is going towards parallel processing even we don't accept Erlang as a language I think it will take place in the next decade”. I am not entirely sure what Fady is saying here. Is he saying that Erlang will be accepted as the de facto parallel language in the next decade? If so, I beg to differ. A true parallel language must handle fine-grain parallel processing. Erlang is anything but fine grain. A true parallel language will have no trouble initializing a collection of variables simultaneously. Can Erlang be used to implement a parallel QuickSort module on a multi-core system that is faster than the single-core sequential implementation? I doubt it.
The point that I am driving at is that, if the computing world is going toward massive parallelism (Tilera and others are already talking about the coming of 1000-core CPUs), in order to take full advantage of all those cores, we need a parallel programming model that scales up linearly, up to the elementary operation level. Unless there are as many processes/threads running as the number of available processors (cores), Erlang’s lightweight concurrent processes are not fine enough to take advantage of a huge number of processors. As soon as the number of processes falls below the number of available cores, performance suffers. The best way to take full advantage of massive parallelism is to increase the number of processes by shrinking their size down to elementary operations such as, addition, subtraction, etc… At that point, the model is fully parallel (parallelism is implicit) and sequential order is explicit and signal-based. Indeed, why limit asynchronous signaling to lightweight processes? Why should elementary operations be excluded? I know, some may think that asynchronous signaling at the operation level would be too slow. Sure, this is true, but only because current CPUs are designed and optimized for the algorithm. There is a way to design a multicore MIMD CPU to handle fine-grain parallelism at the operation level that does not incur any performance penalty. (see How to Solve the Parallel Programming Crisis)
One of my bones of contention with concurrent languages like Erlang is that they don’t encourage multicore designers (AMD, Intel, Tilera, etc…) to create architectures for fine grain parallelism in an MIMD environment. In fact, they discourage it. That’s too bad, in my opinion, because the market wants super fast, auto-scalable, fine-grain parallel computers and applications. And what the market wants, the market will get. You can bet on it.
Erlang Is Not the Solution
How to Solve the Parallel Programming Crisis
Parallel Programming, Math and the Curse of the Algorithm
The Age of Crappy Concurrency: Erlang, Tilera, Intel, AMD, IBM, Freescale, etc…
Half a Century of Crappy Computing
Parallel Computers and the Algorithm: Square Peg vs. Round Hole