OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Пятница, 29 Март, 2024 13:44

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 41 ]  На страницу Пред.  1, 2, 3  След.
Автор Сообщение
 Заголовок сообщения: Re: Виртуальная машина на CP
СообщениеДобавлено: Пятница, 31 Май, 2019 10:11 

Зарегистрирован: Пятница, 11 Январь, 2019 21:33
Сообщения: 88
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-а необходимы для решения задачи? ( Или просто для честного сравнения "в гонке"?)


Последний раз редактировалось vvmtutby Пятница, 31 Май, 2019 13:02, всего редактировалось 1 раз.

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

Зарегистрирован: Вторник, 30 Июнь, 2009 14:58
Сообщения: 1549
Цитата:
Не сравниваем ли мы, в основном, время инициализации runtime?


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

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


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

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


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

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


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

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

Не понял


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

Зарегистрирован: Пятница, 11 Январь, 2019 21:33
Сообщения: 88
(
И, кстати, несколько не очевиден принцип, по которому определяются "участники гонки" среди языков программирования для решения конкретной задачи
)

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-битный тип вещественных чисел значительно ослабил бы данную проблему.


Последний раз редактировалось vvmtutby Пятница, 31 Май, 2019 15:15, всего редактировалось 1 раз.

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

Зарегистрирован: Вторник, 30 Июнь, 2009 14:58
Сообщения: 1549
Цитата:
И, кстати, несколько не очевиден принцип, по которому определяются "участники гонки" среди языков программирования для решения конкретной задачи


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

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


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


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

Зарегистрирован: Пятница, 11 Январь, 2019 21:33
Сообщения: 88
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. Тесты длящиеся меньше, чем у меня уходят на чашку чая Ж-), несколько подозрительны


Последний раз редактировалось vvmtutby Пятница, 31 Май, 2019 16:43, всего редактировалось 10 раз(а).

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

Зарегистрирован: Вторник, 30 Июнь, 2009 14:58
Сообщения: 1549
Зачем? Для Чего? Что происходит вообще?

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


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

Зарегистрирован: Пятница, 11 Январь, 2019 21:33
Сообщения: 88
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. Борис, а вы-то причем к моему последнему сообщению?


Последний раз редактировалось vvmtutby Пятница, 31 Май, 2019 19:04, всего редактировалось 1 раз.

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

Зарегистрирован: Вторник, 30 Июнь, 2009 14:58
Сообщения: 1549
vvmtutby, чувак, отстань от меня. Написал тебе в личку.


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

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

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

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


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

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

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

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

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


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

Зарегистрирован: Понедельник, 28 Ноябрь, 2005 10:28
Сообщения: 1428
Прежде всего, компилятор ББ держит все переменные в памяти. И просто так это не изменить.


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

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


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


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

Зарегистрирован: Понедельник, 28 Ноябрь, 2005 10:28
Сообщения: 1428
А что толку от xmm, если потом все равно в память писать?


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

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


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

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

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

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


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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Виртуальная машина на CP
СообщениеДобавлено: Четверг, 06 Июнь, 2019 08:25 

Зарегистрирован: Понедельник, 28 Ноябрь, 2005 10:28
Сообщения: 1428
ilovb писал(а):
Зачем он вытаскивает из памяти указатели заново спустя три с половиной инструкции?

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Виртуальная машина на CP
СообщениеДобавлено: Четверг, 06 Июнь, 2019 14:38 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
L0, L1, L2 -- это зачем-то нужно?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Виртуальная машина на CP
СообщениеДобавлено: Четверг, 06 Июнь, 2019 14:56 

Зарегистрирован: Вторник, 30 Июнь, 2009 14:58
Сообщения: 1549
Trurl писал(а):
ilovb писал(а):
Зачем он вытаскивает из памяти указатели заново спустя три с половиной инструкции?

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


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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Виртуальная машина на CP
СообщениеДобавлено: Четверг, 06 Июнь, 2019 15:05 

Зарегистрирован: Вторник, 30 Июнь, 2009 14:58
Сообщения: 1549
Info21 писал(а):
L0, L1, L2 -- это зачем-то нужно?


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


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


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 41 ]  На страницу Пред.  1, 2, 3  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2024, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB