Shown here are 2-million particles. OpenCL is used for controlling the particle movement. I used a 2D perlin height map as a vector field. Each particle travels along the vector field to give this smokey behavior.
Runs at 60fps on my NVidia GeForce 260M laptop. Uses my own personal engine.