A Case Against Blind Use of C++ Parallel Algorithms

A Case Against Blind Use of C++ Parallel Algorithms

C++ parallel algorithms are great, right? Well, not quite. While they can be useful in some cases, they miss the point of what it means to have a proper concurrency design, at least for multi-threaded processing. They give one the false sense of comfort that good parallelism can be achieved by adding a parameter to a couple of algorithmic functions.

read more

Questions on the Form of Software

Questions on the Form of Software

The No Silver Bullet article by Frederick P. Brooks (appeared in The Mythical Man-Month, Anniversary Edition is arguably one of the most influential articles in software engineering. Besides setting the limits of the field, it makes an essentialist claim on software engineering: there is an essence of software.

With a philosophical flavor, the present article tries to explore this direction. It tries to ask several questions related to the essence of software. Having the answers to these will probably bring significant advancements in software engineering.

read more

Concurrency Design Patterns

Concurrency Design Patterns

As tasks are not very widespread, people may not have sufficient examples to start working with tasks instead of mutexes. This article tries to help with this by providing a series of design patterns that can help ease the adoption of task systems, and that may, at the same time, improve general concurrency design skills. Even more fundamentally, it tries to show how applications can be designed for concurrency.

read more

The Global Lockdown of Locks

The Global Lockdown of Locks

In my previous Overload article I showed how one can achieve great speedups using tasks as the foundation for concurrent programming instead of locks. The one thing that is not clear is whether one can use tasks for all the concurrent algorithms. Tasks may be applicable to certain types of problem, but not to all problems. This article tries to complete the picture by showing that all algorithms can use tasks and there is no need for locks.

read more