Parts of the program may be running one process, but using many cores - that's hyperthreading. And you will see acceleration from that with both physical and virtual cores.
That is not my understanding of hyperthreading. As far as I understand hyperthreading shares the execution blocks on a physical core to push through 2 threads simultaneously instead of 1 with fancy scheduling trickery.
If a physical core would've been entirely occupied with Process A but it instead must share resources with Process B then Process A would take longer to complete than it would have without hyperthreading. However, if Process A doesn't fully utilize the core then the remainder can work on Process B and you get a net gain in performance with hyperthreading.
One core running multiple threads simultaneously is hyperthreading, where as I don't believe it is possible to have one thread executing on multiple cores simultaneously.
All of these threads are getting us tied into quite the knot :)