О портале "Математика. ру" arrow Язык алгебры arrow Быстродействующие вычислительные машины
Математический портал Математику.ру

Б. Риман

Как часто случается, общая задача оказывается легче, чем была бы частная задача, если бы мы пытались решить ее непосредственно, в лоб [цит. по: 247, с 50].

 

Быстродействующие вычислительные машины

Печать E-mail
05.03.2008 г.

Быстродействующие вычислительные машины

Беседа об уравнениях в плане «Занимательной ал­гебры» не может пройти мимо решения уравнений на вычислительных машинах. Мы уже говорили о том, что вычислительные машины могут «играть» в шах­маты (или шашки). Математические машины могут выполнять и другие задания, например, перевод с од­ного языка на другой, оркестровку музыкальной ме­лодии и т.д. Нужно только разработать соответствую­щую «программу», по которой машина будет действо­вать.

Конечно, мы не будем рассматривать здесь «про­граммы» для игры в шахматы или для перевода с одного языка на другой: эти «программы» крайне слож­ны. Мы разберем лишь две очень простенькие «про­граммы». Однако вначале нужно сказать несколько слов об устройстве вычислительной машины.

Выше (в гл. I) мы говорили об устройствах, кото­рые позволяют производить многие тысячи вычисле­ний в секунду. Эта часть вычислительной машины, служащая для непосредственного выполнения дей­ствий, называется арифметическим устрой­ством. Кроме того, машина содержит управляю­щее устройство (регулирующее работу всей ма­шины) и так называемую память. Память, или, иначе, запоминающее устройство, представляет собой хранилище для чисел и условных сигналов. Наконец, машина снабжена особыми устройствами для ввода новых цифровых данных и для выдачи готовых ре­зультатов. Эти готовые результаты машина печата­ет (уже в десятичной системе) на специальных кар­точках.

Всем хорошо известно, что звук можно записать на пластинку или на пленку и затем воспроизвести. Но запись звука на пластинку может быть произве­дена лишь один раз: для новой записи нужна уже новая пластинка. Несколько иначе осуществляется запись звука в магнитофоне: при помощи намагничи­вания особой ленты. Записанный звук можно воспро­извести нужное число раз, а если запись оказалась уже ненужной, ее можно «стереть» и произвести на той же ленте новую запись. На одной и той же ленте можно произвести одну за другой несколько записей, причем при каждой новой записи предыдущая «сти­рается».

На подобном же принципе основано действие за­поминающих устройств. Числа и условные сигналы записываются (при помощи электрических, магнит­ных или механических сигналов) на специальном барабане, ленте или другом устройстве. В нужный момент записанное число может быть «прочтено», а если оно уже больше не нужно, то его можно стереть, а на его месте записать другое число. «Запоминание» и «чтение» числа или условного сигнала длятся всего лишь миллионные доли секунды.

«Память» может содержать несколько тысяч ячеек, каждая ячейка - несколько десятков элементов, например магнитных. Для записи чисел по двоичной системе счисления условимся считать, что каждый намагниченный элемент изображает цифру 1, а ненамагниченный - цифру 0. Пусть, например, каждая ячейка памяти содержит 25 элементов (или, как го­ворят, 25 «двоичных разрядов», причем первый эле­мент ячейки служит для обозначения знака числа (+ или -), следующие 14 разрядов служат для за­писи целой части числа, а последние 10 разрядов - для записи дробной части. На рис. 11 схематически изображены две ячейки памяти; в каждой по 25 раз­рядов. Намагниченные элементы обозначены знаком +, ненамагииченные обозначены знаком -. Рассмо­трим верхнюю из изображенных ячеек (запятая по­казывает, где начинается дробная часть числа, а пунк­тирная линия отделяет первый разряд, служащий для записи знака, от остальных). В ней записано (в двоичной системе счисления) число +1011,01 или - в привычной для нас десятичной системе счисления - число 11,25.

Кроме чисел в ячейках памяти записываются при­казы, из которых состоит программа. Рассмотрим, как выглядят приказы для так называемой трех-адресной машины. В этом случае при записи при­каза ячейка памяти разбивается на 4 части (пунктир­ные линии на нижней ячейке, рис. 11). Первая часть служит для обозначения операции, причем операции записываются числами (номерами).

Например.

 

Image

 

Приказы расшифровываются так: первая часть ячейки - номер операции, вторая и третья части - номера ячеек (адреса), из которых надо взять числа для выполнения этой операции, четвертая часть - номер ячейки (адрес), куда следует отправить по­лученный результат.

 

Image

 

 

 

Например, на рис.  11   (нижняя строка) записаны в двоичной системе числа 11, 11, 111, 1011 или в десятичной системе: 3, 3, 7, 11, что означает следующий приказ: выполнить операцию 3 (т. е. умножение) над числами, находящимися в третьей и седьмой ячейках памяти, а получен­ный результат «запомнить» (т. е. записать) в один­надцатой ячейке.

В дальнейшем мы будем записывать числа и при­казы не условными значками, как на рис. 11, а прямо в десятичной системе счисления. Например, приказ, изображенный в нижней строке рис. 11, запишется так:

 

Image

 

Рассмотрим теперь два простеньких примера про­грамм.

 

Image

 

Посмотрим, как будет работать машина, у кото­рой в первых пяти ячейках записаны эти данные.

1-й приказ: сложить числа, записанные в 4-й и 5-й ячейках, и отправить результат снова в 4-го ячей­ку (вместо того, что там было записано ранее). Таким образом, машина запишет в 4-ю ячейку число 0+1 = 1. После выполнения 1-го приказа в 4-й и 5-й ячейках будут следующие числа:

4) 1,

5)1.

2-й приказ: умножить число, имеющееся в 4-й ячейке, на себя (т. е. возвести его в квадрат) и ре­зультат, т. е. I2, выписать на карточку (стрелка озна­чает выдачу готового результата).

3-й приказ: передача управления в 1-ю ячейку. Иначе говоря, приказ п. у. означает, что надо снова по порядку выполнять все приказы, начиная с 1-го. Итак, снова 1-й приказ.

1-й приказ: сложить числа, имеющиеся в 4-й и 5-й ячейках, и результат снова записать в 4-й ячейке. В результате в 4-й ячейке будет число 1 + 1 = 2:

4) 2,

5) 1.

2-й приказ: возвысить в квадрат число, стоящее в 4-й ячейке, и полученный результат, т. е. 22, выпи­сать на карточку (стрелка - выдача результата).

3-й приказ: передача у п р а в л е н и я в пер­вую ячейку (т. е. опять переход к 1-му приказу).

1-й приказ: число 2+1=3 отправить в 4-ю ячейку:

4) 3,

5) 1.

2-й приказ: выписать на карточку число З2.

3-й приказ: передача управления в 1-ю ячейку и т. д.

Мы видим, что машина вычисляет один за другим квадраты целых чисел и выписывает их на карточку. Заметьте, что каждый раз набирать новое число вручную не надо: машина сама перебирает под­ряд целые числа и возводит их в квадрат. Действуя по этой программе, машина вычислит квадраты всех целых чисел, скажем, от 1 до 10 000 в течение несколь­ких секунд (или даже долей секунды).

Следует отметить, что в действительности про­грамма для вычисления квадратов целых чисел должна быть несколько сложнее той, которая приве­дена выше. Это прежде всего относится ко 2-му при­казу. Дело в том, что выписывание готового резуль­тата' на карточку требует во много раз больше вре­мени, чем выполнение машиной одной операции. Поэтому готовые результаты сначала «запоминаются» в свободных ячейках «памяти», а уже после этого («не спеша») выписываются на карточку. Таким об­разом, первый окончательный результат должен «за­поминаться» в 1-й свободной ячейке «памяти», вто­рой результат - во 2-й свободной ячейке, третий - в 3-й и т. д. В приведенной выше упрощенной про­грамме это никак не было учтено.

Кроме того, машина не может долго заниматься вычислением квадратов - не хватит ячеек «памяти»,- а «угадать», когда машина уже вычислила нужное нам число квадратов, чтобы в этот момент выклю­чить ее, - невозможно (ведь машина производит многие тысячи операций в секунду!). Поэтому преду­смотрены особые приказы для остановки машины в нужный момент. Например, программа может быть со­ставлена таким образом, что машина вычислит ква­драты всех целых чисел от 1 до 10 000 и после этого автоматически выключится.

Есть и другие более сложные виды приказов, на которых мы здесь для простоты не останавливаемся.

Вот как выглядит в действительности программа для вычисления квадратов всех целых чисел от 1 до 10000:

 

Image

 

 

Image

 

 

 

 

 

Первые два приказа мало отличаются от тех, ко­торые были в предыдущей упрощенной программе. После выполнения этих двух приказов в 8-й, 9-й и 10-й ячейках будут следующие числа:

8) 1

9) 1

10) 12

Третий приказ очень интересен: надо сложить то, что стоит во 2-й и 6-й ячейках, и результаты сно­ва записать во 2-й ячейке, после чего 2-я ячейка будет иметь вид

2) умножение   8   8    11.

Как видите, после выполнения третьего приказа меняется второй приказ, вернее меняется один из адресов 2-го приказа. Ниже мы выясним, для чего это делается.

Четвертый приказ: условная передача управления (вместо 3-го приказа в рассмотренной ранее программе). Этот приказ выполняется так: если число, стоящее в 8-й ячейке, меньше числа, стоящего в 7-й ячейке, то передается управление в 1-ю ячейку; в противном случае выполняется следующий (т. е. 5-й) приказ. В нашем случае действительно 1<10 000, так что происходит передача управления в 1-ю ячейку. Итак, снова  1-й приказ.

После выполнения 1-го приказа в 8-й ячейке будет число 2.

Второй приказ, который теперь имеет вид

2) умножение   8   8    11.

заключается в том, что число 22 направляется в 11-ю ячейку. Теперь ясно, зачем был выполнен ранее 3-й приказ: новое число, т. е. 22, должно попасть не в 10-ю   ячейку, которая уже занята.

 

 

 

 

 

 

После выполнения 1-го и 2-го приказов у нас будет следующие числа:

8) 2

9) 1

10) 12

11) 22

 

После выполнения 3-го приказа 2-я ячейка примет вид

2) умножение   8   8    12,

т. е. машина «подготовилась» к тому, чтобы записать новый результат в следующую, 12-ю ячейку. Так как в 8-й ячейке все еще стоит меньшее число, чем в 9-й ячейке, то 4-й приказ означает снова передачу упра­вления в 1-ю ячейку.

Теперь после выполнения 1-го и 2-го приказов по­лучим:

8) 3

9) 1

10) 12

11) 23

12) 32

До каких пор машина будет по этой программе вычислять квадраты? До тех пор, пока в 8-й ячейке не появится число 10000, т.е. пока не будут вычислены квадраты чисел от 1 до 10 000. После этого 4-й приказ уже не передаст управления в 1-ю ячейку (так как в 8-й ячейке будет стоять число, не меньшее, а равное числу, стоящему в 7-й ячейке), т. е. после 4-го при­каза машина выполнит 5-й приказ: остановится (вы­ключится).

Рассмотрим теперь более сложный пример про­граммы: решение систем уравнений. При этом мы рассмотрим упрощенную программу. При желании читатель сам подумает о том, как должна выглядеть такая программа в полном виде.

Пусть задана система уравнений:

 

Image

 

Эту систему нетрудно решить:

 

Image

 

 

Для решения такой системы (с заданными числовыми значениями коэффициентов а, b, с, d, е, f) вам потре­буется, вероятно, несколько десятков секунд. Машина же может решить в секунду тысячи таких систем. Рассмотрим соответствующую программу. Будем считать, что даны сразу несколько систем:

 

Image

 

с числовыми значениями коэффициентов а, b, с, d, е, f, а', b', ...

Вот соответствующая программа:

 

Image

1-й приказ: составить произведение чисел, стоя­щих в 28-й и 30-й ячейках, и направить результат в 20-ю ячейку. Иначе говоря, в 20-й ячейке будет запи­сано число се.

Аналогично выполняются приказы 2-й - 6-й. Пос­ле их выполнения в ячейках 20-й - 25-й будут нахо­диться следующие числа:

 

Image

 

7-й приказ: из числа, стоящего в 20-й ячейке, вычесть число, стоящее в 21-й ячейке, и результат (т. е. се-bf) снова записать в 20-ю ячейку.

Аналогично выполняются приказы 8-й и 9-й. В ре­зультате в ячейках 20-й, 21-й, 22-й окажутся следую­щие числа:

 

Image

 

10-й и 11-й приказы: составляются частные

 

Image

 

и выписываются на карточку (т. е. выдаются как го­товые результаты). Это и есть значения неизвестных, получаемых из первой системы уравнений.

Итак, первая система решена. Зачем же дальней­шие приказы? Дальнейшая часть программы (ячей­ки 12-я- 19-я) предназначена для того, чтобы заста­вить машину «подготовиться» к решению второй системы уравнений. Посмотрим, как это происходит. Приказы с 10-го по 17-й заключаются в том, что к содержимому ячеек 1-й - 6-й прибавляется запись, имеющаяся в 19-й ячейке, а результаты снова остают­ся в ячейках 1-й-6-й. Таким образом, после выпол­нения 17-го приказа первые шесть ячеек будут иметь следующий вид:

 

Image

18-й приказ: передача управления в первую ячейку.

Чем же отличаются новые записи в первых шести ячейках от прежних записей? Тем, что первые два адреса в этих ячейках имеют номера не от 26 до 31, как прежде, а номера от 32 до 37. Иначе говоря, машина снова будет производить те же действия, но числа будет брать не из ячеек 26-й-31-й, а из ячеек 32-й - 37-й, где стоят коэффициенты второй системы уравнений. В результате машина решит вторую систему уравнений. После решения второй системы ма­шина перейдет к третьей и т. д.

Из сказанного становится ясным, как важно уметь составить правильную «программу». Ведь машина «сама» ничего делать не «умеет». Она может лишь выполнять заданную ей программу. Имеются про­граммы для вычисления корней, логарифмов, синусов, для решения уравнений высших степеней и т. д. Мы уже говорили выше о том, что существуют програм­мы для игры в шахматы, для перевода с иностран­ного языка, ... Конечно, чем сложнее задание, тем сложнее соответствующая  программа.

Заметим в заключение, что существуют так назы­ваемые программирующие программы, т. е. такие, с помощью которых сама машина может со­ставить требуемую для решения задачи программу. Это значительно облегчает составление программы, которое часто бывает очень трудоемким.

 
След. »
Яндекс.Метрика