LINUX.ORG.RU
ФорумTalks

Не потралить ради... Или шланг - быстрый конпелятор.

 , , ,


0

3

Понадобилось мне тут обмазаться бустом. Решил собрать первый пример в доке варианта - собирался тыщу лет. Ну я подумал, что раз такое дело и на хелворде тыщу лет - что будет не на хелворде?

Решил исправить эту ситуацию - использовать шланг, ибо посоны говорили, что он быстрее. Значит запускаю - смотрю. И тут меня ожидал нежданчик:

$ time g++ ../main.cpp -std=gnu++1y -c -o /dev/null  -O0

real    0m0.659s
user    0m0.610s
sys     0m0.040s

$ time clang++ ../main.cpp -std=gnu++1y -c -o /dev/null  -O0

real    0m0.954s
user    0m0.940s
sys     0m0.010s

$ clang++ -v
clang version 3.8.0 (tags/RELEASE_380/final)

Посоны - нас обманывали? Как заставить его собирать быстрее?

Перемещено tailgunner из development

А ты попробуй 3.6, потому что 3.7 стал чуть помедленнее компилировать, а 3.8 продолжил эту регрессивную традицию (по форониксу).

gag ★★★★★
()

я не представляю что за хеловорд может компилится почти секунду, но друже, типо один раз запустил - это потестил?

[system-root@freebsd ~]$ time cc main.cpp -std=gnu++1y -c -o /dev/null  -O0

real    0m0.254s
user    0m0.183s
sys     0m0.061s
[system-root@freebsd ~]$ time cc main.cpp -std=gnu++1y -c -o /dev/null  -O0

real    0m0.198s
user    0m0.131s
sys     0m0.054s
[system-root@freebsd ~]$ time cc main.cpp -std=gnu++1y -c -o /dev/null  -O0

real    0m0.141s
user    0m0.113s
sys     0m0.015s

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

я не представляю что за хеловорд может компилится почти секунду

Я написал - «первый пример из доки по варианту».

типо один раз запустил - это потестил?

Давай ты не будешь меня учить как тестить, хорошо?

$ time g++ ../main.cpp -std=gnu++1y -c -o /dev/null  -O0

real    0m0.675s
user    0m0.610s
sys     0m0.050s
$ time g++ ../main.cpp -std=gnu++1y -c -o /dev/null  -O0

real    0m0.678s
user    0m0.630s
sys     0m0.030s
$ time g++ ../main.cpp -std=gnu++1y -c -o /dev/null  -O0

real    0m0.676s
user    0m0.590s
sys     0m0.070s

Это проблемы твоей тачки, операционки и конфигурации - не надо их выдавать за общие.

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

Посоны - нас обманывали? Как заставить его собирать быстрее?

вписать -O3 в тесте вместо -O0

upd: http://www.phoronix.com/scan.php?page=article&item=clang-gcc-opts&num=3 - вот, кстати, примерная картина показана на 2/3/4 картинках

anTaRes ★★★★
()
Последнее исправление: anTaRes (всего исправлений: 1)
Ответ на: комментарий от anTaRes

вписать -O3 в тесте вместо -O0

Оптимизатор в шланге ещё медленее. Проверенно сишным кодом - сливает гцц в 2раза, несмотря на то, что оптимизатор у гцц намного мощнее. Вернее на голову.

Да и там нечего оптимизировать - это добавит 1% времени. И ничего не изменит.

Собрал 3.6 - работает на уровне гцц.

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

http://www.boost.org/doc/libs/1_60_0/doc/html/variant.html - там всё было написано. Первый пример из доки по варианту.

#include "boost/variant.hpp"
#include <iostream>

class my_visitor : public boost::static_visitor<int>
{
public:
    int operator()(int i) const
    {
        return i;
    }
    
    int operator()(const std::string & str) const
    {
        return str.length();
    }
};

int main()
{
    boost::variant< int, std::string > u("hello world");
    std::cout << u; // output: hello world

    int result = boost::apply_visitor( my_visitor(), u );
    std::cout << result; // output: 11 (i.e., length of "hello world")
}
registrant27492
() автор топика

Тогда вот.

$ clang --version
clang version 3.7.1 (tags/RELEASE_371/final)
Target: x86_64-unknown-linux-gnu
Thread model: posix

$ gcc --version
gcc (GCC) 5.3.0
Copyright (C) 2015 Free Software Foundation, Inc.
Это свободно распространяемое программное обеспечение. Условия копирования
приведены в исходных текстах. Без гарантии каких-либо качеств, включая 
коммерческую ценность и применимость для каких-либо целей.

$ for i in {0..10}; do time g++ -std=gnu++1y boost_variant.cpp -o boost_variant -O0 >/dev/null; done

real 1.341      user 0.838      sys 0.262       pcpu 82.04
real 0.899      user 0.824      sys 0.072       pcpu 99.63
real 0.901      user 0.821      sys 0.077       pcpu 99.71
real 0.902      user 0.833      sys 0.067       pcpu 99.75
real 0.892      user 0.813      sys 0.076       pcpu 99.62
real 0.912      user 0.827      sys 0.082       pcpu 99.72
real 0.925      user 0.847      sys 0.076       pcpu 99.75
real 0.908      user 0.824      sys 0.083       pcpu 99.84
real 0.899      user 0.834      sys 0.061       pcpu 99.57
real 0.898      user 0.826      sys 0.068       pcpu 99.59
real 0.911      user 0.833      sys 0.075       pcpu 99.65

$ for i in {0..10}; do time clang++ -std=gnu++1y boost_variant.cpp -o boost_variant -O0 >/dev/null; done                                                                                                 
real 1.010      user 0.611      sys 0.248       pcpu 85.01
real 0.646      user 0.611      sys 0.033       pcpu 99.68
real 0.650      user 0.618      sys 0.031       pcpu 99.79
real 0.666      user 0.630      sys 0.033       pcpu 99.61
real 0.640      user 0.598      sys 0.040       pcpu 99.76
real 0.651      user 0.613      sys 0.036       pcpu 99.72
real 0.642      user 0.607      sys 0.034       pcpu 99.83
real 0.651      user 0.614      sys 0.035       pcpu 99.76
real 0.646      user 0.618      sys 0.025       pcpu 99.60
real 0.651      user 0.610      sys 0.040       pcpu 99.90
real 0.657      user 0.621      sys 0.032       pcpu 99.45
intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 1)
Ответ на: комментарий от registrant27492

Вот и я очень удивился, когда обнаружил такой регресс в развитии llvm/clang. Ведь скорость сборки была жирным плюсом clang в отличие от gcc. Столлман заслал своих в команду llvm?..

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

прюс для «однопрогонных» тестов нужно переводить все ядра в перфоманс
иначе результат будет не точным (это видно по первым значениям в тесте выше)

anTaRes ★★★★
()

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

I-Love-Microsoft ★★★★★
()

Когда ты научишься правильно писать слово «компилятор»?

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

Ну вон - оказывается до регресса было быстрее гцц5.3, а сейчас гцц6 на равне с 3.6/7.

Ведь скорость сборки была жирным плюсом clang в отличие от gcc

$ time gcc sqlite3.c -O2 -c -o /dev/null 

real    0m11.616s
user    0m11.400s
sys     0m0.110s

$ time clang sqlite3.c -O2 -c -o /dev/null 

real    0m16.133s
user    0m16.070s
sys     0m0.050s

$ time clang sqlite3.c -O0 -c -o /dev/null 

real    0m1.014s
user    0m0.990s
sys     0m0.020s

$ time gcc sqlite3.c -O0 -c -o /dev/null 

real    0m2.725s
user    0m2.650s
sys     0m0.060s

Это с учётом того, что шланговские O2 нихрена не эквивалентных гццешным O2. Это 3.6 - 3.8 20+секунд.

Т.е. мало того, что в llvm заслали, так ещё и в гцц заслали, ибо гцц6 стал на 30% быстрее.

registrant27492
() автор топика
Ответ на: комментарий от anTaRes
for i in {0..10}; do time g++ -std=gnu++1y ../main.cpp -o /dev/null -O0; done

real    0m0.689s
user    0m0.660s
sys     0m0.020s

real    0m0.684s
user    0m0.640s
sys     0m0.030s

real    0m0.687s
user    0m0.630s
sys     0m0.040s

real    0m0.691s
user    0m0.630s
sys     0m0.040s

real    0m0.686s
user    0m0.620s
sys     0m0.050s

real    0m0.686s
user    0m0.660s
sys     0m0.010s

real    0m0.686s
user    0m0.640s
sys     0m0.030s

real    0m0.689s
user    0m0.630s
sys     0m0.040s

real    0m0.686s
user    0m0.640s
sys     0m0.030s

real    0m0.686s
user    0m0.630s
sys     0m0.040s

real    0m0.693s
user    0m0.650s
sys     0m0.030s

Проблемы с настройкой тачки.

registrant27492
() автор топика
Ответ на: комментарий от I-Love-Microsoft

Большая разница. Когда я что-то изменил и мне надо собрать, либо отладить, либо когда надо собрать пару раз хелворд - понять работает оно или нет.

После сишки, который собирается в 100раз быстсрее - слишком одалевает.

главное чтобы код хотя бы примерно так же шустр был

Этого уш лангла не будет никогда.

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

Проекты для ПЛИС собираются часами, моделирование часами - а у вас плюсы на 10 секунд дольше собираться будут и вы уже в истерике :)

I-Love-Microsoft ★★★★★
()
Ответ на: комментарий от tailgunner

Передавай им привет, скажи что они тоже не совсем понимают о проектах какого размера идет речь ;)

По теме: секунды сборки - я думаю о них с высока.

I-Love-Microsoft ★★★★★
()
Ответ на: комментарий от I-Love-Microsoft

По теме: секунды сборки - я думаю о них с высока.

это ленивые тесты, ТСу впадло ждать пару мин. результатов реального теста или городить таковой

ну и, скорее всего, имеется в виду компиляция части проекта во время фиксов
т.к. пусть даже пару сек. выигрыша - уже приятнее, а потом пусть 5-10 мин. весь проект собирается, уже не столь важно

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

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

Я без претензий, без злобы замечу, что ты тоже не в курсе о чем идет речь. К тому же, озвученная мной задача не может быть распареллелена на несколько даже ядер, не то что серверов.

Просто забавно, люди страдают из за долей секунд на файле, тем более делая однократный запуск (да там может один только старт компилятора время занимает а не сборка!), а я говорю - бывает часами собираешь и не жужжишь.

Короче, я рад что шланг есть - альтернатива это хорошо.

I-Love-Microsoft ★★★★★
()
Ответ на: комментарий от I-Love-Microsoft

Они понимают. Разве что ты пишешь прошивку на несколько Virtex6 :)

tailgunner ★★★★★
()

Для сборки крупных проектов я обычно заказываю 32-64 ядра на амазоне на несколько минут - стоит копейки.

anonymous
()
Ответ на: комментарий от I-Love-Microsoft

Просто забавно, люди страдают из за долей секунд на файле, тем более делая однократный запуск (да там может один только старт компилятора время занимает а не сборка!), а я говорю - бывает часами собираешь и не жужжишь.

Похоже, вы говорите о разном.

Суть в том, что можно выделить два режима работы. В первом компьютер обсчитывает долго, минут 15 и больше. В этом случае ты можешь подготовить данные для программы, запустить её, а потом пойти заниматься другими делами. Статьи читать, чаи гонять, что угодно. За пару часов можно и фильм посмотреть.

Во втором режиме, ты делаешь изменения, запускаешь программу и ждёшь минуту-две, пока оно обработает (скомпилируется). Пары минут не хватит, чтобы снова вникнуть в статью, которую до этого читал, не хватит, чтобы пойти заварить и попить чаю. Ты просто сидишь и тупо пялишься в монитор, ничего не делая. И вот тут от 10% ускорения имеют значения, потому как такие вынужденные паузы раздражают.

i-rinat ★★★★★
()
Ответ на: комментарий от I-Love-Microsoft

Я без претензий, без злобы замечу, что ты тоже не в курсе о чем идет речь.

да, но это и не нужно для понимания того, что если что-то собирается час - стоит отложить в фон/на ночь
и тогда, когда не нужно ждать/наблюдать, разница в сборке за минуты и часы пропадает

в этом смысле
я не имел в виду конкретно несколько серверов, распараллеливание и пр., а скорее скрипт сборки в кроне

anTaRes ★★★★
()

кстати, вспомнилось про такие штуки как ccache и distcc
в некоторых случаях тоже могут придать скорости

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

Ты реально не понимаешь. Речь идет вообще не о софте, билд-ферм для такого просто нет (по крайней мере, мне они не известны).

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

я ж так и на писал
да, не знаком с ПЛИС, да не билдфермы/сервера/... имел в виду

имелось в виду что, по хорошему, ты не сидишь над ним все время сборки и тогда +/- час роли особой не играют (в отличии от кнопания Build раз в минуту)
а если сидишь - то, как выше подметили, что-то пошло не так

anTaRes ★★★★
()
Ответ на: комментарий от I-Love-Microsoft

Короче, я рад что шланг есть - альтернатива это хорошо.

Это, скорее, гнусный компилятор теперь альтернатива. А из-за миллисекунд нервничать - глупость.

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

прототипы и прочую скриптуху

а ты... не пробовал скрипты писать на скриптовых языках?

на любой вкус и цвет: тикль, луа, питон, гайл — у всех отличная интеграция с си, можно даже постепенно переписывать программу со скриптового языка на си.

anonymous
()
Ответ на: комментарий от i-rinat

И вот тут от 10% ускорения имеют значения, потому как такие вынужденные паузы раздражают.

в целом все верно...но....

«финальных тестов» когда есть готовый проект целиком и ты его собираешь целиком-ждешь пару минут-тестишь-находишь ошибку(или чтото забыл)-правишь опять компиляешь все целиком...опять минута...и так пару раз
не обосо мешает ожидаение +-пару минут в финале

для разработки и теста кусков-они все компилятся не более 10 сек у меня,да по тыще раз бывает,но всеравно разница между двумя компиляторами если есть то будет не более 10-20%...тоесть по секунде две,даже суммарно за все время разработки,за пару месяцев-пару часов экономии....очень сомнительно

конечно у всех проекты разные,и если у тебя объем «кусков» равен сборке моего одного целого проекта по времени-то да,очевидно что тебе нужен супер быстрый компилятор НО
опять но-в супербольших проектах с командой раработчиков-всегда есть сервер для сборки(отдельный),а то и несколько где вся ОС в оперативке и ссд во все поля вместе с восьмиядерником...и работая с таким-разница скорости компиляторов опять отодвинется на десятый план для 99% даже по сотням мегебайт исходников...

это я молчу что 99% больших проектов разрабатываются модулями/библиотеками-которые отдельно компилятся и по очереди разрабатываются

вобщем...оптимизация размещения комнат у раработчика,и график дня без ошибок в доставках еды/воды на место-даст большай прирост сохраненного времени чем 20% скорости компилятора

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

а ты... не пробовал скрипты писать на скриптовых языках?

Моя скриптуха на них не пишется - это раз. Два «скриптовые языки» не языки и на них писать невозможно. Три - скриптовый язык ничем не отличается от си по возможностям сахаризации, а вернее их нет.

Если мне надо нагенерить тонну сишной лапши - зачем мне нужен пистон, который не имеет никаких плюсов по сравнению с си? На крестах я наваял себе dsl и всё прекрасно, удобно и так, как надо мне, а не так как меня заставляет убожество языка(хотя кресты то же заставляют, но это такое).

на любой вкус и цвет: тикль, луа, питон, гайл

Не, спасибо.

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

Зачем их изначально писать на «скриптовом языке»?

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

«финальных тестов» когда есть готовый проект целиком и ты его собираешь целиком-ждешь пару минут-тестишь-находишь ошибку(или чтото забыл)-правишь опять компиляешь все целиком...опять минута...и так пару раз

Зачем ждать, если можно не ждать?

для разработки и теста кусков-они все компилятся не более 10 сек у меня,да по тыще раз бывает,но всеравно разница между двумя компиляторами если есть то будет не более 10-20%...тоесть по секунде две,даже суммарно за все время разработки,за пару месяцев-пару часов экономии....очень сомнительно

Тебе выше показали разницу два раза, но балаболить надо - кудаж без этого.

Для справки - сишный код собирается в 100раз быстрей, отсутствие буста собирается в 20раз быстрее. И проблема в том, что конпелятор не решает эти проблемы.

опять но-в супербольших проектах с командой раработчиков-всегда есть сервер для сборки(отдельный),а то и несколько где вся ОС в оперативке и ссд во все поля вместе с восьмиядерником...и работая с таким-разница скорости компиляторов опять отодвинется на десятый план для 99% даже по сотням мегебайт исходников...
вся ОС в оперативке
ссд

Ну что я могу сказать про тебя и твою «команду» - ламерки, конечно это не мешает ваять дерьмо, но всё же с таким уровнем понимания оценку чему-то давать не стоит, ибо глупо.

это я молчу что 99% больших проектов разрабатываются модулями/библиотеками-которые отдельно компилятся и по очереди разрабатываются

Никому это не интересно - есть конкретная проблема - хелворды на бусте собираются по 10секунд. Маленький-большой это не имеет значение.

Не хелворд будет собираться секунд 30 минимальны, а это проблема. Хотя тут проблема в том, что 99% адептов не знают, что такое «думать», поэтому они не видят проблему.

вобщем...оптимизация размещения комнат у раработчика,и график дня без ошибок в доставках еды/воды на место-даст большай прирост сохраненного времени чем 20% скорости компилятора

Меня мало волнуют твои офисные проблемы.

А теперь собери свой куллпроект с lto и посмотри как поможет тебе «билдсервер». Да и с чего вдруг какой «билдсервер» с нищим хеоном будет быстрее компилять быстрее десктопной тычки? От силы в 2раза быстрее - это разница между компиляторами.

В целом в логике балаболов логики нет - это пичально.

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

Это, скорее, гнусный компилятор теперь альтернатива.

Мнение лсного балабола крайне важно для нас. Миллисекунд - я удивляюсь уровню шаблонности мышления(вернее его отсутствия) у адептов.

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

Ало - вася - он уже на почти 50% медлнее - какой жопой он куда и кого догонит, если он и 3.6 гнутый не догоняет.

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

зато шланг выдает более адекватные ошибки, за что ему можно всё простить :)

Такое же вранье как и со скоростью конпеляции.

Шланг - это либшланг. Больше от него ничего не нужно. Конпелятор он никакой - парсер для идешки + мистические доп ошибки, если он где-то и есть.

Зачем из него пытаются сделать конпелятор(естественно из него нельзя сделать конпелятор, ибо там ллвм, но его продвигают как конпелятор и все адепты это орут) - мне не ведомо. Как в момент его появление я выкатил его судьбу - так он её и придерживается. Хотя кто и почему из него делает конпелятор и зачем адептам промывают мозги и почему бздяшлюхи так за него трясутся - вполне ясно.

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

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

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

Замечание принимается, но это не совсем то - это не является плюсом шланга и не компенсирует отсутствие минусов.

Т.е. если ведётся какая-то пропаганда против, либо клевета, либо промывка мозгов или как в данном случае всё разом и цель должна защищаться, улучшая себя, либо нивелируя минусы(враньё) и прочее. Это полезно, но это ничего и никого не оправдывает.

гцц был бы хуже, чем он есть.

А это вранье. Шланг дал гцц плюсы в оптимизацию разбора крестового говна, но это дало деградацию на сишке/ С/С++ на которых написано 90% крестового кода и сам шланг.

Шланг не дал гцц ничего в плане оптимизаций нормального кода, хотя да - возможности шланга к свёртке/развёртке выше чем у гцц(хотя это просто сильно ограниченные флажки в гцц и реально он это умеет) - если это перейдёт в гцц - будет польза.

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

И в конечном итоге - что полутал гцц? Красивые сообщения об ошибках? Мне как-то насрать - мне достаточно линки на строку. Ошибки уровня «не надо так» просто смешны.

В чём конкретно конкуренция шланга улучшила гцц?

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

Если бы я тут начал задвигать про ущербность крестов и буста, либо вкатил тег С++ - тему бы выпилили с 4.2. Как ветки в соседних тредах, где я спорил с пацанами на эту тему.

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

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

на си скучно и убого писать прототипы и прочую скриптуху.

А ты и не пиши на Си скриптуху и прототипы. И на С++ их не пиши. Для этого были созданы специальные скриптовые языки.

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