LINUX.ORG.RU

Не делай так.

Deleted
()

gcc будет быстрее если обновить его до 4.7.1, но программы все не соберутся

XVilka ★★★★★
()

Запомни раз и навсегда: сношение со всяческими опциями компилятора после -O2 дают эффект в районе 1-6%, что переводится как «ты этого даже не заметишь».

Работает одно простое правило: для сишечки -O2, для плюсов -O3 (потому что на O3 включаются некоторые полезные плюсовые оптимизации). Все.

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

4.6.3
4.7.1 стоит из-за компиза - т.к. надо было потестить сборку им

megabaks ★★★★
()

Насколько я помню, GNUтые предупреждают во всех мануалах что если его собрать с оптимизацией отличной от -O2 то он не будет нормально работать. Хочешь быстрый компилятор - собирай clang и добавляй в мейкфлаги то ли -Wno-all, то ли -Wno-error. Как-то так.

svr4
()

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

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

Вот не надо, ага. В порядке эксперимента юзал. Нормально собрал им всю мишуру (иксы, lxde, немного софта) после сборки базовой системы. Единственная проблема - в долбанутых мейнтейнерах, впихивающих в дебилды флаги -Wall -Werror. Как отключить - написал в каменте.

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

никто не мешает собрать руками и запихать в /usr/local же.

svr4
()

И как с -O3 работает?

Озон - йад.

r_asian ★☆☆
()

И как с -O3 работает?

Про последствия такой оптимизации целую книгу написали, причем так и назвали: «Волшебник страны O3». И судя по всему, тебе к Гудвину заглянуть надо бы, раз такие вопросы задаешь.

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

> Единственная проблема - в долбанутых мейнтейнерах, впихивающих в дебилды флаги -Wall -Werror.

вот только не надо перекладывать с больной головы на здоровую ;)

$ cat test1.c
#include <stdio.h>

int main() {
    printf("%d\n", 1);
    return 0;
}
$ clang -ansi -pedantic -Wall -Wextra -O2 test1.c
$ _
$ cat test2.c
#include <stdio.h>

int main() {
    int c = 1;
    printf("%d\n", c);
    return 0;
}
$ clang -ansi -pedantic -Wall -Wextra -O2 test2.c 
0  clang           0x0000000001a31c5f
1  clang           0x0000000001a31f99
2  libpthread.so.0 0x00007f78662234e0
3  clang           0x0000000000d7eb32
4  clang           0x0000000000d7fb37
5  clang           0x0000000000d81b34 clang::runUninitializedVariablesAnalysis(clang::DeclContext const&, clang::CFG const&, clang::AnalysisContext&, clang::UninitVariablesHandler&, clang::UninitVariablesAnalysisStats&) + 900
6  clang           0x0000000000c14a67 clang::sema::AnalysisBasedWarnings::IssueWarnings(clang::sema::AnalysisBasedWarnings::Policy, clang::sema::FunctionScopeInfo*, clang::Decl const*, clang::BlockExpr const*) + 967
7  clang           0x00000000009c2aac clang::Sema::PopFunctionOrBlockScope(clang::sema::AnalysisBasedWarnings::Policy const*, clang::Decl const*, clang::BlockExpr const*) + 172
8  clang           0x0000000000a36aee clang::Sema::ActOnFinishFunctionBody(clang::Decl*, clang::Stmt*, bool) + 334
9  clang           0x0000000000966e7d clang::Parser::ParseFunctionStatementBody(clang::Decl*, clang::Parser::ParseScope&) + 189
10 clang           0x0000000000977a53 clang::Parser::ParseFunctionDefinition(clang::Parser::ParsingDeclarator&, clang::Parser::ParsedTemplateInfo const&) + 963
11 clang           0x0000000000985ba3 clang::Parser::ParseDeclGroup(clang::Parser::ParsingDeclSpec&, unsigned int, bool, clang::SourceLocation*, clang::Parser::ForRangeInit*) + 739
12 clang           0x0000000000973e55 clang::Parser::ParseDeclarationOrFunctionDefinition(clang::Parser::ParsingDeclSpec&, clang::AccessSpecifier) + 149
13 clang           0x000000000097443d clang::Parser::ParseDeclarationOrFunctionDefinition(clang::ParsedAttributes&, clang::AccessSpecifier) + 717
14 clang           0x00000000009765bb clang::Parser::ParseExternalDeclaration(clang::Parser::ParsedAttributesWithRange&, clang::Parser::ParsingDeclSpec*) + 2747
15 clang           0x0000000000976ace clang::Parser::ParseTopLevelDecl(clang::OpaquePtr<clang::DeclGroupRef>&) + 158
16 clang           0x000000000094f54d clang::ParseAST(clang::Sema&, bool) + 269
17 clang           0x0000000000839ea3 clang::CodeGenAction::ExecuteAction() + 51
18 clang           0x0000000000736d85 clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) + 309
19 clang           0x0000000000721881 clang::ExecuteCompilerInvocation(clang::CompilerInstance*) + 1041
20 clang           0x000000000071ab84 cc1_main(char const**, char const**, char const*, void*) + 804
21 clang           0x0000000000709156 main + 7606
22 libc.so.6       0x00007f7865460a95 __libc_start_main + 245
23 clang           0x000000000071a675
Stack dump:
0.      Program arguments: /usr/bin/clang -cc1 -triple x86_64-slackware-linux-gnu -emit-obj -disable-free -disable-llvm-verifier -main-file-name test2.c -mrelocation-model static -mdisable-fp-elim -masm-verbose -mconstructor-aliases -munwind-tables -target-cpu x86-64 -target-linker-version 2.22.52.0.2.20120424 -momit-leaf-frame-pointer -resource-dir /usr/bin/../lib/clang/3.0 -fmodule-cache-path /var/tmp/clang-module-cache -cxx-isystem /usr/lib64/qt/include -internal-isystem /usr/local/include -internal-isystem /usr/bin/../lib/clang/3.0/include -internal-externc-isystem /usr/include/ -internal-externc-isystem /usr/lib64/gcc/x86_64-slackware-linux/4.7.1//include/ -internal-externc-isystem /usr/lib64/gcc/x86_64-slackware-linux/4.7.1//include-fixed/ -O2 -Wall -Wextra -pedantic -std=c89 -ferror-limit 19 -fmessage-length 138 -fgnu-runtime -fobjc-runtime-has-arc -fobjc-runtime-has-weak -fobjc-fragile-abi -fdiagnostics-show-option -fcolor-diagnostics -o /tmp/test2-23p7ir.o -x c test2.c 
1.      <eof> parser at end of file
2.      test2.c:3:12: parsing function body 'main'
clang: error: unable to execute command: Segmentation fault
clang: error: clang frontend command failed due to signal 2 (use -v to see invocation)
clang: note: diagnostic msg: Please submit a bug report to http://llvm.org/bugs/ and include command line arguments and all diagnostic information.
clang: note: diagnostic msg: Preprocessed source(s) are located at:
clang: note: diagnostic msg: /tmp/test2-shgypw.i
$ _
$ clang -ansi -pedantic -Wextra -O2 test2.c      
$ _

если «-Wall» может внезапно уронить компилятор, то такие компиляторы в этой вселенной не нужны ;)

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

если «-Wall» может внезапно уронить компилятор, то такие компиляторы в этой вселенной не нужны ;)

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

wota ★★
()

В теории - да. На практике может не собраться.

ymuv ★★★★
()

Ога, по слухам еще и все программы, собранные таким конпелятором получат +10 к скорости исполнения :D

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

кроме того, что старый, специально проверил:

$ cat test2.c
#include <stdio.h>

int main() {
    int c = 1;
    printf("%d\n", c);
    return 0;
}
~$ clang -ansi -pedantic -Wall -Wextra -O2 test2.c 
~$ clang -v
Ubuntu clang version 3.0-6ubuntu3 (tags/RELEASE_30/final) (based on LLVM 3.0)
Target: x86_64-pc-linux-gnu
Thread model: posix
wota ★★
()
Ответ на: комментарий от fads

O2 сильно быстрее (>5%) почти всегда - выигрыш же по размеру занимаемой памяти практически отсутствует, разве что бинарники чуть меньше.

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

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

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

-Werror

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

buddhist ★★★★★
()

нет только адреналин подскакивает, а так толку нет.

Thero ★★★★★
()

gcc будет быстрее если заменить его на clang

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

Linus Torvalds

For example, if you are doing mp3 encoding, the repeat rates for the core loop are huge, and the code is small, so clearly the static component is largely insignificant. Use -O2.

But if you're running a GUI program then just the loading time is often quite noticeable, and if you can improve that by, say, 10%, then that can _more_ than make up for almost any amount of stupidity in your code. Especially since a lot of the code isn't even all that loopy and tends to have low repeat rates. You're almost guaranteed to be better off using -Os than -O2.

http://yarchive.net/comp/linux/Os.html

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

Профилирование иногда побольше добавляет, но требует индивидуальный подход к каждому пакету.

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

вообще использовать выше -O2 и всякие графиты глобально - это крайне глупо

А в чем трабла с глобальным графитом? Я еще могу понять почему глобальный lto заломает все нафиг, но графит-то вроде уже стабилен.

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

стабильно медленный?
да
софта, на котором он даёт профит 0 целых хрен десятых
а вот проблем он вызывать может кучу
вот и думай

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

а вот проблем он вызывать может кучу

Так вот мне и казалось, что все, проблем больше нет.

То есть, еще остались места где он лажает?

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

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

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

Может arsi повезло нарваться на нее :)

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

Хочешь быстрый и неработающий компилятор - собирай clang

ну и сколько программ clang не собрал у тебя?

Stil ★★★★★
()

Да, будет быстрее, по крайней мере на POWER/PowerPC. Бутстрап с -O3 и ошибки при этом очень важны для внутренностей GCC.

mr_doug
()

Сабж: нет, не будет, но будет больше по размеру.

И как с -O3 работает? В кору не падает?

Последний gcc, с которым я экспериментировал, был 3.x версии. Иногда падал.

Программы, слинкованные с libstdc++, не сегфолтятся?

Этого не помню.

imul ★★★★★
()

Сначала всё работает и даже кажется, что быстро. Со временем вылазят крайне труднодиагностируемые глюки, особенно плохо, когда в глобальных пакетах, типа gtk+-2.0. Два раза столкнулся, что полная пересборка мира с безопасными опциями компиляции решала все проблемы, сейчас живу на CFLAGS="-march=native -O2 -pipe", чего и вам желаю.

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

ВЫ ен поняли вопрос - я спрашивал про флаги компиляции для _самого_ GCC.

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

Ядрышко часто пересобираю - ибо только ванильку юзаю.

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

+1. Сам вдоволь наигрался с этими оптимизациями и пришёл к выводу, что для моей машины лучшее решение:

CFLAGS="-march=corei7-avx -O2 -pipe -mfpmath=sse -msse4 -Wno-all"
CXXFLAGS="${CFLAGS}"
Kindly_Cat
()
Ответ на: комментарий от Kindly_Cat

march=native размер кэша правильно учитывает :), но вам видней

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