À chaque cycle d'horloge, l'unité logique et arithmétique (ULA) du processeur exécute une opération élémentaire indiquée par le programme-machine. Si par exemple on veut ajouter deux nombres, d'abord l'adresse mémoire du premier est mise dans un registre lu par le processeur pour aller chercher à la bonne place de la mémoire RAM ; ensuite le nombre est rappelé de la mémoire dans le registre d'addition. La même opération est recommencée avec l'autre opérande. Ensuite, l'opération d'addition est exécutée, le résultat remplace le contenu du registre correspondant et finalement est sauvé dans la mémoire RAM. Évidemment, les registres, qui sont des mémoires très rapides, ne peuvent contenir qu'un très petite quantité de données et rappeler chaque fois que le besoin se présente la donnée nécessaire. Comme les accès à la mémoire RAM sont plus lents que les accès des registres, plusieurs cycles d'horloge s'écoulent pour le rappel des données pendant lesquels le processeur reste inactif. Quelques règles de bon sens et l'utilisation des compilateurs de plus en plus optimisés peuvent minimiser ce va-et-vient incessant.
Une avancée révolutionnaire fut la conception et la réalisation des premiers processeurs vectoriels. Pour comprendre leur mode de fonctionnement, imaginons que l'on veuille ajouter deux vecteurs, ce qu'en FORTRAN, par exemple, est effectué par la boucle
Si l'addition de deux nombres scalaires nécessite cycles d'horloge, l'addition de deux vecteurs à composantes nécessite cycles sur un processeur scalaire. En effet, la boucle précédente est décomposée en instructions machine plus élémentaires sous la forme
On constate donc qu'on a un gain de temps spectaculaire s'il est possible de faire subir la même opération à toutes les composantes d'un vecteur sur un processeur vectoriel. On dit alors que l'algorithme est vectorisable.
Cette remarque explique le soin que l'on a pris dans le chapitre sur les simulations dynamiques à montrer qu'il est possible de faire un balayage séquentiel selon un ordre pré-établi ; si les sites choisis lors du balayage sont suffisamment éloignés (plus loin que le double de la portée de l'interaction), la mise à jour de la configuration à un site donné est indépendant du site suivant dans l'ordre du balayage. L'algorithme de Metropolis pour le sous-ensemble des sites sélectionnés est alors vectorisable.
Dans la course vers la performance calculatoire, les ordinateurs parallèles furent l'étape de sophistication suivante. Dans cette architecture, plusieurs processeurs exécutent des tâches identiques ou comparables sur des données partagées tant qu'il n'y ait pas de conflit d'accès et de préséance des opérations sur les données partagées. Cette architecture est appelée MIMD de multiple instruction multiple data stream. Des ordinateurs multiprocesseurs avec des mémoires partagées (comme le SYMMETRY) ou des systèmes avec des mémoires locales (comme l'Intel iPSC) fonctionnent sur ce principe.
Pour une taxonomie plus approfondie sur les diverses architectures, on peut consulter l'article de [FLYNN]. Paradoxalement, aujourd'hui la technologie avance plus rapidement que la conception de nouveaux algorithmes parallèles efficaces. Un des défis de l'algorithmique est donc la conception de tels algorithmes [GIBBONS ET AL. 1989].