[02:00:51] <_valexey_> Kemet: фоточек хотя бы! :-)
[02:01:31] <_valexey_> На самом деле не обязательно докладывать. Поприсутствовать зрителем. Вопросы задать.
[04:52:12] <Kemet> Блин, в ао конструция loop .... if cond then exit; end; end; работает быстрее чем loop ... until cond; причем это чувствуется
[04:52:54] <Kemet> repeat until
[10:26:59] <_valexey_> Гг
[10:27:17] <_valexey_> Выход из середины цикла рулит!
[11:07:56] <Kemet> _valexey_, условные циклы нужно выравнивать для производительности
[11:08:29] <TRUE> что значит "выравнивать"?
[11:08:43] <TRUE> а loop не надо?
[11:08:55] <Kemet> Адрес на 16 вроде
[11:09:17] <Kemet> TRUE, Люп это прсто ветвление
[11:09:40] <Kemet> Блин безусловный переход
[11:09:55] <TRUE> и в чём разница?
[11:10:23] <TRUE> в конце обоих циклов стоит безусловный переход
[11:10:43] <TRUE> loop и while
[11:10:57] <Kemet> Ну то есть цикл выоавнивпют nop 'ами и безусловным переходом
[11:11:56] <TRUE> так почему условные циклы нужно выравнивать, а безусловные не нужно?
[11:14:49] <Kemet> TRUE, хз, нужно доки по процу читать, но в опьимизирующих компилях циклы выравнивпют по 16
[11:15:16] <TRUE> но только условные?
[11:15:37] <TRUE> или какая часть выравнивается: начало или конец?
[11:15:50] <TRUE> или обе
[11:18:09] <Kemet> TRUE, Безусловный значит нет спекуляции и кеш в норме, а на 16 это с кешем связвно, оно тогда в кеше висит, както так, а условный переход этл спекулятивные вычислания и аррмахи в кеше
[11:19:02] <TRUE> аррмахи?
[11:20:14] <Kemet> TRUE, Выоавнивать нужно все циклы, когда цикл безусловный, то там exit вперед, у unyil и вперед и назад
[11:20:30] <Kemet> TRUE, Промахи в кеше
[11:21:12] <TRUE> на первый взгляд, если не выровнено по 16, то не имеет значение, какой цикл. Всё равно будет на одну строку кеша больше. Если это про кеширование инструкций.
[11:22:21] <TRUE> у безусловного цикла только один переход - назад. Поту он безусловный и потому он цикл.
[11:23:46] <TRUE> у WHILE тоже безусловный переход назад. А у UNTIL возможно и так, и так (вроде бы).
[11:24:38] <TRUE> выравнивать нужно точку, на которую осуществляется переход?
[11:24:58] <Kemet> TRUE, Если цикл условный, то там спекулятивные вычисления обеих веток и предсказание переходов часто ошибочное и поэтому промахи в кеше
[11:26:06] <TRUE> ну да. Особенно, если условие сложнее, чем i < len
[11:27:24] <TRUE> хотя, почему, собственно, промах - не ясно. В общем, надо читать.
[11:28:30] <Kemet> TRUE, У безуслрвного переход назад это явный переход его нет нужды вычисоять и кеш в норме ьам есть exit и это переход тобько вперед. цикл while быстрее цикла фор
[11:29:34] <Kemet> TRUE, Да, у сложного условия в итоге будет переход посое каждого выражения
[11:31:37] <Kemet> Я в одном проекте все repeat until заменил на безусловные с выходом по эксит, а фор на вайл
[11:33:52] <TRUE> так все переходы обычно явные. Вычислениям же подвергается не адрес, а сам факт перехода. А адрес всегда известен. Правда, если адрес указывает вперёд, то требуется загрузить нужный адрес в кеш. Но это есть почти в любом цикле.
[11:34:24] <TRUE> TRUE> так все переходы обычно явные.
как условные, так и безусловные
[11:35:11] <Kemet> Явный в смысле безусловный в конкретную точку назад.
[11:35:49] <TRUE> странно, что for медленее while. Должно же быть одинаково...
[11:35:57] <TRUE> так они же все в конкретную точку назад...
[11:36:18] <TRUE> разве есть циклы, которые прыгают в разные места?
[11:38:28] <Kemet> TRUE, Так если until выполнился то прыгнет вперед
[11:40:31] <Kemet> TRUE, Не помню, смотреть нужно но кажется в ао фор это таки не совсем вайл, т
[11:40:51] <TRUE> я тут подумал: весь смысл появления цикла UNTIL в том, что это цикл с условным прыжком назад и всё. У остальных циклов по два прыжка: назад и вперёд. Если у UNTIL не срабатывает условие, то он просто продолжит выполнять следующую за ним инструкцию.
[11:40:58] <TRUE> никаких прыжков
[11:42:19] <TRUE> разве что они просто пока не заморачивались с какой-никакой оптимизацией циклов в своём компиляторе... Тогда понятно, почему пока так.
[11:45:34] <Kemet> TRUE, Смотреть надо, но разница чувствуется
[12:05:30] <Kemet> TRUE, код у фора вайла несколько отличается
[12:41:26] <Kemet> Впринципе понятно почему цор медленне - у него параметр в стеке а у вайла в регистре, и условтя перехода другие но можно навернре условия подобрать
[13:15:36] <metacore> TRUE: http://qaru.site/questions/4528/performance-optimisations-of-x86-64-assembly-alignment-and-branch-prediction/38871
[13:47:16] <metacore> http://deka18.tsk.ru/er/other/asm.optim.shtml
[20:39:31] <metacore> есть xmpp клиент полностью написанный на шарпе?
[21:54:04] <_valexey_> Наверно... А зачем?
[21:55:13] <_valexey_> Оно ж существенно завязано на либы будет виндовые