Джоэл МакКормак - Википедия - Joel McCormack
Джоэл МакКормак является дизайнером Корпорация NCR версия машина p-кода, что является своего рода штабелеукладчик популярный в 1970-х годах как предпочтительный способ реализации новых вычислительных архитектур и языков, таких как Паскаль и BCPL. Дизайн NCR не имеет общей архитектуры с Паскаль MicroEngine разработано Western Digital но оба были предназначены для выполнения UCSD p-система.[1,2]
Теория П-машины
Урс Амманн, студент Никлаус Вирт, первоначально представленный p-код в его докторской диссертации (см. Урс Амманн, О генерации кода в компиляторе Паскаля, Программное обеспечение - Практика и опыт, Том 7, № 3, 1977, стр. 391–423). Основная идея состоит в том, что сложная программная система кодируется для несуществующего, вымышленного, минимального компьютера или виртуальная машина и этот компьютер реализован на конкретном реальном оборудовании с интерпретирующей компьютерной программой, которая обычно небольшая, простая и быстро разрабатывается. Язык программирования Паскаль приходилось переписывать для каждого приобретаемого нового компьютера, поэтому Амманн предложил один раз написать систему для виртуальной архитектуры. Успешная академическая реализация Паскаль был UCSD p-система разработан Кеннет Боулз, профессор UCSD, начавший проект разработки универсального Паскаль среда программирования, использующая архитектуру P-machine для множества различных вычислительных платформ, используемых в то время. Маккормак был частью команды студентов, работавших над проектом. [3] Он взял это знакомство и опыт с собой, чтобы NCR.
P-машина Дизайн
В 1979 году Маккормак был принят на работу в NCR сразу после окончания колледжа, и они разработали Битовая нарезка реализация машина p-кода с использованием Am2900 набор микросхем. Этот ЦПУ было множество проблем с синхронизацией и производительностью, поэтому Маккормак предложил полностью изменить дизайн процессора с использованием программируемое логическое устройство основан Микросеквенсор. Маккормак покинул NCR, чтобы основать компанию под названием Volition Systems, но продолжил работу над ЦП в качестве подрядчика. Новый ЦП использовал 80-битный микроворд, поэтому параллелизм в микрокоде был радикально улучшен. В микрокоде было несколько циклов, состоящих из одной инструкции, и многие из более простых операций p-кода занимали 1 или 2 инструкции микрокода. Благодаря широкому микрослову и тщательному расположению шин, а также увеличению регистров адреса памяти, ЦП мог выполнять операции внутри ALU, передавая слово памяти непосредственно во встроенный стек, или передавать один источник в ALU при отправке ранее вычисленный регистр на шину назначения за один микроцикл.
ЦП работал на трех разных тактовых частотах (с использованием линий задержки для выбираемых часов); два бита в микростроке выбирают время цикла для этой инструкции. Часы около 130, 150 и 175 наносекунд. Новые детали от AMD дало бы более быстрый цикл 98 нс для самых быстрых инструкций, но они не вышли с соответственно более быстрым блоком управления ветвлением.
Был отдельный блок предварительной выборки / форматирования инструкций (опять же, с использованием останавливаемых часов линии задержки для синхронизации ... асинхронная логика допускает искаженные тайминги). Он имел 32-битный буфер и мог доставлять следующие данные в виде байта со знаком, байта без знака, 16-битного слова или «большого» операнда (одно- или двухбайтовый формат, где 0..127 были закодированы как один байт, а 128..32767 было закодировано как два байта).
На плате имелся стек из 1024 16-битных слов, так что в нем можно было работать как со скалярами, так и с наборами. Верхняя часть стека фактически хранилась в одном из регистров AMD 2901, так что простые операции, такие как сложение целых чисел, занимали один цикл. Раньше мы использовали метод хранения верхнего слова стека в одном из регистров AMD 2901. Часто это приводило к уменьшению на одну микрокоманду. (Стек не совсем так работает ... он уменьшается перед данные записываются в него, и увеличиваетсяпосле данные читаются.)
Поскольку управление следующим адресом и местоположение следующего микрокода находились в каждом широком микрорде, не было никаких штрафов за выполнение микрокода в любом порядке. Таким образом, у нас была таблица из 256 меток, и компилятор микрокода переместил первую инструкцию на каждой из этих меток в первые 256 ячеек памяти микрокода. Единственное ограничение, наложенное на микрокод, заключалось в том, что если для p-кода требуется более одной микрокоманды, тогда для первой микрокоманды не может быть задано какое-либо управление потоком (поскольку она будет заполнена с помощью "goto <остальной части микрокода для p -код>).[нужна цитата ]
Архитектура P-машины
ЦП использовал технику хранения верхнего слова стека в одном из регистров AMD 2901. Часто в результате получалось на одну микрокоманду меньше. Например, вот несколько p-кодов в том виде, в котором они закончились. tos - это регистр, а q - регистр. "|" означает параллельные действия в одном цикле. (Стек не совсем так работает ... он уменьшается перед данные записываются в него, и увеличивается после данные читаются.)
Поскольку управление следующим адресом и местоположение следующего микрокода находились в каждом широком микрорде, не было никаких штрафов за выполнение микрокода в любом порядке. Таблица из 256 меток, и компилятор микрокода переместил первую инструкцию на каждой из этих меток в первые 256 ячеек памяти микрокода. Единственное ограничение, наложенное на микрокод, заключалось в том, что если для p-кода требуется более одной микрокоманды, тогда для первой микрокоманды не может быть задано какое-либо управление потоком (поскольку она будет заполнена с помощью "goto <остальной части микрокода для p -код>).
выберите% Fetch и сохраните в регистре AMD код операции следующего байта из% блока предварительной выборки и перейдите в это место в микрокоде. q: = ubyte | goto ubyteSLDCI% Целочисленная константа короткой загрузки (проталкивание байта кода операции)% Перемещение регистра AMD верхнего уровня стека в реальный стек, загрузка% регистра верхнего уровня стека с выбранным кодом операции, который привел нас сюда dec (sp) | стек: = tos | tos: = q | goto fetchLDCI% Целочисленная константа загрузки (слово кода операции push)% Во многом похоже на SLDCI, за исключением выборки 2-байтового слова и «push» в стеке dec (sp) | стек: = tos | tos: = слово | goto fetchSLDL1% Локальная переменная для короткой загрузки со смещением 1% mpd0 - это указатель на локальные данные со смещением 0. Записать соответствующий адрес% данных в адресный регистр памяти с байтовым адресом mar: = mpd0 + 2% Push tos, load new tos из памятиSLDX dec (sp) | стек: = tos | tos: = memword | goto fetchLDL% Загрузить локальную переменную со смещением, указанным операндом "большой" r0: = big mar: = mpd0 + r0 | goto sldxINCR% Увеличить верхнюю часть стека на большой операнд tos: = tos + big | goto fetchADI% Добавить два слова поверх стека tos: = tos + stack | inc (sp) | goto fetchEQUI% Два первых слова в стеке равны? тестовые пакеты - стек | inc (sp) tos: = 0 | if ~ zero goto fetch tos: = 1 | goto fetch
Эту архитектуру стоит сравнить с оригиналом. P-кодовая машина спецификация, предложенная Никлаус Вирт.
Производительность P-машины
Конечным результатом была плата 9 "x11" для процессора, который работал UCSD p-система быстрее, чем что-либо еще, с большим отрывом. В 35-50 раз быстрее, чем LSI-11 переводчик, и в 7-9 раз быстрее Western Digital Паскаль MicroEngine сделал путем замены микрокода LSI-11 микрокодом p-кода. Он также работал быстрее, чем Никлаус Вирт Лилит машина, но ей не хватало возможностей растровой графики и примерно такой же скорости, как у VAX-11/750 работает собственный код. (Но VAX был затруднен из-за плохого кода, выходящего из компилятора Berkeley Pascal, а также был 32-битной машиной.)
Образование
- Калифорнийский университет в Сан-Диего: БА, 1978.
- Калифорнийский университет в Сан-Диего: МС, 1979 г.
Позднее трудоустройство
Публикации
- Джоэл МакКормак, Роберт Макнамара. Эффективное и мозаичное прохождение многоугольника с использованием функций полуплоскости краев, чтобы появиться в отчете об исследовании 2000/4, Западная исследовательская лаборатория Compaq, август 2000 г. [Расширенный набор материалов семинара, перечисленных непосредственно ниже]
- Джоэл МакКормак, Роберт Макнамара. Обход мозаичного многоугольника с использованием функций полуплоскости краев, Материалы семинара 2000 EUROGRAPHICS / SIGGRAPH по графическому оборудованию, ACM Press, Нью-Йорк, август 2000 г., стр. 15–21.
- Роберт Макнамара, Джоэл МакКормак, Норман П. Джуппи. Предварительно отфильтрованные сглаженные линии с использованием функций полуплоскостного расстояния, Отчет об исследовании 98/2, Западная исследовательская лаборатория Compaq, август 2000 г. [Расширенный набор материалов семинара, перечисленных непосредственно ниже].
- Роберт Макнамара, Джоэл МакКормак, Норман П. Джуппи. Предварительно отфильтрованные сглаженные линии с использованием полуплоскостных функций расстояния, Труды семинара EUROGRAPHICS / SIGGRAPH 2000 года по графическому оборудованию, ACM Press, Нью-Йорк, август 2000 г., стр. 77–85.
- Джоэл МакКормак, Кейт И. Фаркас, Рональд Перри, Норман П. Джуппи. Simple and Table Feline: Fast Elliptical Lines for Anisotropic Texture Mapping, Research Report 99/1, Compaq Western Research Laboratory, октябрь 1999 г. [Расширенный набор документов SIGGRAPH, перечисленных непосредственно ниже.]
- Джоэл МакКормак, Рональд Перри, Кейт И. Фаркас, Норман П. Джуппи. Feline: Fast Elliptical Line for Anisotropic Texture Mapping, SIGGRAPH 99 Conference Proceedings, ACM Press, New York, август 1999, стр. 243–250.
- Джоэл МакКормак, Роберт Макнамара, Кристофер Джанос, Ларри Сейлер, Норман П. Джуппи, Кен Коррелл, Тодд Даттон, Джон Зуравски. Neon: (Big) (Fast) Single-Chip 3D Workstation Graphics Accelerator, Отчет об исследовании 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. [Признан лучшим докладом / презентацией.]
- Джоэл МакКормак, Роберт Макнамара. A Smart Frame Buffer, Отчет об исследовании 93/1, Digital Equipment Corporation, Western Research Laboratory, январь 1993 г. [Расширенный набор документов USENIX, перечисленных непосредственно ниже.]
- Джоэл МакКормак, Роберт Макнамара. Набросок интеллектуального буфера кадров, Труды Зимней конференции USENIX 1993 г., Ассоциация USENIX, Беркли, январь 1993 г., стр. 169–179.
- Джоэл МакКормак. Написание серверов Fast X для буферов немой цветовой рамки, Отчет об исследовании 91/1, Digital Equipment Corporation, Western Research Laboratory, февраль 1991 г. [Расширенный набор программного обеспечения: документ о практике и опыте, перечисленный непосредственно ниже].
- Джоэл МакКормак. Написание серверов Fast 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 Toolkit: The Complete Programmer's Guide and Specification, X Version 11, Release 4, Digital Press, Maynard, Massachusetts, 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.
- Джоэл МакКормак, Ричард Гливс. Modula-2: достойный преемник Паскаля, BYTE, Byte Publications, Питерборо, Нью-Гэмпшир, Vol. 8, No. 4, апрель 1983 г., стр. 385–395.