Сижу, оптимизирую софтину - суть, в основном, свелась к переделке двух вызовов одной функции в один, а фунцкция подросла почти в 2 раза (но только "почти")... Она вроде как inline - т.е. ничего не должно было ухудшиться. Докурочился - gcc-4.2 её уже нормально не собирает, то есть - собирает, но быстродействие уже "не то" - причем очень заметно, почти 50%. А gcc-4.6.2 - наоборот, рост в пару % :). С clang-2.9 - тоже облом, 20% того... Не пойму, кто ж может с uint128/256 работать (т.е. ещё и генерить SSE2/3 код). Ни один компилятор не додумался слепить 2 операции над 32бит в одну 64, не говоря уж о 128/256... Собрал gcc-4.7 - "вроде не хуже", даже немного лучше. +2%. clang-3.0 (ого, при сборке llvm-3.0 паралельно компилится куча - по числу ядер проца - как-то они не подумали, что памяти бывает не так много) - "чуда не произошло". Устроил небольшую перестановку в арифметике - хихи, gcc42 подрос на 40% (т.е. все равно, как раком до парижа), gcc-4.7 - выдал ещё несколько %. И чего оно как-то не хочет перестановку инструкций делать... -- Best regards, Paul Arakelyan.
Tue, Nov 08, 2011 at 18:36:21, unisol wrote about "[uanog] clang vs gcc46":
Не пойму, кто ж может с uint128/256 работать (т.е. ещё и генерить SSE2/3 код). Ни один компилятор не додумался слепить 2 операции над 32бит в одну 64, не говоря уж о 128/256...
Попробуй ещё интеловский. А вообще для SSE* предназначен набор встроенных функций, которые фактически просто обрамление SSE команд в виде функции с аргументами. В info gcc они есть. Пытаться заставлять компилятор понять это своими средствами обычно бессмысленно, в gcc и clang лучшее, что сейчас есть, это `-mfpmath=sse,387'. -netch-
participants (2)
-
Paul Arakelyan
-
Valentin Nechayev