OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Четверг, 28 Март, 2024 11:52

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




Начать новую тему Ответить на тему  [ Сообщений: 46 ]  На страницу Пред.  1, 2, 3  След.
Автор Сообщение
 Заголовок сообщения: Re: Эффективность WITH
СообщениеДобавлено: Вторник, 18 Март, 2008 00:17 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
Евгений Темиргалеев писал(а):
В C++ уже можно определять значения константных статических членов внутри класса? Эх, отстал я от жизни :) Раньше это делали при помощи enum.


Можно, но только для integral types.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Эффективность WITH
СообщениеДобавлено: Вторник, 09 Сентябрь, 2008 11:35 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 18:55
Сообщения: 2272
Откуда: Россия, Нижний Новгород
Поскольку на работе программирую на C# и использую "обероновский механизм сообщений", то сейчас измерил скорость выполнения цепочки if (msg is Message1) {} else if (msg is Message2) else if ... получилось около 18 тактов на одно сравнение (процессор: AMD Athlon 64 X2 Dual).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Эффективность WITH
СообщениеДобавлено: Вторник, 09 Сентябрь, 2008 15:10 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
Сергей Губанов писал(а):
Поскольку на работе программирую на C# и использую "обероновский механизм сообщений", то сейчас измерил скорость выполнения цепочки if (msg is Message1) {} else if (msg is Message2) else if ... получилось около 18 тактов на одно сравнение (процессор: AMD Athlon 64 X2 Dual).


Кому-то это о чем-то говорит? :) Вы приведите для BB циферки...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Эффективность WITH
СообщениеДобавлено: Вторник, 09 Сентябрь, 2008 15:58 

Зарегистрирован: Четверг, 12 Июль, 2007 23:18
Сообщения: 1982
Откуда: Узбекистан, Чирчик
Сергей Губанов писал(а):
Поскольку на работе программирую на C#
Скажите, а Вы рассматривали возможность использования языка Zonnon? И если рассматривали, то почему отказались от этой идеи?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Эффективность WITH
СообщениеДобавлено: Вторник, 09 Сентябрь, 2008 17:50 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 18:55
Сообщения: 2272
Откуда: Россия, Нижний Новгород
Vlad писал(а):
Сергей Губанов писал(а):
на C# ... получилось около 18 тактов на одно сравнение...

Вы приведите для BB циферки...

В Блэкбоксе аналогичное выяснение типа -- около трёх тактов.

Geniepro писал(а):
Сергей Губанов писал(а):
Поскольку на работе программирую на C#
Скажите, а Вы рассматривали возможность использования языка Zonnon? И если рассматривали, то почему отказались от этой идеи?

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Эффективность WITH
СообщениеДобавлено: Вторник, 09 Сентябрь, 2008 18:08 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 18:55
Сообщения: 2272
Откуда: Россия, Нижний Новгород
Поправочка, в C# выяснение типа в if (msg is Message1) занимает не 18, а 15-16 тактов.

Раньше оно у меня "внутри функции" было, а я был на 100% уверен, что "умный компилятор" её заинлайнит. А вот не заинлайнил. Пришлось инлайнить вручную, скорость выросла.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Эффективность WITH
СообщениеДобавлено: Четверг, 11 Сентябрь, 2008 10:30 

Зарегистрирован: Вторник, 25 Апрель, 2006 16:21
Сообщения: 2180
Откуда: Нижний Новгород
Сергей Губанов писал(а):
Поправочка, в C# выяснение типа в if (msg is Message1) занимает не 18, а 15-16 тактов.

Раньше оно у меня "внутри функции" было, а я был на 100% уверен, что "умный компилятор" её заинлайнит. А вот не заинлайнил. Пришлось инлайнить вручную, скорость выросла.


А какова методика измерения числа тактов на операцию?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Эффективность WITH
СообщениеДобавлено: Четверг, 11 Сентябрь, 2008 11:21 

Зарегистрирован: Четверг, 12 Июль, 2007 23:18
Сообщения: 1982
Откуда: Узбекистан, Чирчик
Сергей Губанов писал(а):
Так ведь компилятор Zonnon до сих пор до конца не доделанный. Вообще, года три назад у меня ещё был энтузиазм, что дескать вот-вот уже скоро напишут компилятор и можно будет на него полностью переходить. Сейчас такого энтузиазма ровно ноль - раз за столько лет не смогли написать компилятор, значит это точно не язык, а монстр.

А на GPCP http://plas.fit.qut.edu.au/gpcp/ не смотрели? Казалось бы, для оберонщика под дотнетом самое то?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Эффективность WITH
СообщениеДобавлено: Четверг, 11 Сентябрь, 2008 15:31 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
Geniepro писал(а):
А на GPCP http://plas.fit.qut.edu.au/gpcp/ не смотрели? Казалось бы, для оберонщика под дотнетом самое то?


У меня есть подозрение, что все, что под .NET, делает сабжевые проверки абсолютно одинаково... Либо надо реализовывать свою объектную модель, отказываясь от главного достоинства .NET - все со всем.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Эффективность WITH
СообщениеДобавлено: Четверг, 11 Сентябрь, 2008 17:35 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
Сергей Губанов писал(а):
В Блэкбоксе аналогичное выяснение типа -- около трёх тактов.


Извиняюсь за дотошность, но около или три? :) Потому что в том асмовском коде, который у меня сгенерировался для аналога на C++ (и который работает не медленнее ББ) присутствуют несколько косвенных операций с памятью.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Эффективность WITH
СообщениеДобавлено: Четверг, 11 Сентябрь, 2008 17:53 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
Вы разбираетесь в асмовском коде.
Vlad писал(а):
Потому что в том асмовском коде...
ББ доступен для скачивания. Сделайте WITH конструкцию, декодируйте и удовлетворите свою дотошность сами, Вам это по силам. Избавьте форум от улыбчивых поддёвок в адрес ББ
Vlad писал(а):
около или три? :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Эффективность WITH
СообщениеДобавлено: Четверг, 11 Сентябрь, 2008 23:45 

Зарегистрирован: Вторник, 29 Ноябрь, 2005 21:41
Сообщения: 1030
Сергей Губанов писал(а):
Сейчас такого энтузиазма ровно ноль
Что изменилось в связи с этим?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Эффективность WITH
СообщениеДобавлено: Пятница, 12 Сентябрь, 2008 10:18 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 18:55
Сообщения: 2272
Откуда: Россия, Нижний Новгород
Vlad писал(а):
Извиняюсь за дотошность, но около или три?

В среднем dt = 2.80 тактов.

Вот код:
Код:
MODULE TestTypeTest;

   IMPORT Log, Services;

   CONST
      CONST N = 1000000000;

   TYPE
      T = ABSTRACT RECORD END;
      
      T01 = RECORD (T) END;
      T02 = RECORD (T) END;
      ...
      T49 = RECORD (T) END;
      T50 = RECORD (T) END;

   PROCEDURE Test (VAR msg: T);
      VAR i: INTEGER;
      t0, t1: LONGINT;
      cycles: REAL;
   BEGIN
      t0 := Services.Ticks();
      FOR i := 1 TO N DO
         IF msg IS T01 THEN
         ELSIF msg IS T02 THEN
         ...
         ELSIF msg IS T49 THEN
         ELSIF msg IS T50 THEN
         ELSE
         END
      END;
      t1 := Services.Ticks();
      cycles := 2.21 * 1000000 * (t1 - t0) / (50*N);
      Log.String("dt = "); Log.Real(cycles); Log.String(" cycles"); Log.Ln
   END Test;

   PROCEDURE Do*;
      VAR msg: T50;
   BEGIN Test(msg);
   END Do;

END TestTypeTest.

коэффициент 2.21 - это для пересчёта наносекунд в такты процессора (частота моего процессора 2.21 ГГц).


Вложения:
TypeTest.odc [4.55 КБ]
Скачиваний: 781
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Эффективность WITH
СообщениеДобавлено: Пятница, 12 Сентябрь, 2008 10:32 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 18:55
Сообщения: 2272
Откуда: Россия, Нижний Новгород
Geniepro писал(а):
А на GPCP http://plas.fit.qut.edu.au/gpcp/ не смотрели? Казалось бы, для оберонщика под дотнетом самое то?

Оберон (или Компонентный Паскаль) невозможно отобразить на платформу .Net без значительной потери производительности. Это конечно не означает, что платформа .Net совсем плохая, у неё есть своя ниша, в которой её использование может быть оправданным.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Эффективность WITH
СообщениеДобавлено: Пятница, 12 Сентябрь, 2008 10:53 

Зарегистрирован: Четверг, 12 Июль, 2007 23:18
Сообщения: 1982
Откуда: Узбекистан, Чирчик
Сергей Губанов писал(а):
Оберон (или Компонентный Паскаль) невозможно отобразить на платформу .Net без значительной потери производительности. Это конечно не означает, что платформа .Net совсем плохая, у неё есть своя ниша, в которой её использование может быть оправданным.

так речь не о том, насколько медленнее/быстрее .NET или тот же Блэкбокс и у кого какая ниша (понятно, что ниша .NET'а достаточно широка, что бы даже адвокат Оберона был вынужден работать в ней), а о том, почему бы уж тогда не использовать лучшее из худшего (если, конечно. Компонентный Паскаль действительно лучше СиШарпа)?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Эффективность WITH
СообщениеДобавлено: Пятница, 12 Сентябрь, 2008 13:29 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 18:55
Сообщения: 2272
Откуда: Россия, Нижний Новгород
Geniepro писал(а):
почему бы уж тогда не использовать лучшее из худшего?

Программировать под платформу .Net имеет смысл только на её каноническом языке программирования, который отображается 1:1 в промежуточный язык MSIL. Рантайм система языка Оберон (или Компонентный Паскаль) не укладывается в узкие рамки рантайм системы языка MSIL. На них программировать под дотнетом смысла нет.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Эффективность WITH
СообщениеДобавлено: Пятница, 12 Сентябрь, 2008 16:15 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
Сергей Губанов писал(а):
Рантайм система языка Оберон (или Компонентный Паскаль) не укладывается в узкие рамки рантайм системы языка MSIL. На них программировать под дотнетом смысла нет.


Вот, например, богатый на всякие выкрутасы C++ под .NET работает очень даже неплохо (каждый день вижу). И с производительностью проблем пока не всплывало. Так что ж там такого узкого для простых и непритязательных оберонов? Не такая быстрая проверка типа? Так разница даже не на порядок...

P.S. Я согласен с тем, что под .NET в идеале лучше писать на самом родном для него языке, которые отражается 1:1. Но это в идеале. Практика полна компромиссов...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Эффективность WITH
СообщениеДобавлено: Пятница, 12 Сентябрь, 2008 16:45 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 18:55
Сообщения: 2272
Откуда: Россия, Нижний Новгород
Vlad писал(а):
Вот, например, богатый на всякие выкрутасы C++ под .NET

С++ в отличие от GPCP компилируется в unsafe.

Я однажды скомпилировал С++ код всяких аудиокодеков в дотнетную dll прекрасно работающую под Windows. Радость моя кончилась когда эта dll отказалась работать под Linux.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Эффективность WITH
СообщениеДобавлено: Пятница, 12 Сентябрь, 2008 16:54 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
Сергей Губанов писал(а):
С++ в отличие от GPCP компилируется в unsafe.


Дык! :) Кто мешает компилировать оберон в unsafe? Ну не будет он работать без перекомпиляции на других платформах. Так у вас и сишарповое не будет работать без специальной заточки (викидывания Windows-specific), особенно если оно сложнее "Hello Word!". Запуск без перекомпиляции - далеко не главное достоинство .NET.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Эффективность WITH
СообщениеДобавлено: Пятница, 12 Сентябрь, 2008 17:49 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
Vlad писал(а):
Кто мешает компилировать оберон в unsafe?
Как я понимаю, это будет уже не оберон.


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

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


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

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


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

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