Услышал я тут что Intel C++ может генерить более оптимальный код, и
решил попробовать. Установил себе триальную версию 9.0. Заменил в makefile
g++ на icpc, добавил в опции компилятора -O2 и -static (тесты проводятся
на машине где нет icc и без -static он ругается на отсутствие
динамических библиотек), пересобрал, запустил и тихо офигел.
Вместо полутора минут на gcc-3.3.3, получилось 12!!! замеры проводились
обычным time.
Что я неправильно сделал? могло повлиять на быстродействие использование -static ?
Еще, при компиляции icpc выдал кучу remark в основном на тему:
remark #981: operands are evaluated in unspecified order
remark #383: value copied to temporary, reference to temporary used
Может ли это влиять на скорость?
Есть ли вобще какие-нибудь рекомендации по переводу проекта с gcc на Intel C++?
Странно, может быть, что бинарный файл получился огромный, и во время работы, возникает необходимость много использовать swap. А бинарник, собранный gcc, он тоже был собран с --static?
>Странно, может быть, что бинарный файл получился огромный, и во время
>работы, возникает необходимость много использовать swap. А бинарник,
>собранный gcc, он тоже был собран с --static?
Бинарник получается в районе 5 метров, на машине 2 гига памяти и в момент тестов свободно больше половины. При выполнении свободная память не кончалась, так что я думаю своп тут не причем. Для gcc тоже собрал с -static, бинарник получился на 200 килобайт меньше, но результаты по скорости остались те же. GCC - около 1 минуты, Intel - около 12 минут.
Хм, интересно ещё было бы потестировать icc и gcc на генерацию кода доступа к элементам массивов (одномерных, двумерных). Пожалуй, icc должен лучше справляться со свёртками и оптимизацией сложных режимов адресации.