Un modèle de programmation est un modèle d'exécution associé à une API ou à un schéma de code particulier. Dans ce contexte, deux modèles d'exécution interviennent simultanément : celui du langage de programmation de base et celui du modèle de programmation. Spark en est un exemple : Java est le langage de base et Spark le modèle de programmation. L'exécution peut reposer sur ce qui semble être des appels de bibliothèque . On peut citer comme autres exemples la bibliothèque POSIX Threads et MapReduce de Hadoop . Dans les deux cas, le modèle d'exécution du modèle de programmation diffère de celui du langage de base dans lequel le code est écrit. Par exemple, le langage C ne gère pas les entrées/sorties ni le comportement des threads dans son modèle d'exécution. Cependant, ces comportements peuvent être invoqués depuis la syntaxe C, en effectuant ce qui apparaît comme un appel à une bibliothèque C classique.
Ce qui distingue un modèle de programmation d'une bibliothèque classique, c'est que le comportement de l'appel ne peut être interprété en fonction du langage dans lequel le programme est écrit. Par exemple, le comportement des appels à la bibliothèque de threads POSIX ne peut être interprété en fonction du langage C. En effet, l'appel invoque un modèle d'exécution différent de celui du langage. Cette invocation d'un modèle d'exécution externe est la caractéristique fondamentale d'un modèle de programmation , par opposition à un langage de programmation .
En calcul parallèle , le modèle d'exécution doit souvent exploiter les caractéristiques du matériel pour atteindre des performances élevées. La grande diversité des matériels parallèles engendre un besoin tout aussi important de modèles d'exécution parallèles. Il est impraticable de créer un langage pour chaque modèle ; c'est pourquoi on utilise généralement une API pour invoquer son comportement. Ainsi, la programmation se fait principalement via des modèles de programmation parallèle plutôt que via des langages parallèles. La terminologie associée à ces modèles tend à se concentrer sur les spécificités du matériel qui les a inspirés, ce qui peut conduire à l'idée fausse qu'un modèle de programmation n'est pertinent que lorsqu'un modèle d'exécution correspond étroitement aux caractéristiques du matériel.