[shootout]
лень было писать :) Читая go-nuts заметил что go все еще страдает в "моем" бенчмарке (я ранее сабмитил в fannkuch-redux 2 реализации за C++) я заметил что результаты както скисли по сравнению с октябрем 2010го.
на рсдне постил цифры но всем как-то наплевать.
При внимательном рассмотрении дизассемблера (не убегайте я цитировать не буду :D ) выяснилось что в основном чарте достаточно чуток помешать код в хотспоте и попустит. Засабмитил исправленный - скоро все вернется в норму. Регресс по сравнению с 4.4.2 есть но небольшой. В дополнительном, там где я нагло закешировал перестановку в регистре SSE, дело хужей. На новых CPU оно работает как надо, но вот бенчмарк все еще сидит на старом Core2 6600, в котором sse4 еще нет ... И на нем gcc доставляет по полной.
Вкратце там так: есть перестановка в классе, я считываю ее в регистр и в цикле меняю этот регистр. Назад не пишу. Потом перехожу к следующей и тп. Великий и могучий "устраняет лишнюю переменную" и ... читает и пишет перестановку в классе во внутреннем цикле, и переписывает ее еще разок на выходе чтобы восстановить нормальное значение.
Я читал о таком бреде у cbloom, когда он жаловался на gcc/ps3. Нормального решения я пока не вижу так как черный ящик и ручки нет. Дебильный volatile вместо register ускоряет программу на половину положенного facepalm.
PS. бросил EDA изза бардака в конторе и двигаю в Ubi. Было приличное предложение от одного банка, но они работают тут через посредника (не буду называть) и от их контракта и общения у меня аллергия.