Оптимальное программирование в ранних ЭВМ: минимизация времени ожидания инструкций.
Optimum programming
Оптимальное программирование: исторический метод ускорения работы ранних ЭВМ за счёт расположения инструкций в памяти. Задержка доступа к данным в устаревшей памяти.
Сравнивайте с английским: нажмите на абзац — оригинал откроется в окне. Кнопка EN под абзацем показывает его прямо в тексте.
Введение
В истории вычислительной техники, оптимальное программирование, или оптимальное кодирование – это практика расположения инструкций компьютерной программы в памяти таким образом, чтобы минимизировать время, которое машина тратит на ожидание инструкций. Оно представляет исторический интерес главным образом из-за конструкции многих ранних цифровых компьютеров. Большинство ранних компьютеров использовали ту или иную форму последовательной памяти, преимущественно линию задержки или магнитные барабаны. В отличие от памяти с произвольным доступом современных компьютеров, слова в последовательной памяти становятся доступными по одному; время, необходимое для доступа к конкретному слову, зависит от «расстояния» между ним и словом, которое в данный момент считывается. Если линия задержки содержала n слов, среднее время чтения слова составляло бы n/2 тактов. Без оптимального кодирования такая машина большую часть времени простаивала бы в ожидании инструкций и данных. Чтобы обойти эту проблему, многие машины, в частности ACE Алана Тьюринга и его производные, включали поле, указывающее адрес следующей инструкции для выполнения, в формат своих инструкций. Программист, использующий оптимальное кодирование, определял время, необходимое для выполнения текущей инструкции, рассчитывал, на какое расстояние переместится система памяти за это время, и затем размещал следующую инструкцию программы в этой позиции. Таким образом, когда текущая инструкция завершалась и компьютер искал следующую, как указано в инструкции, эта ячейка памяти только что оказывалась на месте и могла быть немедленно прочитана. Например, если программист только что закодировал инструкцию ADD по адресу 400, и инструкция ADD требовала 4 такта для выполнения, программист установил бы поле «следующий адрес» инструкции на 404 и разместил бы следующую инструкцию там. В Соединенных Штатах оптимальное кодирование наиболее часто использовалось на IBM 650 и Bendix G 15. Обе машины имели оптимизирующие ассемблеры (SOAP для IBM, POGO для Bendix), которые могли автоматизировать эту задачу.
In the history of computing, optimum programming, or optimum coding is the practice of arranging a computer program's instructions in memory so as to minimize the time the machine spends waiting for instructions. It is of historical interest mainly due to the design of many early digital computers. Most early computers used some form of serial memory, primarily delay line memory or magnetic drums. Unlike the random access memory of modern computers, words in serial memory are made available one at a time; the time required to access a particular word depends on the "distance" between it and the word currently being read. If a given delay line held n words, the average time to read a word would be n/2 word times. Without optimum coding, such a machine would spend most of its time idly waiting for instructions and data. To circumvent this problem, many machines, particularly Alan Turing's ACE and its descendants, included a field specifying the address of the next instruction to be executed in their instruction format. A programmer employing optimum coding would look up the time needed to perform the current instruction, calculate how far the memory system would move in that time, and then place the next instruction for the program at that location. Thus when the current instruction completed and the computer looked for the next one as specified in the instruction, that memory location would just be arriving and would be able to be read in immediately. For example, if a programmer had just coded an ADD instruction at address 400, and the ADD instruction required 4 word times to execute, the programmer would set the "next address" field of the instruction to 404, and would place the next instruction there. In the United States, optimum coding was most commonly employed on the IBM 650 and the Bendix G 15. Both machines had optimizing assemblers (SOAP for the IBM, POGO for Bendix) that could automate this task.