Программы могут использовать сколько угодно ядер, если можно распараллелить алгоритм работы. Но тут еще все зависит от ОС - как она раскидает потоки/нити по ядрам. Может вообще 4 однопоточные программы будут раскиданы по разным ядрам, и будет все работать быстрее чем на 1 ядре.
Сугубо из личного опыта: gcc можно запускать с разным количеством потоков, и на 8 ядрах (виртуально) компиляция идет в разы быстрее чем на 4 (виртуальных).