Parallelizing things is easy, but making them fast is hard. A blog about parallel algorithms, data structures, programming languages, and anything else that comes to mind. Written by Sam Westrick.
The One Billion Row Challenge took off recently, and I thought it would be fun to try solving it using MaPLe (MPL for short). The MPL language is a parallel functional language, with excellent scalability on multicore machines. I have access to a 72-core (144 hyperthreaded) multicore server, so let’s see how fast we can get on that machine.
In a Delaunay triangulation, no circumcircle contains another point. Delaunay triangulations have a lot of applications: for example, in graphics, to produce “nice” meshes which avoid skinny triangles.
A curiosity grabbed ahold of me a couple weeks ago. The question is: how many primitives do we really need in a general purpose, parallel, functional programming language? After all, many interesting functions can be expressed in terms of one another. Perhaps the simplest example would be implementing a parallel map on arrays in terms of tabulate, i.e. the “build-an-array” function, which in…
Over the past two months, I’ve developed a morning routine: Drink a big glass of water (always hydrate before you caffeinate, folks) Pour a cup of coffee (essential) Eat breakfast (almost always scrambled eggs… delicious) Open Duolingo, and write down everything . “Write down everything”, you say? Yes, everything! For learning Mandarin, I can’t imagine doing it any other way. The pages up top show…
While browsing through The Computer Music Tutorial by Curtis Roads, I came across a beautifully simple reverberator circuit. This circuit simulates the acoustic effect of a particular space—such as a concert hall or cathedral—using only two components: comb and all-pass filters. The filters can be tuned to simulate a variety of different spaces.
Seam carving is a technique for content-aware resizing, which changes the size of an image while attempting to preserve the interesting content of the image. The basic idea behind the technique is to remove low-energy seams: paths of pixels that are similar to their surroundings. A removed seam can be either vertical or horizontal, to reduce either the width or height of an image.