> man operating_systems
Мнение: Как я вижу современный процессор
Ответ на статью "Создавая новое поколение - часть 1"
на Четверг, 12 Август 2004, 15:48
добавил: batu (Миша Кузьмин) список авторов печатать элемент контента создать pdf-файл  элемент контента
категория Статьи
комментарии: 10
просмотров: 644

Ответ на статью <a href=http://www.osrc.info/content.php?article.60>"Создавая новое поколение - часть 1"</a><br />
Автор рассматривает создание объектно-ориентированног процессора как реальную необходимость сегодняшнего дня, более того, не только как необходимость, но и как технологию, которую можно реализовать уже сегодня.
<hr>

Естественно, многопроцессорня работа, естественно диспетчер процессоров и памяти. Стековая система команд наиболее подходит к такой архитектуре. Так как алгоритмы распаралеливани выполнения команд проще и проще алгоритмы возможности кэширования. От двухадресных команд как сейчас толку мало. И обязательно апаратная реализация проверки типов (для этого специальное представление данных а не просто байты), и вызов процедур и функций тоже реализация аппаратная. Естественно, тут же работа для диспетчера памяти... В таком виде это будет шикарная молотилка. Кстати, у меня все это расписано. Мне кажется, что это очевидные вещи... А теперь подробнее.

То что многопроцессорне системы нужны - это очевидно. В таком виде как это делается сейчас, это бессмысленно. Распараллеливане работы процессора должно происходить более эффективно и независимо (скрыто от пользователя). Кстати, я против морочить голову программисту потоками. Не хватает ресурсов для решения задачи - покупай более дорогую машину или добавляй процессор. Программистскиеухищрения не приводят к серьезным положительным результатам. Гораздо эффективней должны работать алгоритмы распараллеливаня. Отсюда следует необходимость диспетчера процессоров и, как следствие, диспетчер памяти для распределения памяти между процессорами и процессами. Сборка мусора, кэширование, распределение памяти между задачами и выделение памяти для вызова процедур - вполне решаемая и современная задача для апаратного диспетчера памяти. Тем более, в том или ином виде он уже давно присутствует в современных процессорах.

Еще одна серьезная задача – эффективная диспетчеризация процессоров. Она неразрывно связана с диспетчером памяти, блокировкой выполнения команд, требующих данных, которые изменяются другим процессором, синхронизация и прочие, согласитесь, уже очевидные, но реально выполнимые задачи.. Не надо только их усложнять двухадресными командами... Для этого гораздо лучше подходят стековые команды... Они же, в сочетании с активным кэшированием и многоуровневой памятью, будут работать эффективнее двухадресных.

Еще одна перезревшая задача. Представление данных в компьютере устарело. Тогда как современное программировани давно сориентировано на объектное программировани, проверка типов данных аппаратным способом во время выполнения просто необходима. Возможность проверять данные на типы, ограничения, события и т.п. выпоняемые параллельно с обработкой настолько ускорит выполнение программ, и не просто ускорит выполнение, но и сделает ПО значительно надежнее. Такая проверка все равно делается и требует массу ресурсов. Решение этой задачи аппаратно значительно упростит систему команд, но потребует совершенно новых способов работы процессора, в связи пользовательскии типами и перегрузкой операторов. Создание пользовательски типов, пространств имен, сборка типов в библиотеки потребуют более тесной работы с процессором. Но это вполне решаемая задача. Хотя это и необычно для существующих архитектур.

Здесь же хочется сказать что вытекает из такого подхода для програмистов.

Во-первых, забываем про классы. Это все типы теперь. И определение класса в терминологии .Net - это просто определение типа объекта и ничего больше. Что значительно проще и логичнее.

Второе. Определение коллекций и массивов как классов не есть логично. Гораздо проще иметь такое понятие как организацию данных. А работа с типами данных Object и Integer не должны отличаться ничем. Именно к этому и приходит .Net, только почему-то осторожно. Подробно на этих моментах в данной статье я останавливаться не буду. Это отдельная и непростая тема. Могу сказать только, что получается гораздо проще и логичнее чем в .Net. А работу с организоваными данными можно тоже переложить на процессор. Могу только сказать, к организации данных относятся не только массивы и коллекции, но и стеки, списки, кольца и деревья.

Перекладывание работы с типами данных на процессор возлагает еще одну естественную задачу на процессор. Обеспечение работы со свойствами, методами и событиями. При таком подходе события, свойства и методы могут иметь любые данные, даже Integer (заметим, что добавил еще такое понятие как ограничение. Что это такое не буду останавливаться здесь, только замечу, что перечислимые типы и данные можно определять как данные с ограничением на принимаемые значения. Хотя общая формулировка ограничений гораздо шире). Необходима стандартизация работы. Методы, свойства, события и ограничения в терминологии .Net необходимо объединить в слово "" типа метод, свойство, событие и ограничение. Все это реально. И получается очень удобная объектно-ориентированная реально многопроцессорня машина.

Понятно что такой подход требует известной свободы мышления. Но в итоге получается гораздо логичнее, проще и надежнее в работе. Конечно, это принципиальные изменения архитектуры когда нет данных как просто байтов. А есть только данные с типами... А потоки, конвейеры и прочее - это подходы уже 30 летней давности. Пора идти дальше.

Миша Кузьмин aka batu.

Комментарии
Dron |13.08.2004 12:44
Комментарии: 558


Непонял насчет контроля типов...
та в одном месте говоришь что контроль типов надо встроить в проц, в другом месте говоришь что любое нечто должно быть объектом...

Кстати при чисто объектном подходе проблема контроля типов исчезает сама собой.

И еще мне кажется ты слишком много хочешь возложить на процессор... я наверное больше склоняюсь к тому - что чем проще процессор - тем лучше.

Выкиньте MMX и иже с ними, выкиньте двухадресные команды! даешь стековые машины!

но дайте мне заместо 2 ГГц - 20! я все что нужно сэмулирую сам! Ж))

batu |13.08.2004 14:11
Комментарии: 10

Зарегистрирован: 03.07.2004 22:20

Проверку типов необходимо опустить на процессор по следующим причинам. Во первых тогда уменьшится количество команд процессора. Их выполнение будет зависить от типов данных. Это приведет не только к упрощению транслятора но и к значительному уменьшению кода. Так как эти проверки необходимо включить в код да и все мыслимые варианты тоже. Во вторых эти проверки в процессоре можно распаралелить что весьма благотворно отразится на производительности. И в третьих это дает новые возможности для объектного программирования когда определение типов и их проверку можно опустить на этап выполнения. Технология .Net вовсю этим пользуется.. Но какой ценой.
Про двухадресные команды вообще проще поднять литературу 30 летней давности. Когда были и стековые и трехадресные команды. Там есть и обоснования эффективности 2-х адресных команд. Все их преимущества проявлялись при отсутствии кэш памяти. Я ничего против не имею 2-х адресных команд, но стековые команды проще, занимают меньше памяти так как нет необходимости во втором адресе операнда. Но и это не главное. В стековой машине проще реализовать алгоритмы диспетчеризации процессоров и памяти.
Сэмулировать можно, конечно все.. Но тем то и приятна апаратная реализация что может реализовать распаралеливание. Объективный факт на анализ типов и прочего.. и не только типов.. я там хорошо нагрузил уходит много ресурсов.

Dron |13.08.2004 15:13
Комментарии: 558


По поводу типов вопрос вообще спорный...

Меня например коробит от того что слишком много типов развелось... Я вот щас думаю одну мысль... и думаю, а не сделать ли хитрый числовой тип, который адаптивно будет подстраиваться под значения и под текущие возможности проца... и тогда станет пофиг, флоат он или инт!

естественно все это должно быть с максимальным сохранением точности. если это инт - то он должен быть 100% точным при любом, даже самом немеряном значении...
ну это так, мысль... возвращаясь к теме...

речь то идет о процессорах будующего...
Так ли там будут нужны цифры вообще, а тем более ограниченные какими-то 32 или 64 битами? ну пусть даже 128 битами? вырастут частоты, вырастут размерности. вырастут объемы...

что вообще есть тип?
smalltalk например вообще прекрасно обходится без типизации и без предопределенных типов. (правда не до конца понимаю как.

Если речь идет об объектности - то тут надо проверять только валидность объекта, соответствие его тому или иному интерфейсу. (не буду говорить классу, давить!)

Тогда всякие различия между float/int/char стираются вообще.

Может с этим делом в форум?

batu |15.08.2004 07:23
Комментарии: 10

Зарегистрирован: 03.07.2004 22:20

давай в форум.

imsushka |19.08.2004 03:19
Комментарии: 2

Зарегистрирован: 19.08.2004 02:34

А по мне так лучше 2х-адресные команды
и РОН один килобайт
и как в Z8000 что б групировались в 16бит, 32, 64, 128 и 256
и в одном корпусе 4 ядра
и еще еще еще
>>Кстати, у меня все это расписано
не у меня не расписано, но согу и расписать

imsushka |19.08.2004 03:23
Комментарии: 2

Зарегистрирован: 19.08.2004 02:34

да и кстати 3х адресные команды используются во многих RISC процах (Spark, Itanium, ...)

batu |08.09.2004 10:08
Комментарии: 10

Зарегистрирован: 03.07.2004 22:20

2-х и 3-х адресные команды нагляднее, и выглядят естественней, но причина их популярности не в этом. Они эффективней работают в системах без кэш памяти. Разные показатели эффективности на разных тестовых наборах. Напомню, что во времена создания сегодня популярных машин кэш память была слишком дорогая для практического применения.
Современные технологии предполагают и кэш-память и многопроцессорную обработку. По моему очевидно для того что бы распределять команды по процессорам необходимо анализировать адреса операндов. И в стековых архитектурах алгоритмы для такого анализа гораздо проще так как операнд всего один. Я противник писать программы на ассемблерах, наглядность не есть полезное свойство для процессора. Но стековые команды меньше по размеру и легче в создании кода (облегчается трансляция) и эффективней в выполнении с кэш-памятью. Это уже реальные плюсы.

Dron |08.09.2004 11:45
Комментарии: 558


А за счет этого облегчается и сам процессор, следовательно в него можно запихнуть больше кеша, или еще CPU при тех же габаритах...
Я за!!!

batu |09.09.2004 03:43
Комментарии: 10

Зарегистрирован: 03.07.2004 22:20

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

captain cobalt |14.10.2005 01:48
Комментарии: 83

Зарегистрирован: 04.07.2004 21:44

Судя по первому комментарию, год назад Dron был готов всё эмулировать программно на быстром но тупом процессоре.

Что же случилось сейчас, когда мы довольно подробно познакомились с ОС, архитектура которой позволяет делать это эффективно???



Комментарии доступны только авторизованным пользователям, авторизуйтесь или зарегистрируйтесь на сайте здесь

© OSRC.info, 2004-2010.
Авторские права на любые материалы, авторы которых явно указаны, принадлежат их авторам. По вопросам публикации таких материалов обращайтесь к авторам.
Авторские права на любые другие материалы принадлежат OSRC.info.
Сайт является помещением библиотеки. Копирование, сохранение на жестком диске или иной способ сохранения произведений осуществляются пользователями на свой риск.
При использовании материалов сайта ссылка на OSRC.info обязательна.