OberonCore
https://forum.oberoncore.ru/

Эффективность WITH
https://forum.oberoncore.ru/viewtopic.php?f=81&t=914
Страница 2 из 3

Автор:  Vlad [ Вторник, 18 Март, 2008 00:17 ]
Заголовок сообщения:  Re: Эффективность WITH

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


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

Автор:  Сергей Губанов [ Вторник, 09 Сентябрь, 2008 11:35 ]
Заголовок сообщения:  Re: Эффективность WITH

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

Автор:  Vlad [ Вторник, 09 Сентябрь, 2008 15:10 ]
Заголовок сообщения:  Re: Эффективность WITH

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


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

Автор:  Geniepro [ Вторник, 09 Сентябрь, 2008 15:58 ]
Заголовок сообщения:  Re: Эффективность WITH

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

Автор:  Сергей Губанов [ Вторник, 09 Сентябрь, 2008 17:50 ]
Заголовок сообщения:  Re: Эффективность WITH

Vlad писал(а):
Сергей Губанов писал(а):
на C# ... получилось около 18 тактов на одно сравнение...

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

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

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

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

Автор:  Сергей Губанов [ Вторник, 09 Сентябрь, 2008 18:08 ]
Заголовок сообщения:  Re: Эффективность WITH

Поправочка, в C# выяснение типа в if (msg is Message1) занимает не 18, а 15-16 тактов.

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

Автор:  Alexey Veselovsky [ Четверг, 11 Сентябрь, 2008 10:30 ]
Заголовок сообщения:  Re: Эффективность WITH

Сергей Губанов писал(а):
Поправочка, в C# выяснение типа в if (msg is Message1) занимает не 18, а 15-16 тактов.

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


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

Автор:  Geniepro [ Четверг, 11 Сентябрь, 2008 11:21 ]
Заголовок сообщения:  Re: Эффективность WITH

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

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

Автор:  Vlad [ Четверг, 11 Сентябрь, 2008 15:31 ]
Заголовок сообщения:  Re: Эффективность WITH

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


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

Автор:  Vlad [ Четверг, 11 Сентябрь, 2008 17:35 ]
Заголовок сообщения:  Re: Эффективность WITH

Сергей Губанов писал(а):
В Блэкбоксе аналогичное выяснение типа -- около трёх тактов.


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

Автор:  Евгений Темиргалеев [ Четверг, 11 Сентябрь, 2008 17:53 ]
Заголовок сообщения:  Re: Эффективность WITH

Вы разбираетесь в асмовском коде.
Vlad писал(а):
Потому что в том асмовском коде...
ББ доступен для скачивания. Сделайте WITH конструкцию, декодируйте и удовлетворите свою дотошность сами, Вам это по силам. Избавьте форум от улыбчивых поддёвок в адрес ББ
Vlad писал(а):
около или три? :)

Автор:  Сергей Оборотов [ Четверг, 11 Сентябрь, 2008 23:45 ]
Заголовок сообщения:  Re: Эффективность WITH

Сергей Губанов писал(а):
Сейчас такого энтузиазма ровно ноль
Что изменилось в связи с этим?

Автор:  Сергей Губанов [ Пятница, 12 Сентябрь, 2008 10:18 ]
Заголовок сообщения:  Re: Эффективность WITH

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 КБ]
Скачиваний: 437

Автор:  Сергей Губанов [ Пятница, 12 Сентябрь, 2008 10:32 ]
Заголовок сообщения:  Re: Эффективность WITH

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

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

Автор:  Geniepro [ Пятница, 12 Сентябрь, 2008 10:53 ]
Заголовок сообщения:  Re: Эффективность WITH

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

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

Автор:  Сергей Губанов [ Пятница, 12 Сентябрь, 2008 13:29 ]
Заголовок сообщения:  Re: Эффективность WITH

Geniepro писал(а):
почему бы уж тогда не использовать лучшее из худшего?

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

Автор:  Vlad [ Пятница, 12 Сентябрь, 2008 16:15 ]
Заголовок сообщения:  Re: Эффективность WITH

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


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

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

Автор:  Сергей Губанов [ Пятница, 12 Сентябрь, 2008 16:45 ]
Заголовок сообщения:  Re: Эффективность WITH

Vlad писал(а):
Вот, например, богатый на всякие выкрутасы C++ под .NET

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

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

Автор:  Vlad [ Пятница, 12 Сентябрь, 2008 16:54 ]
Заголовок сообщения:  Re: Эффективность WITH

Сергей Губанов писал(а):
С++ в отличие от GPCP компилируется в unsafe.


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

Автор:  Евгений Темиргалеев [ Пятница, 12 Сентябрь, 2008 17:49 ]
Заголовок сообщения:  Re: Эффективность WITH

Vlad писал(а):
Кто мешает компилировать оберон в unsafe?
Как я понимаю, это будет уже не оберон.

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