(no subject)

Aug 18, 2011 20:06

[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. Было приличное предложение от одного банка, но они работают тут через посредника (не буду называть) и от их контракта и общения у меня аллергия.

c++, shootout

Previous post Next post
Up