ОС  с поддержкой SMP может выполнять код на любом из доступных ОС ядер. в случае организации обработки в несколько потокой и назначения ОС каждого потока на свое ядро получается прирост производительности.
(в случае если ОС назначит потоки на одно и то же ядро никакого прироста не будет - будет только падение производительности на как минимум оверхед, необходимый для организации самого распараллеливания)

1) создание дополнительных потоков непосредственно вызовами ОС

2) использование стандарта программирования OpenMP
дополнительные директивы компилятора, автоматически организующие параллельный код


поскольку память для всех потоков одного процесса - общая, то её можно (и нужно) использовать для обмена информацией между параллельными участками - это максимально быстрый способ

количество ядер в традиционной SMP-системе ограничено