Well, When you call CreateDevice, the 2nd parameter is the D3DDEVTYPE_, of which options there are:
HAL, (Hardware Abstraction Layer, Which is Hardware-accelerated),
REF, (REFerence Rasterizer, D3D's Software Renderer that will "make use of special CPU instructions whenever it can"), and
SW (Custom Software Renderer "A pluggable software device that has been registered with IDirect3D9::RegisterSoftwareDevice.")
So, really the best way to go is get a fairly recent Video card, and use HAL.
As for the REF being buggy, well, If you can trust the DirectX c++ documentation, it says "Unlike a software device, the reference rasterizer supports every Direct3D feature. Because these features are implemented for accuracy rather than speed and are implemented in software, the results are not very fast"