19. Может ли регистр использоваться в качестве фактического параметра в макровызове? А константа? Если да, то почему? Если нет, то почему?
20. Вам нужно реализовать макроассемблер. Из эстетических соображений ваш начальник решил, что макроопределения не должны предшествовать вызовам макросов. Как повлияет это решение на реализацию?
21. Подумайте, как можно поместить макроассемблер в бесконечный цикл.
22. Компоновщик считывает 5 модулей размером 200, 800, 600, 500 и 700 слов соответственно. Если они загружаются в этом порядке, то каковы константы перераспределения памяти?
23. Напишите модуль таблицы символов, состоящий из двух процедур: enter (symbol, value) и lookup (symbol, value). Первая вводит новые символические имена в таблицу, а вторая ищет их в таблице. Используйте какой-либо вариант хэширования.
24. Напишите простой ассемблер для компьютера Млс-1, о котором мы говорили в главе 4. Помимо оперирования машинными командами, обеспечьте возможность приписывать константы символическим именам во время ассемблирования, а также возможность ассемблировать константу в машинное слово.
25. Добавьте макросы к ассемблеру, который вы должны были написать, выполняя предыдущее задание.
Глава 8
Параллельные компьютерные архитектуры
Скорость работы компьютеров становится все выше, но и предъявляемые к ним требования постоянно растут. Астрономы пытаются воспроизвести всю историю Вселенной с момента большого взрыва и до сегодняшнего дня. Фармацевты хотели бы разрабатывать новые лекарственные препараты с помощью компьютеров, не принося в жертву легионы крыс. Разработчики летательных аппаратов могли бы получать лучшие результаты, если бы вместо строительства огромных аэродинамических труб моделировали свои конструкции на компьютере. Если говорить коротко, какими бы мощными ни были компьютеры, их возможностей никогда не хватит для решения многих нетривиальных задач (особенно научных, технических и промышленных).
Хотя тактовая частота постоянно растет, скорость коммутации нельзя увеличивать бесконечно. Главной проблемой остается скорость света — невозможно заставить протоны и электроны двигаться быстрее. Из-за высокой теплоотдачи компьютеры превратились в кондиционеры. Наконец, поскольку размеры транзисторов постоянно уменьшаются, в конце концов наступит время, когда каждый транзистор будет состоять из нескольких атомов, поэтому основной проблемой могут стать законы квантовой механики (например, принцип неопределенности Гейзенберга).
В результате, чтобы иметь возможность решать более сложные задачи, разработчики обратились к компьютерам параллельного действия (далее — параллельные компьютеры). Невозможно построить компьютер с одним процессором и временем цикла в 0,001 не, но зато можно построить компьютер с 1000 процессорами, время цикла каждого из которых составляет 1 не. И хотя быстродействия каждого процессора во втором случае очевидно мало, теоретически мы должны получить требуемую производительность.
Параллелизм можно вводить на разных уровнях. На самом низком уровне он может быть реализован в процессоре за счет конвейеризации и суперскалярной архитектуры с несколькими функциональными блоками. Скрытого параллелизма можно добиться путем значительного удлинения слов в командах. Посредством дополнительных функций можно «научить» процессор одновременно обрабатывать несколько программных потоков. Наконец, можно установить на одной микросхеме несколько процессоров. Однако все эти приемы, вместе взятые, способны повысить производительность максимум в 10 раз по сравнению с классическими последовательными решениями.