Andrey Stolyarov

Андрей Викторович Столяров: сайт автора

Экая прелесть (про GCC)

Sun Mar 24 19:05:22 2024

Прилетело сегодня в список рассылки, посвящённый Musl:

https://www.openwall.com/lists/musl/2024/03/24/17

Заголовок письма довольно кликбейтный: GCC optimizer is provably junk. Here is the evidence.

В списке адресатов письма — личные адреса Столлмана и этого Stefan Kanthak (автора исходного исследования), плюс несколько списков рассылки известных проектов -- кроме Musl, там Suckless, OpenBSD и ещё какие-то.

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


From Андрей (unverified) Fri Apr 12 00:59:47 2024 pencil

"Компилятор всё оптимизирует"

Я посмотрел статью, прикреплённую в письме, и хочу сказать что достаточно удивился тому, что gcc не может по-нормальному оптимизировать даже вот такой простой пример(взятый из статьи):

bool isWhitespace(char c) { return c == ' ' || c == '\r' || c == '\n' || c == '\t'; }

Вот этот простой код, который, казалось бы, можно реализовать простейшими логическими операциями, создаёт ВЕТВЛЕНИЕ при включенных оптимизациях.

Я скомпилировал код сам, и действительно, в выводе появляются инструкции для ветвления. Не сказал бы что я имею глубокие познания в ассемблере, но я точно знаю, что ветвление очень сильно понижает производительность на x86 системах из-за некоторых оптимизаций на уровне процессора. Из программ даже специально убирают ветвление чтобы они работали быстрее(это называется "branchless optimization"), а тут его компилятор создаёт буквально на ровном месте, причём когда никто не просит

clang кстати не сделал ветвление в этом конкретном примере и его ассемблерный вывод выглядит гораздо чище, так что есть с чем сравнивать и скорее всего это не "все компиляторы такие плохие", а если и плохие, то gcc, похоже, просто особенно плохой

parent From Andrey V. Stolyarov profile Fri Apr 12 09:58:17 2024 pencil

userpic

Re: "Компилятор всё оптимизирует"

В таких случаях лично меня крайне настораживают слова вроде "Я скомпилировал код сам, и действительно" при отсутствии упоминания того, какой был включён уровень оптимизации (-O2? -O3? или вообще про -O забыли?)

parent From Андрей (unverified) Fri Apr 12 11:59:28 2024 pencil

Re: Re: "Компилятор всё оптимизирует"

Действительно, забыл упомянуть про это. Я проверял с обоими уровнями оптимизаций. На -O2 и на -O3 результат получается полностью идентичный с этим примером

Стоит отметить, что без оптимизаций тоже появляются инструкции ветвления, причём у обоих компиляторов, так что, возможно, такая плохая оптимизация как-то связанна с временной репрезентацией. Возможный вариант: компилятор строит излишне низкоуровневую временную репрезентацию, к которой потом для него "самой логичной" оказывается не самая эффективная оптимизация. Не знаю как оно на самом деле, но однозначно придётся долго копаться в коде и документациях gcc чтобы это выяснить

From Anonymous (unverified) Sun Mar 31 11:05:57 2024 pencil

xz

На это сайте в списке рассылки кое-что повеселее было про xz 5.6.0 и .1

From Eduard (unverified) Tue Mar 26 10:53:52 2024 pencil

Новость про gcc

Ничему нельзя верить, даже gcc. Что же, не хотелось мне читать главу про ассемблер, но видимо придется. Хотя, всё равно переходить некуда. Из компиляторов Си кроме gcc и clang и выбирать то нечего. Под винду есть Pelles C и MSVC, но они ж под винду.

Столлман молчит, а те парни кидают оскорбительные письма. Уж тоже помолчали бы.

parent From Andrey V. Stolyarov profile Tue Mar 26 11:03:00 2024 pencil

userpic

Re: Новость про gcc

> Уж тоже помолчали бы.

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

parent From Anonymous (unverified) Wed Mar 27 16:11:05 2024 pencil

Re: Новость про gcc

>Из компиляторов Си кроме gcc и clang и выбирать то нечего

suckless.org/rocks #compilers, здесь есть ещё пара штук. А так да.

parent From Anonymous (unverified) Thu Mar 28 10:13:15 2024 pencil

OpenWatcom

OpenWatcom (v2) ещё есть.

https://open-watcom.github.io/

Я проверял под GNU/Linux x86_64. Рабоает. C и C++ компилирует.

parent From Eduard (unverified) Thu Mar 28 18:55:54 2024 pencil

Re: Re: Новость про gcc

Полезные ссылки. Спасибо, господа.


pencil

пояснение


Вы находитесь на официальном сайте Андрея Викторовича Столярова, автора учебных пособий по программированию и информационным технологиям.

Если вы искали сайт замечательного писателя-фантаста Андрея Михайловича Столярова, то вам, к сожалению, не сюда.

Андрей Михайлович Столяров в библиотеке Мошкова

Авторские права © Андрей Викт. Столяров, 2009 — 2024