LINUX.ORG.RU

GCC vs MSVC


0

0

Сразу предупреждаю тема флеймоопасная, поэтому нервных и беременных прошу покинуть помещение.

Причиной появления данного сообщения послужило желание автора поста организовать "обмен мнениями" :) по поводу состояния дел в области компиляторостроения, а конкретно вопросов оптимизации, на примере конкретного провала GCC и победы компилятора от сами знаете кого, в деле оптимизации кода библиотеки Blitz++.

Вооот. Собственно здесь -> http://rsdn.ru/forum/message/3358519.1.aspx я попытался дать подробнейшее техническое описание проблемы.

И да начнется обсуждение :)


А под ARM и CELL и MIPS обогнало? а даже не скомпилилось, тогда лесом

dimon555 ★★★★★
()

ссылочку на MSVC для линукс выдайте или тему как оффтопик в мусорную корзинку ,
потому что причем тут линукс?

Sylvia ★★★★★
()
Ответ на: комментарий от Sylvia

> потому что причем тут линукс?

Сравниваются два компилятора, один из которых свободный и под линукс имеется.

Целую нежно, ваш К.О.

mamay_cozak
()
Ответ на: комментарий от dimon555

Уже неоднократно сравнивали. Есть даже люди, которые собирают ядро и окружение с icc.

mamay_cozak
()
Ответ на: комментарий от mamay_cozak

а может К.О. выдаст ссылку и на второй компилятор для линукс?
Иначе пусть топикстартер идет на винфак , т.к. --target=x86-microsoft-windows

Sylvia ★★★★★
()
Ответ на: комментарий от Sylvia

К.О. чудес не делает. Он может только обратить внимание уважаемой дамы на то, что линукс - он не сферический и находится совсем не в вакууме. Поэтому подобные сравнения имеют право на жизнь.

mamay_cozak
()

>конкретного провала GCC и победы компилятора от сами знаете кого, в деле оптимизации кода библиотеки Blitz++.

Там обычный глюк, и говорить о каком-то провале смешно. Ты хотя бы в другой версии gcc пробовал скомпилить ?

kerosinkin
()
Ответ на: комментарий от kerosinkin

>Там обычный глюк

Там ни разу не глюк. Там выражение вида return a[b * c[0]], где c[0] - равна константе (как выяснилось). Да, GCC не осилил это выяснись на этапе компиляции.

JackYF ★★★★
()

> И да начнется обсуждение :)

Чего обсуждать? Что gcc поделка - давно известно.

nikolayd
()

> Я не большой знаток AT&T-шного синтаксиса, но помоему творится там какая-то муть

Это тебе минус, так что лучше бы осилил посмотреть и исходники:

T_numtype& operator()(TinyVector<int,1> index) { assertInRange(index[0]); return data_[index[0] * stride_[0]]; }

- причем где-то там stride_ для этого случая будет с нулями. Ну и что ты хочешь, собственно, и в чём твоя проблема?

В этой ситуации просто либа написана криво (неоптимальна для твоего случая) - GCC честно выполнил свою задачу, не додумывая за разработчиков либы; за VS ты заплатил - вот он тебе и выпрыгивает из шкуры чтобы отработать твои бабки.

Spectr ★★★
()
Ответ на: комментарий от Spectr

express или пререлиз можно бесплатно использовать

lester ★★★★
()
Ответ на: комментарий от anonymfus

Заплатил за компилятор или нет - за винду в любом случае заплатил. Плюс - разработчикам VS платят весьма неплохую зарплату за работу.

Spectr ★★★
()
Ответ на: комментарий от Spectr

> Заплатил за компилятор или нет - за винду в любом случае заплатил

60$ не деньги

> Плюс - разработчикам VS платят весьма неплохую зарплату за работу.


рад за них

lester ★★★★
()
Ответ на: комментарий от Spectr

>Заплатил за компилятор или нет - за винду в любом случае заплатил.

Некорректно, так как без винды и компилятор под неё не нужен.

>Плюс - разработчикам VS платят весьма неплохую зарплату за работу.


Вы уверены, что все разработчики GCC работают бесплатно?

anonymfus ★★★★
()

вообще интересно узнать, как LLVM с этим справится. они вроде активно пишут, сборки у них выглядят прилично. может у них лучше код генерится? тогда нахер бэкэнд гэцеце нужен?

Tu3eK
()
Ответ на: комментарий от anonymfus

> Некорректно, так как без винды и компилятор под неё не нужен.

В чём некорректность? ЗП. разработчикам VS платят не только с продаж VS, но и винды в том числе.

> Вы уверены, что все разработчики GCC работают бесплатно?

Я такого не писал.

Spectr ★★★
()
Ответ на: комментарий от Spectr

бугага. штука уже так бумажка, карманные деньги на рынок сходить за мясом.

Tu3eK
()
Ответ на: комментарий от Spectr

>В чём некорректность? ЗП. разработчикам VS платят не только с продаж VS, но и винды в том числе

Первоначально Вы писали «GCC честно выполнил свою задачу, не додумывая за разработчиков либы; за VS ты заплатил - вот он тебе и выпрыгивает из шкуры чтобы отработать твои бабки», то есть речь шла о сравнении MSVS и GCC, типа одно бесплатное и удовлетворительное, а другое за бабки и крутое. Вот именно с этим я и спорю, так как в реальности они оба как компиляторы под винду бесплатны.

anonymfus ★★★★
()
Ответ на: комментарий от Spectr

> Вы таки верите в бесплатный сыр и пиво? Это ваше право, я не буду вас переубеждать :)

винда - таки большой рынок, и в данном случае это не бесплатный сыр, а заработанный кусок хлеба

lester ★★★★
()
Ответ на: комментарий от kerosinkin

Пробовал еще с 3.3.6, 4.1.0 и даже 2.95.4 из МСВС.

И еще в догонку о зарплатах и стоимости. Каким образом это относится к обсуждаемой теме :) Да и что то мне подсказывает что разработчики GCC тоже не фига не за бесплатно работают, и кстати у кого больше зарплата это еще вопрос, к делу, кстати, тоже не относящийся.

З.Ы. Считать чужие деньги ИМХО дурной тон :)

SLiDER
() автор топика
Ответ на: комментарий от SLiDER

> Каким образом это относится к обсуждаемой теме

IMHO относится. Эта оптимизация в большей степени эвристическая (следить когда переменной присваивается '0' или '1', сохраняется значение, и оптимизировать умножение на такие переменные) - и если разрабатывает большой штат сотрудников в течение длительного времени - высока вероятность что оптимизацию такого рода кто-то реализует, не сильно рассчитывая что автор компилируемого кода сам сделает эту оптимизацию.

Spectr ★★★
()
Ответ на: комментарий от SLiDER

> Считать чужие деньги ИМХО дурной тон

IMHO это придумано чтобы рассказывать лузерам, обдирая их как липку - ну или если в аристократов хочется поигратся :)

Spectr ★★★
()
Ответ на: комментарий от true_admin

> ты лучше скажи какая разница в скорости

Непонятно разница в скорости между чем и чем имелась ввиду. Если для operator() то VC выигрывает у gcc примерно в 6 раз, для одномерного blitz::Array, если для декодера Витерби (упомянутого мной на rsdn-е) то где-то в 3 раза (естественно при реализации его на основе blitz::Array). Правда, ради справедливости стоит отметить, что переписанный на std::valarray декодер в случае G++ показал примерно 10% выигрыш по скорости перед VC. Но это, скорее, плевок в сторону реализации STL идущей в составе с VS, а не проигрыш компилятора.

SLiDER
() автор топика

ну и чего тут пыжится? какие-то оптимизации в gcc реализованы, какие-то в msvc.

cobold ★★★★★
()
Ответ на: комментарий от SLiDER

> Если для operator() то VC выигрывает у gcc примерно в 6 раз,

На основании чего ты делаешь это заявление? Оно противоречит действительности, т.к. его очевидно интерпретировать - что именно operator() в языке C++ в GCC медленнее чем в VS.

На основании исходников blitz и твоего листинга асма легко убедится, что VC просто выкинул умножение, которое было в blitz в _функции_ operator(), т.к. множитель-переменная принимает значение в другом месте программы равное нулю, и никогда его не меняет.

Так что при чем тут оператор (), перегрузка функций и прочие возвышенные вещи?

Или же все посты выше тех кто ответил на тему - просто флуд, который и читать никто не собирается?

Spectr ★★★
()

Надо битотрах на Си писать. С этим ++ вечно какие-то проблемы.

Absurd ★★★
()
Ответ на: комментарий от Eshkin_kot

> а одного компьютера - вполне достаточно, да ? :)

а у меня на двух других линукс, а на еще одном Mac OS :P

lester ★★★★
()
Ответ на: комментарий от SLiDER

> Непонятно разница в скорости между чем и чем имелась ввиду

сорри, прочитал пост по диагонали. Увы, gcc всю жизнь был таким :(. Если не влом то запости багрепорт им, вдруг пофиксят.

true_admin ★★★★★
()
Ответ на: комментарий от Tu3eK

> вообще интересно узнать, как LLVM с этим справится. они вроде активно пишут, сборки у них выглядят прилично. может у них лучше код генерится? тогда нахер бэкэнд гэцеце нужен?

Я пробовал llvm-gcc 2.4. На сжатии flac'ом, 7z'ом и gzip'ом он слил обычному gcc 4.3.3 раза в полтора (точные цифры сейчас к сожалению сказать не могу).

Deleted
()

> 8048a47: 89 f6 mov %esi,%esi
?
> 8048a49: 8d bc 27 00 00 00 00 lea 0x0(%edi,%eiz,1),%edi

?? eiz? чем этот дамп сгенерен? (казалось, что это objdump)
> 8048a66: 83 c2 01 add $0x1,%edx

???

Тут оптимизации вообще включены?

sf ★★★
()
Ответ на: комментарий от sf

> чем этот дамп сгенерен? (казалось, что это objdump)

Он родимый :)

> Тут оптимизации вообще включены?

Угу.

SLiDER
() автор топика
Ответ на: комментарий от lester

> а у меня на двух других линукс, а на еще одном Mac OS :P

Вас щас сожрут-с

А вообще Джобс мог бы вложиться в gcc

namezys ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.