(Untitled)

Nov 11, 2007 07:37

Какая прелесть. ARM тихой сапой добавил явовские байткоды в качестве еще одной ISA. (у них уже и так было две) Поскольку ARM просто везде, можно с уверенностью говорить, что никакой Явовской виртуальной машины вне пределов совсем "взрослых" писюков и рабочих станций уже нет - нелепая архитектура явовской машины канонизорована "в железе"! Фу ( Read more... )

Leave a comment

potan November 11 2007, 17:26:59 UTC
Виртовцы сжимали AST Оберона. На мой взгляд - фигня вышла.
JITу сложные адресации не нужны. Он переводит стековый код в нормальный трехадресный, а потом его компилирует.
Аппаратная Java хороша для систем с маленькой памятью. Каковыми являются все встраиваемые системы :-).

Reply

muchandr November 29 2008, 07:57:31 UTC
Преимущества по скорости доступа последовательных данных - тоже артефакт архитектуры DRAM. В самом упрощенном виде, ты сначала долго и муторно инициализируешь, какой тебе нужен ряд. Потом колонку. На самом деле в последнее время все еще гораздо мутнее, но общая идея такова - крохотные кондеры в традиционном DRAM быстрее практически не становятся. Посему мы стараемся кучу похожих трансакций аггрегировать, а потом ту часть, которая у них общая, делать зараз. Скажем элементарный SRAM такими свойствами не обладает, ему совсем не обязателен хитрожопый контроллер. Пиши себе, куда хочешь.

Reply

9000 November 29 2008, 08:07:03 UTC
Пусть у нас есть сколько угодно произвольно адресуемых бит, задержка адресации+чтения каждого фиксированная и независимая.

Сценарий 1: Мы читаем N независимых бит. Чтобы это проделать, нам надо загнать N независимых адресов в контроллер памяти.

Сценарий 2: Мы читаем N бит, адреса которых получаются из одного числа применением какой-то простой функции (например, "прибавить номер бита"). Теперь в контроллер памяти надо загнать только одно число + сослаться на функцию (если она не имплицитна).

Мне кажется, что сценарий 1 требует больше времени, чем 2. Где я неправ?

Reply

muchandr November 29 2008, 08:18:59 UTC
Прав. А что тебе мешает писать свои битстринги произвольной длины в память последовательно? Пиши на здоровье.

Reply

9000 November 29 2008, 09:17:25 UTC
Со стрингами длиной сильно больше N всё просто. Жаба начинает душить при данных длиной сильно меньше N: хочется загрузить их в один такт побольше и устроить MMX ;) Но это, наверное, ошибка мышления: тут компилятор должен распараллелить доступ нескольких команд или ниток.

Reply

muchandr December 1 2008, 13:09:44 UTC
Точно ошибка мышления :)

С чего ты взял, что у адреса должна быть фиксированная длина N? Он тоже может быть переменным. У тебе нету больше никакой параллельной шины длиной N, а есть N совершенно независимых серийных интерфейсов. Сколько-то из них не нужны - не пользуйся. Именно поэтому серийные интерфейсы типа PCI-e так сильно пошустрели - синхронизировать сигнал в уйме параллельных проводов больше не надо, для каждого бита свой собтвенный умный контроллер.

В контексте памяти это дело пионировал Rambus. Сначала сделай грамотную передачу одного бита с однобитным оффсетом, а потом мультиплексай себе на здоровье, сколько надо. Таким образом, число N зашито не на уровне архитектуры, а лишь ее какой-то конкретной имплементации.

Reply

9000 December 1 2008, 21:18:45 UTC
Пожалуй.
Хотя тут возникает проблема синхронизации всё равно: для многобитного значения мне надо дождаться прибытия всех бит. Но это нетрудно, и это не большая плата за произвольность числа бит. Для всяких потоковых алгоритмов, типа аудио, видео и крипто, это прямой бонус.

Reply

muchandr December 2 2008, 08:36:42 UTC
Синхронизировать гораздо легче в логике, чем в толпе проводов.

Reply

muchandr November 14 2007, 15:50:49 UTC
Потом тот факт, что в самом языке нет НИЧЕГО, был сознательным идеологическим выбором для С. Как оказалось, правильным. Именно отсустствие необходимости таскать за собой огромную стандартную библиотеку позволило языку пролезть везде.

Reply

muchandr November 13 2007, 22:16:15 UTC
И как JIT этого добивается? Правильно, сначала из байткодов восстанавливается AST :)

Что значит "нормальный трехадресный"? Это нормально при наличии 32-битного опкода, примерно 32 регистров общего назначения и сравнительно медленной памяти. Кстати, вторая ISA ARM, Thumb, 16-битная двухадресная и добавлена именно ради возможности получения более компактного кода на встраемывых системах, хотя в целом ARM 32-битная архитектура.

Зачем добавили аппаратную Явы СЕЙЧАС, очевидно. Технически грамотнее было бы ехать с обратной стороны - придумать стандартное встроенное железо. (Коим сейчас де-факто является как раз АRМ)

Reply

potan November 14 2007, 09:32:26 UTC
JIT компилятор как бы исполняет код, помещая в стек номера регистров вместо данных. Соотвественно операции над верхушкой стека порождают команду трехадресной машины с неограниченным количеством регистров (трехадресный код) и в стек записывается номер свободного регистра. А потом решается классическая компиляторская задача распределения регистров, что бы отмапить виртуальную трехадресную машину в реальную.

Reply

muchandr November 14 2007, 12:30:55 UTC
так от собственно стэка это тебя не избавляет никак, поскольку требуются "операции над верхушкой"? Ты это реально видел, чтобы все так просто работало или импровизируешь? Кстати окраска регистров пиздец как вычислительно дорого.

Reply

potan November 14 2007, 15:27:49 UTC
Я видел реальные компиляторы - заглядывал в исходники gcc. Реализацию JIT не смотрел, но что-то про нее читал.
"Операции на стеке" выполняются на этапе компиляции - потом стек для вычислений не нужен.
Компиляция дорога, но выполняется только один раз. В этом то и прелесть JIT.

Reply

muchandr November 14 2007, 15:41:35 UTC
Ну ОК. А какие в этом подходе преимущества по сравнению с декомпиляцией в AST?

Reply

potan November 18 2007, 17:31:40 UTC
IMHO, он проще.
Более того, все декомпиляторы (не Java), которые я видел, бинарный код сначала переводили в трехадресный, а потом после упрощающих преобразований, транслировали в язык высокого уровня.

Reply


Leave a comment

Up