Les noyaux (ou CPU) sont les éléments physiques de votre ordinateur qui exécutent du code. Habituellement, chaque noyau a tous les éléments nécessaires pour effectuer des calculs, enregistrer des fichiers, des lignes d'interruption, etc.
La plupart des systèmes d'exploitation représentent des applications comme processus. Cela signifie que l'application possède son propre espace d'adressage (== view of memory), où le système d'exploitation s'assure que cette vue et son contenu sont isolés des autres applications.
Un processus consiste en un ou plusieurs threads , qui exécutent le travail réel d'une application en exécutant le code machine sur une CPU. Le système d'exploitation détermine quel thread exécute sur quelle CPU (en utilisant une heuristique intelligente pour améliorer l'équilibre de la charge, la consommation d'énergie, etc.). Si votre application ne comprend qu'un seul thread, alors votre système multi-processeurs ne vous aidera pas beaucoup car il n'utilisera encore qu'un seul CPU pour votre application. (Cependant, les performances globales peuvent encore s'améliorer car le système d'exploitation exécutera d'autres applications sur les autres processeurs afin qu'ils ne se mélangent pas avec le premier).
maintenant à vos questions spécifiques:
1) Le système d'exploitation permet généralement d'au moins donner des indications sur le noyau qui vous voulez exécuter certains threads. Ce que fait OpenMP est de générer du code qui engendre une certaine quantité de threads pour distribuer le travail de calcul partagé à partir des boucles de votre programme dans plusieurs threads. Il peut utiliser le mécanisme d'indication du système d'exploitation (voir: Affinité de thread) pour le faire. Toutefois, les applications OpenMP continueront d'être exécutées en même temps que les autres et le système d'exploitation est donc libre d'interrompre l'un des threads et de planifier d'autres tâches (potentiellement non liées) sur un CPU. En réalité, il existe de nombreux schémas d'ordonnancement différents que vous pouvez appliquer en fonction de votre situation, mais ceci est très spécifique et la plupart du temps, vous devriez être capable de faire confiance à votre système d'exploitation pour vous.
2) Même si vous exécutez une application monothread sur un processeur multi-cœurs, vous remarquez que d'autres processeurs fonctionnent également. Cela vient a) du système d'exploitation faisant son travail entre-temps et b) du fait que votre application ne fonctionne jamais seule - chaque système en cours d'exécution consiste en un tas de tâches en cours d'exécution. Vérifiez le gestionnaire de tâches de Windows (ou ps/top sous Linux) pour vérifier ce qui est en cours d'exécution.
Exemple minimal de fonctionnement du matériel: http://stackoverflow.com/a/33651438/895245 –