Джоэл МакКормак
Джоэл МакКормак — американский ученый-компьютерщик, который разработал для корпорации NCR версию машины p-кода , которая представляет собой своего рода стековую машину, популярную в 1970-х годах как предпочтительный способ реализации новых вычислительных архитектур и языков, таких как Pascal и BCPL . Конструкция NCR не имеет общей архитектуры с Pascal MicroEngine, разработанной Western Digital, но оба они предназначались для реализации p-системы UCSD .[1,2]
Теория P-машин
[ редактировать ]Урс Амманн, студент Никлауса Вирта , первоначально представил p-код в своей докторской диссертации (см. Урс Амманн, О генерации кода в компиляторе Паскаля, Программное обеспечение: практика и опыт, Том 7, № 3, 1977, стр. 391). –423). Основная идея заключается в том, что сложная программная система закодирована для несуществующего, вымышленного, минимального компьютера или виртуальной машины , и этот компьютер реализован на конкретном реальном оборудовании с помощью интерпретирующей компьютерной программы, которая обычно небольшая, простая и быстро разрабатываемая. Язык программирования Паскаль приходилось переписывать для каждого нового приобретаемого компьютера, поэтому Амманн предложил единожды переписать систему на виртуальную архитектуру. Успешной академической реализацией Паскаля стала UCSD p-System, разработанная Кеннетом Боулзом , профессором UCSD, который начал проект разработки универсальной среды программирования Паскаля с использованием архитектуры P-машины для множества различных вычислительных платформ, использовавшихся в то время. время. МакКормак был частью команды студентов, работавших над проектом.[3] Он взял с собой это знакомство и опыт, чтобы НКР .
P-дизайн машины
[ редактировать ]НКР наняла МакКормака сразу после окончания колледжа.Ранее они разработали побитовую аппаратную реализацию машины p-кода с использованием набора микросхем AMD AM2900 .Машину преследовало множество проблем с синхронизацией и производительностью;Маккормак предложил модернизировать процессор, который будет иметь микросеквенсор, основанный на программируемой логике .Когда Маккормак покинул NCR, чтобы основать Volition Systems, он продолжил работу над процессором в качестве подрядчика.
В этом новом процессоре использовался горизонтальный микрокод.что радикально усилило параллелизм внутри микроархитектуры.Эти широкие 80-битные микрослова позволяли ЦП выполнять множество операций за один микроцикл:процессор мог выполнять арифметическую операцию, одновременно выполняя чтение памяти во внутренний стек,или передать содержимое регистра, одновременно считывая новые данные в АЛУ.В результате многие из более простых операций с p-кодом требовали всего одной или двух микроинструкций;некоторые операции были построены с использованием тесных циклов из одного микрослова.
Два бита на такт выбирают одно из четырех времен цикла для каждой инструкции:130, 150 или 175 наносекунд, которые генерируются с помощью линии задержки. Более быстрые детали от AMD также позволяли бы обеспечить время цикла 98 нс, но соответственно более быстрого блока управления ветвями не было. Отдельный блок предварительной выборки/форматирования инструкций также использовал линии задержки для генерации асинхронных сигналов синхронизации. Это устройство имело 32-битный буфер и могло декодировать следующие данные в нескольких форматах: знаковый байт; беззнаковый байт; слово; и сжатый «большой» формат, в котором небольшие числа 0..127 кодировались в одном байте, а большие числа в пределах 128..32767 — в двух.
Встроенный стек из 1024 16-битных слов хранил временные значения — скаляры и множества. Адреса стека двигались вниз , при этом указатель стека уменьшался перед записью и увеличивался после чтения. Регистр во внутреннем файле AMD 2901 хранил значение вершины стека, чтобы ускорить простые операции. Сложение целых чисел занимало всего один цикл команд;поскольку в файле регистров всегда находился один операнд, требовалась только одна выборка из памяти стека.
Каждое широкое управляющее слово могло либо содержать адрес следующей микроинструкции, либо управлять следующей командой p-машины, которую необходимо извлечь. Таким образом, микросеквенсор мог практически произвольно переходить через управляющий код. Первые 256 микроинструкций в памяти соответствовали p-машинным инструкциям, поэтому микроассемблер помещал первое управляющее слово в соответствующее место. Инструкции P-кода, для выполнения которых требовалось несколько микроинструкций, не могли начинаться с ветки (поскольку это поле уже используется для перехода к остальной части микропрограммы для выполнения инструкции). [ нужна ссылка ]
P-машинная архитектура
[ редактировать ]ЦП использовал технику хранения верхнего слова стека в одном из регистров AMD 2901. Часто это приводило к уменьшению на одну микроинструкцию. Например, вот несколько p-кодов такими, какими они оказались. tos — это регистр, а q — это регистр. "|" означает параллельные действия в одном цикле. (Стек работает не совсем таким образом... он уменьшается до того, как в него записываются данные, и увеличивается после чтения данных.)
Поскольку контроль следующего адреса и местоположение следующего микрокода находились в каждом широком микрослове, не было никаких штрафов за выполнение любого порядка.микрокод. Таблица из 256 меток, и компилятор микрокода переместил первую инструкцию каждой из этих меток впервые 256 ячеек памяти микрокода. Единственное ограничение, которое это накладывало на микрокод, заключалось в том, что если p-код требовал более одной микроинструкции, то для первой микроинструкции не могло быть указано какое-либо управление потоком (поскольку оно было бы заполнено командой «goto <остальная часть микрокода для p» -код>).
fetch % Fetch and save in an AMD register the next byte opcode from % the prefetch unit, and go to that location in the microcode. q := ubyte | goto ubyteSLDCI % Short load constant integer (push opcode byte) % Push top-of-stack AMD register onto real stack, load % the top-of-stack register with the fetched opcode that got us here dec(sp) | stack := tos | tos := q | goto fetchLDCI % Load constant integer (push opcode word) % A lot like SLDCI, except fetch 2-byte word and "push" on stack dec(sp) | stack := tos | tos := word | goto fetchSLDL1 % Short load local variable at offset 1 % mpd0 is a pointer to local data at offset 0. Write appropriate % data address into the byte-addressed memory-address-register mar := mpd0+2 % Push tos, load new tos from memorySLDX dec(sp) | stack := tos | tos := memword | goto fetchLDL % Load local variable at offset specified by "big" operand r0 := big mar := mpd0 + r0 | goto sldxINCR % Increment top-of-stack by big operand tos := tos + big | goto fetchADI % Add two words on top of stack tos := tos + stack | inc(sp) | goto fetchEQUI % Top two words of stack equal? test tos - stack | inc(sp) tos := 0 | if ~zero goto fetch tos := 1 | goto fetch
Эту архитектуру следует сравнить с исходной спецификацией машины P-кода , предложенной Никлаусом Виртом .
P-производительность машины
[ редактировать ]Конечным результатом стала плата размером 9x11 дюймов для ЦП, которая работала с UCSD p-System быстрее, чем что-либо еще, с большим отрывом. В 35-50 раз быстрее, чем интерпретатор LSI-11 , и в 7-9 раз быстрее, чем это сделал Western Digital Pascal MicroEngine за счет замены микрокода LSI-11 микрокодом p-кода. Он также работал быстрее, чем машина Никлауса Вирта Лилита , но не имел возможностей растровой графики и примерно с той же скоростью, что и VAX-11/750, работающий с собственным кодом. (Но VAX мешал плохой код, исходящий из компилятора Berkeley Pascal, и он также был 32-битной машиной.)
Образование
[ редактировать ]- Калифорнийский университет, Сан-Диего : бакалавр, 1978 г.
- Калифорнийский университет, Сан-Диего : MS, 1979 г.
Позднее трудоустройство
[ редактировать ]Публикации
[ редактировать ]- Джоэл МакКормак, Роберт Макнамара. Эффективный и мозаичный обход многоугольников с использованием функций ребер полуплоскости, появится в отчете об исследовании 2000/4, Западная исследовательская лаборатория Compaq, август 2000 г. [Дополнительный набор документов семинара, указанный непосредственно ниже.]
- Джоэл МакКормак, Роберт Макнамара. Обход мозаичного многоугольника с использованием функций ребра полуплоскости, Материалы семинара EUROGRAPHICS/SIGGRAPH 2000 г. по графическому оборудованию, ACM Press, Нью-Йорк, август 2000 г., стр. 15–21.
- Роберт Макнамара, Джоэл МакКормак, Норман П. Джуппи. Предварительно отфильтрованные сглаженные линии с использованием функций расстояния в полуплоскости, Отчет об исследовании 98/2, Западная исследовательская лаборатория Compaq, август 2000 г. [Набор документов семинара, перечисленных ниже.]
- Роберт Макнамара, Джоэл МакКормак, Норман П. Джуппи . Предварительно отфильтрованные сглаженные линии с использованием функций расстояния в полуплоскости, Материалы семинара EUROGRAPHICS/SIGGRAPH 2000 г. по графическому оборудованию, ACM Press, Нью-Йорк, август 2000 г., стр. 77–85.
- Джоэл МакКормак, Кейт И. Фаркас, Рональд Перри, Норман П. Джуппи. Simple and Table Feline: быстрые эллиптические линии для отображения анизотропных текстур, отчет об исследованиях 99/1, Западная исследовательская лаборатория Compaq, октябрь 1999 г. [Набор статей SIGGRAPH, перечисленных ниже.]
- Джоэл МакКормак, Рональд Перри, Кит И. Фаркас, Норман П. Джуппи. Кошачьи: быстрые эллиптические линии для отображения анизотропных текстур, Материалы конференции SIGGRAPH 99, ACM Press, Нью-Йорк, август 1999 г., стр. 243–250.
- Джоэл МакКормак, Роберт Макнамара, Кристофер Джанос, Ларри Сейлер, Норман П. Джуппи, Кен Коррелл, Тодд Даттон, Джон Журавски. Neon: (Большой) (Быстрый) однокристальный ускоритель 3D-графики для рабочих станций, Отчет об исследовании 98/1, Западная исследовательская лаборатория Compaq, исправлено в июле 1999 г. [Набор документов Workshop и IEEE Neon, перечисленных ниже.]
- Джоэл МакКормак, Роберт Макнамара, Кристофер Джанос, Ларри Сейлер, Норман П. Джуппи, Кен Коррелл, Тодд Даттон, Джон Журавски. Реализация Neon: 256-битный графический ускоритель, IEEE Micro, Vol. 19, № 2, март/апрель 1999 г., стр. 58–69.
- Джоэл МакКормак, Роберт Макнамара, Кристофер Джанос, Ларри Сейлер, Норман П. Джуппи, Кен Коррелл. Neon: однокристальный графический ускоритель для 3D-рабочих станций, Материалы семинара EUROGRAPHICS/SIGGRAPH по графическому оборудованию 1998 г., ACM Press, Нью-Йорк, август 1998 г., стр. 123–132. [Признан лучшим документом/презентацией.]
- Джоэл МакКормак, Роберт Макнамара. Интеллектуальный буфер кадров, отчет об исследованиях 93/1, Digital Equipment Corporation, Западная исследовательская лаборатория, январь 1993 г. [Набор статей USENIX, перечисленных ниже.]
- Джоэл МакКормак, Роберт Макнамара. Набросок интеллектуального буфера кадров, Материалы зимней конференции USENIX 1993 г., Ассоциация USENIX, Беркли, январь 1993 г., стр. 169–179.
- Джоэл МакКормак. Написание быстрых X-серверов для «немых» буферов цветовых кадров, отчет об исследовании 91/1, Digital Equipment Corporation, Западная исследовательская лаборатория, февраль 1991 г. [Документ о расширенном программном обеспечении: практика и опыт указан ниже.]
- Джоэл МакКормак. Написание быстрых X-серверов для глупых буферов цветовых кадров, Программное обеспечение: практика и опыт, Том 20 (S2), John Wiley & Sons, Ltd., Западный Суссекс, Англия, октябрь 1990 г., стр. 83–108. [Переведено и перепечатано в японском издании журнала UNIX Magazine, ASCII Corp., октябрь 1991 г., стр. 76–96.]
- Хания Гаевска, Марк С. Манасс, Джоэл МакКормак. Почему X не является нашей идеальной оконной системой, Программное обеспечение: Практика и опыт, Том 20 (S2), John Wiley & Sons, Ltd., Западный Суссекс, Англия, октябрь 1990 г., стр. 137–171.
- Пол Дж. Асенте и Ральф Р. Свик с Джоэлом МакКормаком. Набор инструментов X Window System: Полное руководство и спецификации программиста, X версия 11, выпуск 4, Digital Press, Мейнард, Массачусетс, 1990.
- Джоэл МакКормак, Пол Асенте. Обзор X Toolkit, Материалы симпозиума ACM SIGGRAPH по программному обеспечению пользовательского интерфейса, ACM Press, Нью-Йорк, октябрь 1988 г., стр. 46–55.
- Джоэл МакКормак, Пол Асенте. Использование X Toolkit, или Как написать виджет. Материалы летней конференции USENIX 1988 г., Ассоциация USENIX, Беркли, июнь 1988 г., стр. 1–14.
- Джоэл МакКормак. Правильный язык для работы. Обзор UNIX , REVIEW Publications Co., Рентон, Вашингтон, Vol. 3, № 9, сентябрь 1985 г., стр. 22–32.
- Джоэл МакКормак, Ричард Гливс. Модуль-2: достойный преемник Паскаля, BYTE, Byte Publications, Питерборо, Нью-Гэмпшир, Vol. 8, № 4, апрель 1983 г., стр. 385–395.