Non, pas vraiment.
Il faudrait paralléliser les instructions de quelque manière que ce soit et beaucoup d'entre elles dépendent des résultats d'autres instructions [1]. En outre, l'unité arithmétique (le cerveau, qui calcule réellement) n'est généralement pas le goulot d'étranglement.
Pour accéder aux données et les calculer, il faut les stocker. Pour que cela soit rapide, il existe plusieurs couches de mémoire (registres, cache (niveau 1, 2, 3), RAM). Deux cœurs (dans un processeur x86) ne partagent généralement que la RAM (et peut-être un cache L3). Vous ne pouvez donc pas simplement diviser un programme, car l'autre moitié aurait les données dont elle a besoin.
Comment fonctionne l'Hyperthreading
L'hyperthreading profite du temps, l'unité de calcul attend autre chose.
Le chargement d'une valeur à partir de la RAM, par exemple, prend beaucoup de temps (environ 500 cycles de CPU). Pendant ce temps, alors que l'unité arithmétique ne ferait normalement rien, l'Hyperthreading exécute le second processus sur le même cœur.
[C'est également sur ce point que l'exécution spéculative tente d'intervenir. Et peut-être créer quelques failles de sécurité (Spectre et Meltdown).