OberonCore
https://forum.oberoncore.ru/

Виртуальная машина на CP
https://forum.oberoncore.ru/viewtopic.php?f=29&t=6400
Страница 2 из 3

Автор:  vvmtutby [ Пятница, 31 Май, 2019 10:11 ]
Заголовок сообщения:  Re: Виртуальная машина на CP

ilovb писал(а):
. . . в эти 1.6 секунды входит даже компиляция на лету. Что тут сравнивать можно?
Не сравниваем ли мы, в основном, время инициализации runtime?

Какие цифры при:
Код:
while x <= 10000000000000000 do

? ( И, заодно, что с "длинной арифметикой"?)

Насколько ухудшается точность при
Код:
y = 0.1

?

P.S.

А всё-таки интересны результаты и Modula-3 с LLVM ( или Intel C++) backend-ами …

P.P.S.
ilovb писал(а):
Мне кажется это как-то связано с 32 битностью ББ. Скорее всего имеют место какие-то накладные расходы при выполнении на 64 разрядном процессоре и ОС.

Т.е. прикладная задача ( ВМ под скриптовый DSL для определенных нужд) допускает 64bit?

32bit-а необходимы для решения задачи? ( Или просто для честного сравнения "в гонке"?)

Автор:  ilovb [ Пятница, 31 Май, 2019 12:38 ]
Заголовок сообщения:  Re: Виртуальная машина на CP

Цитата:
Не сравниваем ли мы, в основном, время инициализации runtime?


Нет. На загрузку/компиляцию Java тратит максимум 100мс

Цитата:
Какие цифры при


Ради чего это проверять?
Длинная арифметика есть вообще только у Java среди все подопытных.

Цитата:
Насколько ухудшается точность при


Это к чему вообще? Вроде по коду видно что double/real используется

Цитата:
А всё-таки интересны результаты и Modula-3 с LLVM ( или Intel C++) backend-ами …


Ну замерьте. У меня ее нет и ставить не хочу. Тем более что я сомневаюсь что оно будет быстрее Go и Java.

Цитата:
Т.е. прикладная задача ( ВМ под скриптовый DSL для определенных нужд) допускает 64bit?

Не понял

Автор:  vvmtutby [ Пятница, 31 Май, 2019 12:56 ]
Заголовок сообщения:  Re: Виртуальная машина на CP

(
И, кстати, несколько не очевиден принцип, по которому определяются "участники гонки" среди языков программирования для решения конкретной задачи
)

ilovb писал(а):
Цитата:
Цитата:
Насколько ухудшается точность при

Это к чему вообще? Вроде по коду видно что double/real используется


См.:
Заголовок: Сравнение вещественных чисел
igor писал(а):
На выходных я изложил своему сыну основные тезисы по данной теме. Тот внимательно выслушал мою тираду, немного поразмыслил, затем минут пять "потискал клаву" и выдал такой код :) :
Код:
PROCEDURE Do*;
VAR a: SHORTREAL; b: REAL;
BEGIN
   Log.Ln;
   a := 0.1;
   b := a * 1000000;  (* b = 100000 *)
   b := b - 99999;  (* b = 1 *)
   b := b * 1000000;  (* b = 1000000 *)
   b := b - 999999;  (*b = 1*)
   Log.Real(b);
   Log.Ln;
END Do;

Вместо результата 1 эта коротенькая программа выдаёт результат 1491.116119384766
. . .

Но поражает не это. А то, что погрешность набежала всего за четыре элементарных действия несмотря на то, что операнды в этом примере имеют вполне обычный (в инженерной практике) размер. Скажем, 1000000 может иметь смысл 1МОм или 1 МГц. То есть такие вычисления могут быть сплошь и рядом.

. . .

Тип REAL хоть и не решает проблему в корне, но значительно скрашивает её. Но думаю, что в некоторых задачах не достаточно хорошо скрашивает. Хочу заметить, что диапазон инженерных величин практически не растёт вслед за научно-техническим прогрессом. Поэтому можно надеяться, что 128-битный тип вещественных чисел значительно ослабил бы данную проблему.

Автор:  ilovb [ Пятница, 31 Май, 2019 14:14 ]
Заголовок сообщения:  Re: Виртуальная машина на CP

Цитата:
И, кстати, несколько не очевиден принцип, по которому определяются "участники гонки" среди языков программирования для решения конкретной задачи


Те что под рукой, и которые я готов использовать, так как могу на них писать не тормозя особо.

Цитата:
См.:
Заголовок: Сравнение вещественных чисел


double я выбрал вполне сознательно.

Автор:  vvmtutby [ Пятница, 31 Май, 2019 15:33 ]
Заголовок сообщения:  Re: Виртуальная машина на CP

ilovb писал(а):
double я выбрал вполне сознательно.

Предлагаю сравнивать до какого числа "досчитает" "скриптовый DSL" за 15 минут:
Код:
x = 450359962737049.6
y = 0.1
while x <= 900719925474099.2 do
   x = x + y
end
ASSERT( x > 900719925474099.1 and x < 900719925474099.35 )


P.S. Тесты длящиеся меньше, чем у меня уходят на чашку чая Ж-), несколько подозрительны

Автор:  ilovb [ Пятница, 31 Май, 2019 15:41 ]
Заголовок сообщения:  Re: Виртуальная машина на CP

Зачем? Для Чего? Что происходит вообще?

Я не понимаю что мне пишут. Кофе перепил наверно

Автор:  vvmtutby [ Пятница, 31 Май, 2019 17:40 ]
Заголовок сообщения:  Re: Виртуальная машина на CP

Kemet писал(а):
А что будет, если CASE заменить на IF ELSIF?


Не "скриптовый DSL", но LP ( фрагмент, оформление в стиле Modula-2 ):

Код:
   FOR I:= 1 TO M+1 DO BEGIN
      FOR J:= N + 1 TO P DO BEGIN
         A[ I, J]:=0;
      END{ FOR};
   END{ FOR};
   NDop := N+1; NAlt:= N+Dop+1; NBS := 1;
   FOR I:=1 TO M DO BEGIN
      CASE Dir[ I]
         OF -1: BEGIN { Меньше и равно }
           A[ I, NDop]:= 1;
            BS[ NBS]:= NDop;INC( NBS);
           INC( NDop);
         END;
        {OF} 0: BEGIN { Равно }
           A[ I, NAlt]:= 1;
            BS[ NBS]:=NAlt;INC( NBS);
           INC( NAlt);
         END;
        {OF} 1: BEGIN { Больше и равно }
           A[ I, NDop]:=-1; INC( NDop);
           A[ I, NAlt]:= 1;
            BS[ NBS]:=NAlt; INC( NBS);
           INC( NAlt);
         END;
      END;
   END{ FOR};


Показательно для сравнения скоростных характеристик?
( В этом топике -- только уточняю похожи ли будут симптомы проблемы)

P.S. Борис, а вы-то причем к моему последнему сообщению?

Автор:  ilovb [ Пятница, 31 Май, 2019 18:32 ]
Заголовок сообщения:  Re: Виртуальная машина на CP

vvmtutby, чувак, отстань от меня. Написал тебе в личку.

Автор:  ilovb [ Среда, 05 Июнь, 2019 15:10 ]
Заголовок сообщения:  Re: Виртуальная машина на CP

Оставлю тут информацию, возможно кому-то пригодится. Если я правильно понял, то разница таки в SSE.
И дело не в векторных операциях, а в количестве используемых регистров.
Другими словами компилятор BB в данном случае выдает более медленный код не потому что он не оптимизирующий,
а потому что не использует доступные ресурсы ЦП (XMM регистры) и делает слишком много обменов с памятью (кэшем).

Это гипотеза, но мне мерещится что BB можно ускорить на типовых числодробильных задачах примерно в 2 раза если научить его использовать xmm регистры. Еще можно ускорить переходом на 64 бита (там еще больше регистров, но по сравнению с 32+xmm эффекта много не будет)

ps Могу ошибаться.

Автор:  Иван Денисов [ Среда, 05 Июнь, 2019 15:40 ]
Заголовок сообщения:  Re: Виртуальная машина на CP

ilovb писал(а):
Оставлю тут информацию, возможно кому-то пригодится. Если я правильно понял, то разница таки в SSE.
И дело не в векторных операциях, а в количестве используемых регистров.
Другими словами компилятор BB в данном случае выдает более медленный код не потому что он не оптимизирующий,
а потому что не использует доступные ресурсы ЦП (XMM регистры) и делает слишком много обменов с памятью (кэшем).

Это гипотеза, но мне мерещится что BB можно ускорить на типовых числодробильных задачах примерно в 2 раза если научить его использовать xmm регистры. Еще можно ускорить переходом на 64 бита (там еще больше регистров, но по сравнению с 32+xmm эффекта много не будет)

ps Могу ошибаться.

А из ББ можно вызывать эти инструкции в кодовых процедурах? Я где-то уже задавал вопрос такой. Но вот никто так и не ответил. SSE XMM можно вызывать сейчас напрямую из ББ в 32-битных программах или они недоступны?

Автор:  Trurl [ Среда, 05 Июнь, 2019 18:30 ]
Заголовок сообщения:  Re: Виртуальная машина на CP

Прежде всего, компилятор ББ держит все переменные в памяти. И просто так это не изменить.

Автор:  ilovb [ Среда, 05 Июнь, 2019 19:10 ]
Заголовок сообщения:  Re: Виртуальная машина на CP

Иван Денисов писал(а):
А из ББ можно вызывать эти инструкции в кодовых процедурах? Я где-то уже задавал вопрос такой. Но вот никто так и не ответил. SSE XMM можно вызывать сейчас напрямую из ББ в 32-битных программах или они недоступны?


Ну ты можешь любой машинный код на ББ вызвать, но это ничего не даст, кроме ускорения какой-то конкретной операции.
Важнее чтоб компилятор использовал XMM (но тут еще трабл в том, что это требует и новых машинных команд)

Автор:  Trurl [ Среда, 05 Июнь, 2019 21:27 ]
Заголовок сообщения:  Re: Виртуальная машина на CP

А что толку от xmm, если потом все равно в память писать?

Автор:  ilovb [ Среда, 05 Июнь, 2019 23:14 ]
Заголовок сообщения:  Re: Виртуальная машина на CP

Ну вот я уже давал скриншот.
Что тут делает BB:
1. Дергает из памяти указатель v1
2. Дергает из памяти значение типа
3. Сравнивает тип
4. Все три пункта для v2
5. Опять дергает из памяти указатель v1
6. Опять дергает из памяти указатель v2
7. ...
Зачем он вытаскивает из памяти указатели заново спустя три с половиной инструкции?
Потому что как я понимаю не хватает регистров. Все манипуляции как видно через EAX и EDX. Дополнительные регистры позволили бы просто не ходить в память второй раз.
А поход туда не дешевый думается, даже с учетом того, что тут скорее всего из кэша берется.
Изображение

Автор:  Пётр Кушнир [ Среда, 05 Июнь, 2019 23:19 ]
Заголовок сообщения:  Re: Виртуальная машина на CP

ilovb писал(а):
Если я правильно понял, то разница таки в SSE.
И дело не в векторных операциях, а в количестве используемых регистров.
Другими словами компилятор BB в данном случае выдает более медленный код не потому что он не оптимизирующий,
а потому что не использует доступные ресурсы ЦП (XMM регистры) и делает слишком много обменов с памятью (кэшем).
Воспоследуют ли извинения от всех подряд по поводу собственных ошибочных, но истероидно-разоблачительных выкриков по поводу качества ББ-компилятора или как всегда?

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

P.S. Охохох, сколько ещё будет таких прозревашек у всякой ойти-плесени... Через сто лет может про троичный комп заговорят хорошо и не через губу.

Автор:  ilovb [ Среда, 05 Июнь, 2019 23:24 ]
Заголовок сообщения:  Re: Виртуальная машина на CP

Не совсем понял о чем ты, но я вывод для себя сделал такой: Оптимизирующий компилятор по большому счету нафиг не нужен, если задача не совсем экстремальная. Кажется что достаточно просто использовать возможности Pentium III и выше чтобы иметь вполне сносную скорость машинного кода.

Автор:  Trurl [ Четверг, 06 Июнь, 2019 08:25 ]
Заголовок сообщения:  Re: Виртуальная машина на CP

ilovb писал(а):
Зачем он вытаскивает из памяти указатели заново спустя три с половиной инструкции?

Потому, что обращается к переменной. Невытакскивание - это уже оптимизация.

Автор:  Info21 [ Четверг, 06 Июнь, 2019 14:38 ]
Заголовок сообщения:  Re: Виртуальная машина на CP

L0, L1, L2 -- это зачем-то нужно?

Автор:  ilovb [ Четверг, 06 Июнь, 2019 14:56 ]
Заголовок сообщения:  Re: Виртуальная машина на CP

Trurl писал(а):
ilovb писал(а):
Зачем он вытаскивает из памяти указатели заново спустя три с половиной инструкции?

Потому, что обращается к переменной. Невытакскивание - это уже оптимизация.


Ну ok, пусть оптимизация. Тогда это единственная оптимизация которая нужна помимо свертки констант.

Автор:  ilovb [ Четверг, 06 Июнь, 2019 15:05 ]
Заголовок сообщения:  Re: Виртуальная машина на CP

Info21 писал(а):
L0, L1, L2 -- это зачем-то нужно?


Гипотетически первый уровень кэша должен быть равен по скорости регистру.
Но что лежит в первом кэше в конкретном случае известно только духу машины.


ps Ну и в целом я совсем не уверен в своей гипотезе. Нужно как-то корректно эксперимент поставить. Типа попробовать запретить SSE на сишке при компиляции и смотреть что будет. Но я слишком тупой чтоб что-то достоверно тут проверить.

Страница 2 из 3 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/