En la historia de la informática, la programación óptima o codificación óptima es la práctica de organizar las instrucciones de un programa informático en la memoria de modo de minimizar el tiempo que la máquina pasa esperando instrucciones. Es de interés histórico principalmente debido al diseño de muchas de las primeras computadoras digitales.
La mayoría de las primeras computadoras utilizaban algún tipo de memoria serial, principalmente memoria de línea de retardo o tambores magnéticos . A diferencia de la memoria de acceso aleatorio de las computadoras modernas, las palabras en la memoria serial están disponibles de a una por vez; el tiempo requerido para acceder a una palabra en particular depende de la "distancia" entre ella y la palabra que se está leyendo en ese momento. Si una línea de retardo dada tuviera n palabras, el tiempo promedio para leer una palabra sería n /2 veces palabra. Sin una codificación óptima, una máquina de este tipo pasaría la mayor parte de su tiempo esperando instrucciones y datos. [1]
Para evitar este problema, muchas máquinas, en particular la ACE de Alan Turing y sus descendientes, incluían un campo que especificaba la dirección de la siguiente instrucción que se iba a ejecutar en su formato de instrucción. Un programador que empleara la codificación óptima buscaría el tiempo necesario para ejecutar la instrucción actual, calcularía cuánto se movería el sistema de memoria en ese tiempo y luego colocaría la siguiente instrucción para el programa en esa ubicación. De este modo, cuando la instrucción actual se completara y el ordenador buscara la siguiente como se especificaba en la instrucción, esa ubicación de memoria acabaría de llegar y podría leerse inmediatamente. Por ejemplo, si un programador acababa de codificar una instrucción en la dirección 400 y la instrucción requería 4 palabras para ejecutarse, el programador establecería el campo de "siguiente dirección" de la instrucción en 404 y colocaría allí la siguiente instrucción.ADD
ADD
En Estados Unidos, la codificación óptima se empleaba con mayor frecuencia en el IBM 650 [2] y el Bendix G-15 . Ambas máquinas tenían ensambladores optimizadores (SOAP para IBM, POGO para Bendix) que podían automatizar esta tarea.