|
tux21
|
|
Посоветуйте C/C++ компилятор под Linux28.04.2008, 23:12. Показов 53729. Ответов 31
Метки нет (Все метки)
Интересует максимальная оптимизация по скорости. Какой выбрать? GCC/Intel/SUN/lcc?/etc? На liberatum.ru ничего не нашел.
|
|
| 28.04.2008, 23:12 | |
|
Ответы с готовыми решениями:
31
подскажите, где можно скачать компилятор для C++ под Linux? Посоветуйте что-то почитать по сокетам в C++ под linux. Компилятор (Visual C++ 6.0) в плохой совместимости с Windows 7. Посоветуйте другой компилятор |
|
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
|
||||
| 18.04.2009, 18:31 | ||||
гсс некоторые вещи можно простить ввиду поддержки в нем многоплатформенности. Когда какой-нибудь, VC++ изначально под вантуз и все в нем под это дело заточено, то gcc явно будет отставать в плане многих конструкций (и то не факт, что всех). Да и в некоторых случаях ненамного. В моей практике мне приходилось сравнивать по скорости конструкции только gcc и intel compiler. Так вот, в некоторых случаях отставал и гсс, и интел компилер. Ну и несколько взглядов мельком на сравнение компилеров показывало, что гсс совсем не на последнем месте. Отсюда делаем вывод, что под линухом спокойно можно юзать gcc. И ничего страшного в этом нет. P. S. правда, его последние версии меня несколько разочаровали. Использую более старые. P. P. S. вот я уже много лет пользуюсь gcc(g++). Иногда Intel C++ Compiler. Скажи, с какими трудностями я должен был столкнуться при его использовании? Есть ли причина, не использовать его больше? Или ее нет? (повторю, что прощаю гсс многое ввиду того, что он несет на себе большой груз кроссплатформенности. за все нужно платить )
0
|
||||
|
|
||||||||
| 18.04.2009, 18:55 | ||||||||
![]() Добавлено через 11 минут 24 секунды У меня дома только gcc-4.2 Известные мне косяки на ней что-то не проявляются. Попробую на работе с более ранними версиями
0
|
||||||||
|
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
|
||||
| 18.04.2009, 18:58 | ||||
Но, я не вижу в этом ничего плохо, так как, код сгенеренный гсс меня вполне во всем устраивает. Ну почти ![]()
Ошибки есть в любом компиляторе. В gcc они, тем более, виднее, он открытый, обо всех багах известно.
И не забываем, что гсс направлен на многоплатформенность.
0
|
||||
|
|
|||||||||||||||||||||||||||||||||||
| 18.04.2009, 19:11 | |||||||||||||||||||||||||||||||||||
|
Приведу немного другой пример. Правда он не очень хороший
Теперь сделаем константу 257 плавающей
Идём дальше, теперь константу предварительно загоним в глобалдьную переменную, чтобы в момент компиляции не было свёртки констант
Добавлено через 4 минуты 43 секунды Способен ли он сам из кода на Си родить mmx - для меня большой вопрос. Хотя если это строить на распознавании некоторых шаблонов, то может быть и строит
0
|
|||||||||||||||||||||||||||||||||||
|
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
|
|||
| 18.04.2009, 19:22 | |||
А глюки были, есть и будут во всех компилерах. Кстати, пример который ты привел мне не показал ничего необычного или неправильного.
0
|
|||
|
|
|||||
| 18.04.2009, 19:39 | |||||
|
В сравнении gcc с другими компиляторами аргументация в пользу того, что gcc "хуже" коммерческих компиляторов было качество генерируемого кода. Собственно для наглядной демонстрации нужно проводить серьёзную исследовательскую работу, поскольку вот так с ходу я тебе пример врядли приведу. Хотя по данному пункту мы с тобой вроде бы как пришли к консенсусу. В любом случае, если что-то попадётся под руку по этому вопросу - кину на форум По поводу "достаточно хорошо сделан" - это вопрос несколько субъективный. Исходники gcc я видел и в них ковырялся. Правда ещё во времена gcc-2.95. Принцип построения компилятора сделан безусловно на высшем уровне - часть их опыта я перенял себе. Что касается качества кода (имею ввиду код самогО компилятора) - всё-таки он хромает и очень сильно. Правда после структурных переделок в gcc-3 и gcc-4 там скорее всего стало всё гораздо лучше. Но опять-таки многоплатформенность как ни крути влечёт за собой кучу затычек в коде Больше аргументации "против" компилятора gcc с моей стороны не было Всё вышесказанное было мной заявлено именно с точки зрения программиста-разработчика по результату 9 лет работы с gcc В широком смысле компилятор gcc конечно же "плохим" назвать нельзя. Хотя бы потому, что им собрано чёрт-те знает сколько всего и под практически все современные платформы. По этому вопросу мы с тобой также единодушны Добавлено через 4 минуты 36 секунд
0
|
|||||
|
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
|
||||
| 18.04.2009, 19:48 | ||||
![]() Но ни разу не сталкивался с тем, чтобы у меня что-то не работало, или работало не так. Я с gcc дрова делаю и ниче. Работают, не слетают, ведут себя предсказуемо. Пример приведенный тобой выше не ошибка. Если дурак сидит за редактором, то он убьет и Intel C++ compiler и любой другой. Абсолютно любой. Поэтому, однозначно, для линукса gcc ![]()
![]() Не читая описание функции, я бы не знал, что printf сможет на терминал строку вывести ) Добавлено через 34 секунды
0
|
||||
|
|
|||||||
| 18.04.2009, 20:13 | |||||||
![]() ![]() Там, где средства языка недоступны (ОС, драфверы, ещё что-то низкоуровневое), ассемблерные вставки безусловно необходимы. Но всё-таки вытягивать поизводительность за счёт ассемблерных вставок - занятие неблагодарное. По многим причинам: во первых надо найти места, где теряется производительность, во вторых, надо аккруатно решить, что будет написано на вставках, а что на языке, в-третьих место состыковки вставки и кода на языке в результате не всегда получается оптимальным, в четвёртых само это дело писать много времени может уйти, в-пятых нужно чётко себе представлять ABI данной архитектуры, чтобы не напортачить и не испортить регистры и т.д. А потому сейчас разработчики компиляторов стараются вытягивать максимум именно с языкового уровня, пусть даже и с pragma'ми. Ну, или как варинт, использование неких строительных кубиков, написанных на ассемблере или сделанных в виде builtin'ов, как в gcc. Тут скорее из разряда "на вкус и цвет". Лично я считаю, что ассемблерных вставок по возможности надо избегать. Если падение производительности за счёт написания на языке терпит, то лучше писать на языке - так надёжнее и на душе спокойнее. Из разряда "ну и пусть пидо$ас, зато живой остался". Т.е. я считаю, что на первом месте безоговорочно должна быть надёжность, а производительность - вопрос второй. Естественно, бывают специфические случаи (типа обработки данных с локатора в режиме реального времени), где нужно выжимать 100% производительности машины. Но если случай не такой, то мне кажется, лучше сделать перекос в сторону надёжности
1
|
|||||||
|
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
|
||||
| 18.04.2009, 20:17 | ||||
![]() Добавлено через 1 минуту 18 секунд
0
|
||||
|
|
|
| 18.04.2009, 23:27 | |
|
Попробую подвести итог
(to tux21) Под линухом всё-таки используй gcc. В местах, критичных на производительность, попробуй переписать код или использовать ассемблерные вставки. Можно попробовать поиграть флагами оптимизаций, но, если нет глубокого понимания, что они делают, то скорее всего в этом месте улучшения производительности ты не получишь. К тому же если возникнут вопросы по gcc, то на форуме ты скорее всего сможешь получить ответ (остальным, кому вопрос может показаться интересной, но в нашу дискуссию вникать было влом) Сошлись во мнениях: - под линухом альтернативы gcc скорее всего нету (по крайней мере среди бесплатного или известного платного) - уровень gcc по надёжности качеству в принципе соотвествует уровню промышленного компилятора и его можно использовать для серьёзных разработок - компилятор универсальный: на нём можно разрабатывать пользовательские приложения, низкоуровневые приложения класса ОС или драйверов, а так же высокопроизводительные коды, правда последнее почти наверняка потребует написания ассемблерных вставок или использования builin'ов, а потому этот вариант условно считаем только для экспертов Не до конца сошлись во мнениях: - производительность полученного кода по отношению к коммерческим компиляторам. Вопрос как исследовательский занимает много времени, а потому каких-то конкретных материалов для подтверждения той или другой точки зрения не имеется - надёжность не всегда на высоком уровне. Здесь я постараюсь привести конкретные примеры. Надо покопаться в истории ошибок Со своей стороны хочу поблагодарить оппонента за аргументированный спор и потречанное на него время. Прсто хотябы потому, что нечасто в наши дни это удаётся, особенно на форуме
0
|
|
|
|
|||||||||||||||||||||||||||||||||||||||||
| 20.04.2009, 22:14 | |||||||||||||||||||||||||||||||||||||||||
Сообщение было отмечено как решение
Решение
Итак, начну с косяками gcc. Возможно не всё сразу, т.к. хочется это дело изложить аккуратно. Свалка с косяками оказалась приличной, но во многих случаях не было подробного описания что да как, а потому некоторые ситуации даже воспроизвести не смог. Отобрал несколько случаев не сильно замороченных и с подобранными короткими примерами. Возможно, что не всё сразу (терпения скорее всего не хватит)
Более того, если мы тождествнно переделаем тест (минус уберём в статическую инициализацию)
Рассмотрим фрагменты кода в "плохом" и "хорошем" случае. Стрелочками отмечу различия "Плохой" случай:
У себя эту ситуацию мы встретили в единичных случаях. Как показывает практика в "обычных" задачах (т.е. обычных прикладных программах) "тяжёлое" преобразование "uint64 -> floatXX" встречается нечасто, однако в счётных задачах типа моделирования физических процессов или каких-нибудь математических расчётов (особенно на фортране) - ситуация встречается сплошь и рядом. Поскольку ошибка присутсвует в компиляторе несколько лет (ибо как минимум это диапазон от "стабильной" версии 3.4.6 до 4.1.3), возможно, что счётными задачами компилятором gcc в мире активно не пользуются. Либо при этом используют какие-нибудь дополнительные опции оптимизации с плавающей арифметикой, при работе с которыми код строится по другому и данная ошибка не проявляется. Мы у себя это дело заткнули и приняли к сведению. Но на поиск ошибки, когда переходили от gcc-2.95.3 на gcc-3.4.6, потратили немало времени Добавлено через 48 минут 17 секунд ======================================== =================== ======================================== =================== ======================================== =================== Аналогично предыдущей, эта ошибка проявляется на gcc-3 и gcc-4 и не проявляется на gcc-2.95
"Правильный" случай
Понятно дело, что такие отличия критичны только для математических расчётов, где требуется высокая точность. Т.е. в обычных прикладных программах мы этой разницы не почуствуем, зато скорость исполнени будет выше, чем при "честных" расчётах. Однако опасность этого дела такая, что когда мы вычисляем "простое" выражение (т.е. одну арифметическую операцию, затем запись результата), то оно вычисляется с "честной" точностью, а когда вычисляем "сложное" выражение (несколько операций, а потом запись результата), то вычисления происходят с "НЕчестной" точностью. В этом месте начинает появляться некоторое отклонение, которое для некоторых алгоритмов при больших данных начинает накапливаться и со временем выливается в ощутимую разницу. Т.е. для программ типа 3d-studio это может очень хорошо стрельнуть Теоретически в компиляторе есть какие-то опции, которые запрещают схлопавание пары плавающих store-load, на практике на коротких примерах вроде бы как работало, а на длинных возникают косяки. Один из косяков оказался принципиальным. Если у нас есть вызов плавающей стандартной функции типа sqrt, то в случае без оптимизаций компилятор оставляет вызов процедуры, а в случае с оптимизациями принудительно заменяет вызов sqrt на __builtin_sqrt, который реализует через аппаратные интеловские операции вычисления корня. Если всё это находится в сложном выражении, то всё равно это делается через float80. В итоге мы так и не смогли побороть проблему (для нас в первую очередь критичным оказалось различное поведение в release'ной и отладочной версии программы). Лечится просто - везде использовать long double. Но для большой программы везде всё поменять, это тоже куча потраченного времени, далее нужно везде менять значения в эталонных тестах - опять-таки огромная поетря времени. Для программ с большими данными это ещё и влечёт за собой увеличение потребления памяти (что для критично задач типа тех, что в реальном времени обрабатывают данные с локаторов). Ну и проблемы при совместном использовании разных компиляторов (которая косвенным образом появляется при использовании другого компилятора но при этом используется glibc, собранная gcc'ями) или же проблемы при переходе с одной версии компилятора на другую. Есть ли какие-то различия между gcc-3 и gcc-4 мы уже смотреть не стали, ибо заткнув всё через float80 уже не стали исследовать вопрос дальше
3
|
|||||||||||||||||||||||||||||||||||||||||
|
13 / 13 / 0
Регистрация: 29.10.2009
Сообщений: 71
|
|
| 06.11.2010, 18:24 | |
|
под линукс intel c compiler бесплатен
0
|
|
| 06.11.2010, 18:24 | |
|
Помогаю со студенческими работами здесь
32
Посоветуйте компилятор для написания программ под Linux знаю только CodeLite
Компилятор C++ под Ubuntu Linux 9.04 Посоветуйте бесплатный C++ компилятор под Windows Посоветуйте, пожалуйста, адекватную графическую библиотеку под Linux Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Сочетание глобально распределённой вычислительной мощности и инновационных. . .
|
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Налог на собак: https:/ / **********/ gallery/ V06K53e
Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf
Пост отсюда. . .
|
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop?
Ниже её машинный перевод.
После долгих разбирательств я наконец-то вернула себе. . .
|
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод
Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод.
Thinkpad X220 Tablet —. . .
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
|
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|