De belles promesses
Dans leur recherche systématique de performances plus élevées, les fabricants de microprocesseurs sont arrivés au début des années 90 à traiter réellement en parallèle plus d'une instruction. C'est le superscalaire, qui s'est ajouté à l'utilisation de pipelines - découpage en tranches de chaque instruction (chargement, identification de l'opération, etc.) - permettant un délai minimal entre 2 départs d'instructions. Avec cette nouvelle technique il y a véritablement plus d'une unité de traitement dans un circuit.
Mais une barrière a été atteinte à cause des dépendances entre les instructions successives (il est courant que l'une d'elles nécessite le résultat de l'une des précédentes). Pour aller plus vite, l'exécution dans le désordre et le renommage de registres ont alors été utilisés. La première méthode consiste à essayer d'occuper au maximum les unités de calcul, au besoin en allant chercher des opérations situées plus loin que la suivante dans l'ordre du programme si celle ci nécessite un résultat encore indisponible. Le microprocesseur contient la logique nécessaire pour tout remettre dans l'ordre "à la sortie". Le renommage de registres est venu en appoint car 2 instructions peuvent aussi avoir successivement besoin du même registre. Là, on fait la différence entre les registres du point de vue du programme (logiques) et ceux, plus nombreux, du processeur (physiques) qui sont associés à la volée aux premiers. Ainsi, 2 itérations d'une même boucle peuvent coexister dans le processeur à un instant donné. Par exemple, l'Alpha 21264 de Digital Equipement a 4 unités de calcul des entiers, 2 unités pour la virgule flottante et travaille dans le désordre sur une fenêtre de 80 instructions. Ces 2 techniques sont probablement parmi les plus efficaces pour faire progresser les circuits classiques mais une nouvelle barrière peut éventuellement se présenter si on augmente encore le nombre d'unités de traitement.
Intel a fait un choix très différent pour sa nouvelle architecture 64 bits, IA-64, qui utilise le VLIW. Les instructions y sont regroupées en paquets où elles sont explicitement désignées comme étant à traiter en parallèle. Comme cette partie du travail est laissée au compilateur, le microprocesseur est allégé de la logique servant à optimiser l'ordonnancement. Son jeu d'instructions est radicalement différent de celui du Pentium. On peut normalement s'attendre à une progression spectaculaire des performances (sinon pourquoi tout changer ?) et il paraît que la compatibilité avec l'ancienne famille sera assurée (par émulation logicielle ?) mais cette nouveauté soulève quand même certaines questions. Est-ce que les concepteurs de compilateurs pourront rapidement fournir des produits vraiment optimisés alors qu'ils ne se sont jamais penchés sur le VLIW ? Est-ce qu'il n'y aura pas des algorithmes utilisant presque 100 % des possibilités d'un processeur donné (parce qu'ils seront "ajustés") et d'autres beaucoup moins ? Entre 2 générations de l'IA-64, comme les paquets sont fixés dans les programmes, est-ce qu'il n'y aura pour l'utilisateur que le choix entre obtenir une amélioration limitée des performances sur la même application ou dépendre des éditeurs de logiciel - qui a dit Microsoft ?
L'avenir dira quelle était la meilleure option pour le progrès de la micro-informatique.