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 ГГц).
|
Автор: | Сергей Губанов [ Пятница, 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/ |