Scheduling cross-threaded tasks using .Net’s BlockingCollection

Concurrency has always been a complicated aspect of computer science.

With modern hardware increasing not only in speed but also in parallelism, it has become necessary to use concurrency in applications to fully exploit available resources.

This is done using threads, which can be thought of as independently running sub-programs of a larger program, or process. Each thread has its own state – including its stack – and executes its own code, but stacks within the same process can generally share other resources at will.

With even the most simple applications being multi-threaded these days, games are no exception. As such, one can hardly find a modern game engine or framework that does not use parallelism in some form or another.

However, today I do not want to talk about how to move complex systems like physics simulation, AI, pathfinding, or even rendering to different threads – like many games do.

Instead I will look at a specific low-level problem:

Assuming we have a multi-threaded program, how can the different threads communicate, and specifically: how can we make sure that certain code is always run on certain threads.

Continue reading →

CPU vs GPU particles – from 20 to 200 FPS

Last week I showed how we can leverage the power of the GPU to render huge numbers of particles with great performance.

I stated that by using the GPU to simulate our particles we can get much better performance than if we were using the CPU only. However – and while you may believe me – I provided no evidence that this is in fact the case.

That is something I want to rectify today.

Continue reading →

Parametric GPU accelerated particles

Last week I wrote about how we can use parametric equations in particle systems.

Doing so allowed us to eliminate mutability from our particles. In that post I already hinted that this property allows us to easily move our particles to be simulated on the GPU.

That is what we will do today!

Continue reading →

Parametric Particles

Computer graphics has always been a major area of interest – and I would like to say expertise – for me.

Within graphics, particles and particle systems have played a big role since the days of the first video games.

It is not uncommon for games these days to often have thousands, if not tens or hundreds of thousands of particles on the screen at the same time. In fact, games without particles are a rare exception.

There are many topics that can be discussed when talking about particles, and I am sure I will cover many of them in the future.

Today I want to introduce the concept of parametric particles.

This is no grand effect, or even overly difficult, but it is a technique that every graphics programmer should be aware of. Even when not using it directly, I have found it useful when thinking about particle simulation.

Further, it provides a stepping stone for simple particle simulation on the GPU, which is a topic I want to cover in the near future.

Continue reading →