The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Релиз набора компиляторов LLVM 15.0

06.09.2022 19:54

После шести месяцев разработки представлен релиз проекта LLVM 15.0 - GCC-совместимого инструментария (компиляторы, оптимизаторы и генераторы кода), компилирующего программы в промежуточный биткод RISC-подобных виртуальных инструкций (низкоуровневая виртуальная машина с многоуровневой системой оптимизаций). Сгенерированный псевдокод может быть преобразован при помощи JIT-компилятора в машинные инструкции непосредственно в момент выполнения программы.

Основные улучшения в Clang 15.0:

  • Для систем на базе архитектуры x86 добавлен флаг "-fzero-call-used-regs", обеспечивающий обнуление всех использованных в функции регистров CPU перед возвращением управления из функции. Указанная опция позволяет защититься от утечки информации из функций и примерно на 20% сократить число блоков, пригодных для построения ROP-гаджетов (Return-Oriented Programming) в эксплоитах.
  • Реализована рандомизация размещения в памяти структур для кода на языке Си, которая усложняет извлечение данных из структур в случае эксплуатации уязвимостей. Рандомизация включается и выключается при помощи атрибутов randomize_layout и no_randomize_layout, и требует установки затравки (seed) при помощи флага "-frandomize-layout-seed" или "-frandomize-layout-seed-file" для обеспечения повторяемых сборок.
  • Добавлена экспериментальная поддержка Си-подобного языка HLSL (High-Level Shader Language), применяемого для написания шейдеров, начиная с DirectX 9. Поддерживается трансляция шейдеров на языке HLSL в бинарный формат DXIL (DirectX Intermediate Language), поддерживаемый в DirectX 12, а также в формат SPIR-V, применяемый в Vulkan. В дальнейшем планируют реализовать поддержку формата DXBC (DirectX Bytecode), применявшегося в DirectX 9-11. Реализация предоставлена компанией Microsoft и основана на открытом в 2017 году компиляторе DirectX Shader Compiler, созданном на базе LLVM 3.7.
  • Добавлен флаг "-fstrict-flex-arrays=<arg>", при помощи которого можно управлять границами для гибкого элемента-массива в структурах (Flexible Array Members, массив неопределённого размера в конце структуры). При выставлении значения в 0 (по умолчанию) последний элемент структуры с массивом всегда обрабатывается как гибкий массив, 1 - только размеры [], [0] и [1] обрабатываются как гибкий массив, 2 - только размеры [] и [0] обрабатываются как гибкий массив.
  • Добавлен параметр "-Warray-parameter", который предупреждает о переопределении функций с не сочетающимся объявлением аргументов, связанных с массивами фиксированной и переменной длины.
  • Улучшена совместимость с MSVC. Добавлена поддержка "#pragma function" (указывает компилятору генерировать вызов функции, вместо её inline-развёртывания) и "#pragma alloc_text" (определяет имя секции с кодом функции), предоставляемых в MSVC. Добавлена поддержка совместимых с MSVC флагов /JMC и /JMC.
  • Продолжена работа по обеспечению поддержки будущих стандартов C2X и C++23. Для языка Си реализованы: атрибут noreturn, ключевые слова false и true, тип _BitInt(N) для целых чисел заданной разрядности, макросы *_WIDTH, префикс u8 для символов в кодировке UTF-8.

    Для С++ реализованы: слияние модулей, изоляция ABI членов функций, упорядоченная динамическая инициализация нелокальных переменных в модулях, многомерные индексные операторы, auto(x), нелитеральные переменные, goto и метки в функциях, объявленных как constexpr, escape-последовательности с разделителями, именованные escape-символы.

  • Расширены возможности, связанные с поддержкой OpenCL и OpenMP. Добавлена поддержка OpenCL-расширения cl_khr_subgroup_rotate.
  • Для архитектуры x86 добавлена защита от уязвимостей в процессорах, вызванных спекулятивным выполнением инструкций после операций безусловного прямого перехода. Проблема возникает из-за упреждающей обработки инструкций, следующих в памяти сразу за командой перехода (SLS, Straight Line Speculation). Для включения защиты предложена опция "-mharden-sls=[none|all|return|indirect-jmp]".
  • Для платформ с поддержкой расширения SSE2 добавлен тип _Float16, который эмулируется с использованием типа float в случае отсутствия поддержки инструкций AVX512-FP16.
  • Добавлен флаг "-m[no-]rdpru" для управления использованием инструкции RDPRU, поддерживаемой начиная с процессоров AMD Zen2.
  • Добавлен флаг "-mfunction-return=thunk-extern" для защиты от уязвимости RETBLEED, работающей через добавление последовательности инструкций, исключающей вовлечение механизма спекулятивного выполнения для косвенных переходов.

Основные новшества LLVM 15.0:

  • Добавлена поддержка CPU Cortex-M85, архитектур Armv9-A, Armv9.1-A и Armv9.2-A, расширений Armv8.1-M PACBTI-M.
  • Добавлен экспериментальный бэкенд для DirectX, поддерживающий формат DXIL (DirectX Intermediate Language), применяемый для шейдеров DirectX. Бэкенд включается через указание при сборке параметра "-DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=DirectX".
  • В Libc++ продолжена реализация новых возможностей стандартов C++20 и C++2b, в том числе завершена реализация библиотеки "format" и предложен экспериментальный вариант библиотеки "ranges".
  • Улучшены бэкенды для архитектур x86, PowerPC и RISC-V.
  • Расширены возможности компоновщика LLD и отладчика LLDB.


  1. Главная ссылка к новости (https://discourse.llvm.org/t/l...)
  2. OpenNews: Релиз набора компиляторов GCC 12
  3. OpenNews: Проект LLVM переходит со списков рассылки на платформу Discourse
  4. OpenNews: Первый стабильный релиз компоновщика Mold, развиваемого разработчиком LLVM lld
  5. OpenNews: Microsoft открыл код DirectX Shader Compiler
  6. OpenNews: Проект LLVM представил HPVM 1.0, компилятор для CPU, GPU, FPGA и ускорителей
Лицензия: CC-BY
Тип: Программы
Короткая ссылка: https://opennet.ru/57739-llvm
Ключевые слова: llvm, clang, compile
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (111) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Анонн (?), 23:34, 06/09/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +5 +/
    Отличная новость! Крутой прогресс за полгода.
     
     
  • 2.34, Xenia Joness (ok), 12:05, 07/09/2022 [^] [^^] [^^^] [ответить]  
  • –16 +/
    > Отличная новость! Крутой прогресс за полгода.

    Плюсую. За LLVM будущее, и скоро, надеюсь, выкинут наконец-то этот GCC на свалку истории

     
     
  • 3.42, Аноним (42), 12:39, 07/09/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Чем он вам так насолил?
     
     
  • 4.44, Аноним (44), 12:42, 07/09/2022 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Да она и про LLVM-то только название и слышала.
     
  • 4.55, Анонн (?), 15:51, 07/09/2022 [^] [^^] [^^^] [ответить]  
  • –3 +/
    Да куча недостатков:
    - GNU C Language Extensions - здоровенный костыль поддержанный (изначально) только в одном компиляторе и как следствие невозможность сборки ядра другими. Прямо extend в стиле microsoft'а.
    - здоровенный монолит - максимальная связность и сложность расширения
    - отстойная огороженная лицензия
     
     
  • 5.65, аНОНИМ (?), 18:24, 07/09/2022 [^] [^^] [^^^] [ответить]  
  • +4 +/
    FSF при помощи прежде всего GCC начал менять мир годах в 80ых и продолжает менять до сих пор и результатами этого пользуются все без исключения люди, даже если они не догадываются об этом.

    У шланга кол-во поддерживаемых архитектур примерно на порядок (десятичный) меньше чем у GCC.

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

     
     
  • 6.66, Аноним (66), 18:41, 07/09/2022 [^] [^^] [^^^] [ответить]  
  • +/
    > У шланга кол-во поддерживаемых архитектур

    А знаешь почему? Потому что они на момент создания llvm никому нафиг не вс@лись!
    Это куча всякого хлама который можно найти только в музеях, а выпилить из gcc не решаются, потому что "а вдруг что-то сломаем по дороге".
    Хотя все даже круче - gcc поддерживает бекенды для архитектур, которые никогда не были реализованы в железе - секция M в https://gcc.gnu.org/backends.html.

     
     
  • 7.71, срыватель_покровов (?), 00:22, 08/09/2022 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Зачем ты рассказываешь о том, в чём ничего не понимаешь? Как же так - гцц подлый монолит не расширяемый, а он поддерживает множество архитектур?

    >выпилить из gcc не решаются, потому что "а вдруг что-то сломаем по дороге".

    Зачем домохозяйка пытается рассуждать о коде? Как раз таки всё наоборот.

    >бекенды для архитектур, которые никогда не были реализованы в железе

    wasm в желе покажешь?

     
  • 6.102, Neon (??), 17:24, 09/09/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Лицензия GPL -- лучшая лицензия для открытого софта, а ненавидят её только проприерасты

    Просто не все живут на мамкиной шее. И идеалами сыт не будешь.

     
  • 6.120, Тот_Самый_Анонимус (?), 06:16, 14/09/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Одни лозунги. А по факту — единоличное создание своего диалекта си (в стиле майкрософта). И ни один поборник стандартов не вякнет: ведь этим свои занимаются. Вот если бы майки это сделали, то вони бы стояло на сотню комментов.
     
  • 5.70, срыватель_покровов (?), 00:15, 08/09/2022 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Смотри, жертва пропаганды.

    - Кроме gnuc другого си нет. Никто не будет ничего писать на этом днище. И да - шланг это именно что gnuc/cpp компилятор. Как и сам драйвер там 1в1 повторяет гцц. И да, свободный код не может быть вендорлоком.

    - Пустые сказки от домохозяек. Мне даже лень спорить на эту тему - пруфы ты всё равно не покажешь.

    - Лицензия наиболее свободная. Единственное что у гцц есть из проблем - это во многом столман-шиза древняя о том, что cpp-фронт будут воровать.

     
     
  • 6.80, Аноним (66), 12:04, 08/09/2022 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Гнус это всего лишь жалкая надстройка над си, которую добавили ядрописатели - просто не шмогли в стандарт (ну или вынуждены были добавить, потому что стандарт отстой). Такая же огороженная надстройка как "Microsoft extensions to C", которую добавили майки MSVC. И такой же вендорлок.

    > Лицензия наиболее свободная

    Ну да, ну да, "свобода это рабство".
    Свободные лицензии - это MIT, BSD, MPL, CCA и аналогичные. А ваша GPL - открытая, но не свободная.

     
     
  • 7.91, Аноним (91), 00:03, 09/09/2022 [^] [^^] [^^^] [ответить]  
  • +/
    GPL - не свободный, потому что ограничивает твою "свободу воровать"?
     
     
  • 8.103, Neon (??), 17:31, 09/09/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Свобода зарабатывать - это свобода воровать Чтобы заработать, предлагаете с н... текст свёрнут, показать
     
     
  • 9.109, Аноним (109), 09:38, 10/09/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Хорошо сидеть на шее у сообщества, используя его инструменты, изображать из себя... текст свёрнут, показать
     
  • 8.115, Аноним (-), 01:11, 11/09/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Как можно украсть то, что принадлежит всему миру и отдано в безвозмездное пользо... текст свёрнут, показать
     
  • 7.94, срыватель_покровов (?), 02:03, 09/09/2022 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Да ты чё Зачем ты, домохозяйка, о чём-то пытаешься рассуждать gnuc это и есть ... большой текст свёрнут, показать
     
  • 4.56, Анонн (?), 15:54, 07/09/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    С другой стороны нужно быть благодарным им за это все - иначе какой смысл было бы создавать llvm.
     
  • 2.107, adolfus (ok), 20:51, 09/09/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Не очень понятно, зачем нужно фиксировать промежуточный результат в виде объектн... большой текст свёрнут, показать
     
     
  • 3.113, iZEN (ok), 14:46, 10/09/2022 [^] [^^] [^^^] [ответить]  
  • +/
    NIH-синдром на Java JIT: нужно реализовать то, что было реализовано 20 лет назад, но на новом технологическом уровне, с задействованием в 100 раз большей процессорной мощности и  в 1000 раз большей потребной памяти.
     

  • 1.2, Аноним (2), 23:39, 06/09/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    >Добавлена экспериментальная поддержка Си-подобного языка HLSL (High-Level Shader Language), применяемого в DirectX для написания шейдеров.

    Вайн задействует?

     
     
  • 2.5, Аноним (2), 23:45, 06/09/2022 [^] [^^] [^^^] [ответить]  
  • +/
    https://github.com/microsoft/DirectXShaderCompiler - просто аттракцион невиданной щедрости какой-то
     
     
  • 3.35, Аноним (-), 12:05, 07/09/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Видимо на DX все забили при наличии вулкана, вот и раздобрились...
     

  • 1.3, Аноним (3), 23:39, 06/09/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Ждём обновления ldc для dlang.
     
  • 1.4, lucentcode (ok), 23:39, 06/09/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    А про ассемблер llvm-mc ничего не слышно? Он совместим с gas, но весьма ограниченно. .S файлы сформированные с помощью llvm с помощью gas собираются на ура, а вот файлы созданные для gas не в 100% случаев собираются llvm-mc, что навевает на мысль, что ассемблер из проекта llvm не на 100% совместим с gas. Хотя, если писать на ассемблере с учётом небольших нюансов, можно использовать одни и те же файлы и под gas, и под llvm-mc.
     
     
  • 2.6, Аноним (6), 04:16, 07/09/2022 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Мне вот надо чтобы clang на инлайн асме, с интел синтаксисом на использовании offset не крашился.
     
     
  • 3.17, Брат Анон (ok), 09:01, 07/09/2022 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Интел-стайл контр-интуитивен. Особенно при косвенной адресации. Закопать.
     
     
  • 4.19, Аноним (19), 09:30, 07/09/2022 [^] [^^] [^^^] [ответить]  
  • –2 +/
    AT&T-синтаксис просто ужасен и для набор и для чтения. Его вообще не должно быть нигде от слова ВАЩЕСОВСЕМ.
     
     
  • 5.26, Аноним (26), 10:29, 07/09/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    У тебя синдром утёнка.
     
     
  • 6.30, Аноним (30), 11:09, 07/09/2022 [^] [^^] [^^^] [ответить]  
  • +8 +/
    У тебя Даннинг-Крюгер.
     
  • 5.68, lucentcode (ok), 21:01, 07/09/2022 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Не, норм Не привычно после TASM MASM Fasm Nasm RosAsm и что там ещё юзал в моло... большой текст свёрнут, показать
     
     
  • 6.83, Аноним (83), 13:27, 08/09/2022 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Правда Как там в AT T записывается eax ecx В Intel mov eax, ecx И поэтому ... большой текст свёрнут, показать
     
     
  • 7.112, lucentcode (ok), 13:13, 10/09/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Когда вы чему-то присваиваете какое-то значение с помощью команды mov move по су... большой текст свёрнут, показать
     
  • 5.69, Ванёк (?), 21:54, 07/09/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Да пофиг на синтаксис. Ассемблер очень мало, когда реально нужен, если только вы не занимаетесь дизассемблированием))
     
     
  • 6.76, Аноним (76), 10:53, 08/09/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Чувство прекрасного против.
     
  • 5.86, Брат Анон (ok), 13:45, 08/09/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > AT&T-синтаксис просто ужасен и для набор и для чтения. Его вообще не
    > должно быть нигде от слова ВАЩЕСОВСЕМ.

    Уж точно лучше, чем интелловский. Если этот не должен существовать, тогда всех интелловцев вообще надо сжечь (не призывы к терроризму, не разжигание социальной ненависти).

     
  • 4.25, n00by (ok), 10:10, 07/09/2022 [^] [^^] [^^^] [ответить]  
  • +/
    > Интел-стайл контр-интуитивен. Особенно при косвенной адресации. Закопать.

    Интел не регламентирует синтаксис. offset - это Microsoft. Есть синтаксисы (Borland ideal, fasm), где приняты [] как и в Си.

     
  • 4.47, Аноним (44), 12:51, 07/09/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Ага, а когда присваеваемое слева, а куда присваивают справа - нонсенс же.
     
  • 3.59, Ванёк (?), 17:19, 07/09/2022 [^] [^^] [^^^] [ответить]  
  • –2 +/
    А на неинтел синтаксисе всё норм?
     
     
  • 4.87, Брат Анон (ok), 13:48, 08/09/2022 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > А на неинтел синтаксисе всё норм?

    Не всё. Но интел существенно хуже.
    mov eax, ebx -- попробуйте здесь догадаться откуда куда тут передаётся содержимое? Вы книгу также зигзагом читаете? Это я ещё режимов адресации не касался.

     
     
  • 5.90, Ванёк (?), 18:33, 08/09/2022 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Смесь английского с ивритом???
     
  • 2.100, Ванёк (?), 13:25, 09/09/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Народ, подскажите, пожалуйста, хороший транслятор из одного синтаксиса Ассемблера в другой.
     
     
  • 3.101, Ванёк (?), 13:29, 09/09/2022 [^] [^^] [^^^] [ответить]  
  • +/
    GAS это умеет?
     

  • 1.7, ИмяХ (?), 07:39, 07/09/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    >>обнуление всех использованных в функции регистров CPU перед возвращением управления

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

    чтобы поломать всю арифметику указателей

     
     
  • 2.8, Аноним (8), 08:01, 07/09/2022 [^] [^^] [^^^] [ответить]  
  • +5 +/
    Арифметика указателей для перехода между глобальными структурами - UB. Если в вашем коде есть такая работа с указателями, то вы ССЗБ
     
     
  • 3.24, EULA (?), 10:05, 07/09/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Нельзя быть не толерантным к злобным буратинам.
     
     
  • 4.31, Аноним (30), 11:13, 07/09/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Надо быть толерантными ко всем буратинам, но злобных сажать в тюрьму, но делать это толерантно.
     
  • 2.9, Sw00p aka Jerom (?), 08:22, 07/09/2022 [^] [^^] [^^^] [ответить]  
  • +/
    >чтобы поломать всю арифметику указателей

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

     
  • 2.16, Бывалый смузихлёб (?), 08:56, 07/09/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Несколько команд снизят производительность в несколько раз ?
     
     
  • 3.18, Брат Анон (ok), 09:03, 07/09/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Не несколько команд. Регистров не несколько. Но в 2 раза вполне может. С учётом относительно медленной оперативной памяти не так страшно, но размер программ вырастает, кеш используется менее эффективно.
     
     
  • 4.23, Бывалый смузихлёб (?), 09:57, 07/09/2022 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Даже будучи смузихлёбом смутно припоминаю, что были команды для сохранения всех регистров в стеке-восстановления всех регистров из стека
    Вроде popad-pushad. Что-то подобное, вроде бы, даже под 64 бита было( pushfq ? )
     
     
  • 5.29, n00by (ok), 10:51, 07/09/2022 [^] [^^] [^^^] [ответить]  
  • –2 +/
    PUSHF (опкод 9D) сохраняет регистр флагов (F). В 64-х разрядном режиме тот же опкод называется PUSHFQ и сохраняет расширенный регистр флагов RFLAGS. POPA довольно медленная, вместо неё рекомендовалось использовать серию POP или MOV. В 64-х разрядном режиме её убрали. Но сохранять-восстанавливать регистры как раз не надо (это упростило бы создание ROP-цепочек), обнулять быстрее (нет работы с памятью).
     
  • 5.85, Брат Анон (ok), 13:43, 08/09/2022 [^] [^^] [^^^] [ответить]  
  • +/
    > Даже будучи смузихлёбом смутно припоминаю, что были команды для сохранения всех регистров
    > в стеке-восстановления всех регистров из стека
    > Вроде popad-pushad. Что-то подобное, вроде бы, даже под 64 бита было( pushfq
    > ? )

    Вы новость читали? При чём тут сохранение на стеке, если речь в статье шла про возможность утечки данных по остаточным данным в регистрах?

     
  • 5.88, Аноним (83), 13:57, 08/09/2022 [^] [^^] [^^^] [ответить]  
  • +/
    >Вроде popad-pushad

    Эти команды чудовищно медленные и в тактах выигрыша не будет, только в объёме кода, плюс нужно завершить все спекулятивные операции. Там ещё есть команды для сохранения FPU/SSE и это уже настолько большая боль, что ОС старается по возможности его не сохранять даже при переключении процессов/потоков.
    >pushfq

    Это инструкция сохранения 64-битного регистра флагов. Инструкций сохранения всех регистров на архитектуре  x86-64 совсем нет. Даже тех, что были на x86-32 вроде pusha, pushad, опкод 0x60 просто пуст.

     
  • 4.28, n00by (ok), 10:37, 07/09/2022 [^] [^^] [^^^] [ответить]  
  • –3 +/
    > Не несколько команд. Регистров не несколько. Но в 2 раза вполне может.

    Медленный Silvermont исполняет 2 (две) XOR за такт. CALL - 1-2 такта. RET - 1 такт. Так что прежде чем писать что-то с аватаркой Ленина, хорошо бы последовать его примеру и три раза поучиться арифметике.

     
     
  • 5.84, Брат Анон (ok), 13:42, 08/09/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    >> Не несколько команд. Регистров не несколько. Но в 2 раза вполне может.
    > Медленный Silvermont исполняет 2 (две) XOR за такт. CALL - 1-2 такта.
    > RET - 1 такт. Так что прежде чем писать что-то с
    > аватаркой Ленина, хорошо бы последовать его примеру и три раза поучиться
    > арифметике.

    Это же две команды? И сколько их нужно всего? И на сколько при этом упадёт эффективность кеша?

     
     
  • 6.89, n00by (ok), 14:49, 08/09/2022 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Что тут нужно, так это доказать утверждение 171 снижение производительности в ... большой текст свёрнут, показать
     
  • 3.27, n00by (ok), 10:33, 07/09/2022 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > Несколько команд снизят производительность в несколько раз ?

    Там типичный эксперт. А вот талмуд:



    Table 2-3. Skylake Microarchitecture Execution Units and Representative Instructions
    Execution  # of   Instructions
    Unit        Unit

    ALU         4     add, and, cmp, or, test, xor, movzx, movsx, mov, (v)movdqu, (v)movdqa, (v)movap*, (v)movup*



    Для обнуления используется XOR, в наличии 4 исполнительных устройства (то есть могут исполняться параллельно).

     
     
  • 4.37, Аноним (-), 12:08, 07/09/2022 [^] [^^] [^^^] [ответить]  
  • +2 +/
    А вот красавец который кроме wintel себе ничего представить не может и потому считает что талмуд на скайлэйк это универсальный ответ на все вопросы вселенной.
     
     
  • 5.43, n00by (ok), 12:39, 07/09/2022 [^] [^^] [^^^] [ответить]  
  • +/
    А ещё я имею представление, сколько примерно команд находится в теле средней подпрограммы и прикинуть отношение их количества к количеству команд обнуления. Но при этом догадываюсь, что это слишком сложная для некоторых Анонимов арифметика, потому ограничиваюсь наглядным частным случаем.
     
     
  • 6.49, Аноним (49), 12:53, 07/09/2022 [^] [^^] [^^^] [ответить]  
  • +/
    А что такое средняя подпрограмма? Это типа средней температуры по больнице? :)
     
     
  • 7.51, n00by (ok), 13:03, 07/09/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Это та цифра, которую эксперты подставят в известную им формулу и наконец-то докажут тезис «снижение производительности в несколько раз». ;)
     
  • 4.63, аНОНИМ (?), 18:20, 07/09/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Вы все тут эксперды. По факту нормальный OoO процессор, видя XOR reg,reg -- ничего не выполняет вообще и такая команда пропадает на этапе шедулинга, в конвееры АЛУ не идёт. Вместо этого, этот регистр просто размапливается в таблице соответствия между архитектурными и физическими регистрами.
     
     
  • 5.72, срыватель_покровов (?), 00:29, 08/09/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Молодец, единственный кто осилил прочитать мануал. Это удивительно - особенно на фоне всех клоунов выше. Правда всё остальное, кроме самого факта существования мапинга - чушь. На "алу" шедулит шедулер, который работает уже с физическими регистрами. Но то ладно.

    Важно то, что никому нахрен не упёрся факт исполнения. Если говорить про такое днище как х86, то уже тысячи лет оно упирается во фронтенд. А что-то исполняется/нет это не влияет на производительность - если только на энергопотребление.

     
     
  • 6.82, n00by (ok), 13:13, 08/09/2022 [^] [^^] [^^^] [ответить]  
  • +/
    > Если говорить про
    > такое днище как х86, то уже тысячи лет оно упирается во
    > фронтенд.

    По факту CodeAnalyst закопали всего лет десять назад, а без симуляции конвейера кто  ̶п̶е̶р̶в̶ы̶й̶ ̶н̶а̶д̶е̶л̶ ̶х̶а̶л̶а̶т̶ ̶т̶о̶т̶ ̶и̶ ̶п̶с̶и̶х̶и̶а̶т̶р̶  громче всех крикнет «клоуны» то и прав. Так что знайте на будущее: х86 это 16-ти разрядная архитектура, кто скажет иначе - тот не видел у мануала даже название.

     
     
  • 7.95, срыватель_покровов (?), 02:05, 09/09/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Ты выше опозорился и пришёл сюда плакаться? Какая архитектура, какой CodeAnalyst, какой "16-ти разрядная"? Ты от позора решил просто рандомные базворды из гугла пастить?
     
     
  • 8.97, n00by (ok), 11:01, 09/09/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Это что, выпуск экстерном нового актива 171 центра псих операций 187 Мануал... текст свёрнут, показать
     
  • 5.81, n00by (ok), 13:04, 08/09/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Вы слишком рано ответили Такие умозаключения разбиваются железным аргументом ... большой текст свёрнут, показать
     
  • 3.41, Ванёк (?), 12:37, 07/09/2022 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Если небольшая функция, и она активно используется, и компилятор её не встроил (inline), то может и в несколько раз...
     
     
  • 4.45, n00by (ok), 12:44, 07/09/2022 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Готовы показать пример такой функции?
     
  • 2.21, Аноним (21), 09:35, 07/09/2022 [^] [^^] [^^^] [ответить]  
  • +/
    >>>рандомизация размещения в памяти структур
    > чтобы поломать всю арифметику указателей

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

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

     
     
  • 3.92, Аноним (92), 01:18, 09/09/2022 [^] [^^] [^^^] [ответить]  
  • +/
    > Если кто-то ходит по структуре по хардкоженым оффсетам, то где-то ошибка на этапе дизайна.

    Есть вполне себе легальный offsetof.

     

  • 1.10, Аноним (10), 08:25, 07/09/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > установки затравки

    What is it, затравка?
    Начальное значение?
    А как быть с повторяемостью сборки?
    Как быть если эту "затравку" узнает тот, кому бы знать ее не надо?

     
     
  • 2.11, Аноним (10), 08:36, 07/09/2022 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Нашел:
    The support can be enabled via the "-frandomize-layout-seed=" or "-frandomize-layout-seed-file=" options for providing the deterministic random seed for allowing reproducible builds.
     

  • 1.14, mumu (ok), 08:44, 07/09/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +6 +/
    > C++23. реализованы ключевые слова false и true

    Грандиозно отметили 50-тилетие языка

     
     
  • 2.20, 1 (??), 09:31, 07/09/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Ну и в чём прикол ? Наезжали всегда на паскалистов за их begin end. Ну были 0 и 1. Эстеты их превращали дефайном в false и true.
     
     
  • 3.33, mumu (ok), 12:02, 07/09/2022 [^] [^^] [^^^] [ответить]  
  • +/
    В привидении типов. Нельзя понять 1 это bool или int.
     
     
  • 4.75, Sw00p aka Jerom (?), 07:46, 08/09/2022 [^] [^^] [^^^] [ответить]  
  • –1 +/
    пример?
     
  • 3.48, Аноним (49), 12:52, 07/09/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Дефайн видите ли не меняет определенную математику. Bool does, там есть определенные гарантии поведения. Даже в случаях когда integer'у под ним присваивают (по крайней мере, пытаются) иные значения.
     
  • 2.22, Аноним (19), 09:36, 07/09/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Давно уже пора довести до нормального состояния, чтобы всякие студенты не писали пародии на С++
     
  • 2.36, Аноним (36), 12:07, 07/09/2022 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Вы пишите:
    >>> C++23. реализованы ключевые слова false и true <<<

    В тексте написано:
    >>> Для языка Си реализованы: ... ключевые слова false и true ... <<<

    При чем тут C++23?🤦

     
     
  • 3.38, mumu (ok), 12:10, 07/09/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Да, писал конечно про C2X, при форматировании не ту часть удалил
     

  • 1.32, Аноним (32), 11:58, 07/09/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +3 +/
    Единственная функция LLVM — чтобы GCC не спал, но это тоже полезно.
     
     
  • 2.39, Аноним (26), 12:14, 07/09/2022 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Ты не в теме, Ллвм используется примерно во всех проприетарных компиляторах всего последние лет 15 уже так точно. Шейдеры, куда, жит, фортран. Гцц вечно в догоняющих. Но, что касается си и частично плюсов, у гцц до сих пор получается ощутимо более эффективный код (особенно, при задействовании пго). Не понимаю этого нездорового вендузячьего желания собирать всё шлангом, из того что я видел, майкрософтовский компилятор хоть и отставал по возможностям на десятилетия, но генерировал код не хуже шланга. Реальная его проблема это совершенно неосмысленные сообщения об ошибках.
     
     
  • 3.46, Аноним (44), 12:47, 07/09/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    >Ллвм используется примерно во всех проприетарных компиляторах всего последние лет 15 уже так точно

    Ну и кто теперь и дальше будет утверждать, что LLVM не проприетарщина?

     
  • 3.52, Аноним (52), 13:09, 07/09/2022 [^] [^^] [^^^] [ответить]  
  • –1 +/
    А я вот понимаю ein сompiler - не нужно держать ворох повторяющихся компиляторо... большой текст свёрнут, показать
     
  • 3.54, Анонн (?), 15:44, 07/09/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Ну и существенно проще добавлять поддержку новых архитектур или языков по сравнению с гэцц.
    Дописал бек или фронт, в зависимости от того что добавляешь, и у тебя готовый инструмент со всем фишками и оптимизациями.
     
     
  • 4.57, Ванёк (?), 17:06, 07/09/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    В GCC как-то иначе?
     
     
  • 5.64, Аноним (66), 18:22, 07/09/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Принципиально - нет Но если начать разбираться, то нюансов море GCC намного бо... большой текст свёрнут, показать
     
     
  • 6.74, срыватель_покровов (?), 00:44, 08/09/2022 Скрыто модератором
  • –3 +/
     
  • 3.73, срыватель_покровов (?), 00:38, 08/09/2022 Скрыто модератором
  • +/
     
     
  • 4.77, Аноним (76), 10:55, 08/09/2022 Скрыто модератором
  • +/
     
  • 4.78, Аноним (26), 11:04, 08/09/2022 Скрыто модератором
  • +/
     
  • 3.105, Аноним (105), 20:09, 09/09/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Не понимаю этого нездорового вендузячьего желания собирать всё шлангом

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

    > майкрософтовский компилятор хоть и отставал по возможностям на десятилетия, но генерировал код не хуже шланга

    Если майкрософтовский компилятор сгенерировал код не хуже шланга, то вам просто повезло. Примеров наподобие https://godbolt.org/z/orMv61YjE можно найти/придумать немало.

     

  • 1.40, Аноним (40), 12:19, 07/09/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    уже 2022, а они только с++20 допиливают. хаха
     
     
  • 2.50, Roman (??), 12:54, 07/09/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Уже время вам присоединится и показать миру как надо "пилить"
     
     
  • 3.99, Аноним (99), 12:59, 09/09/2022 [^] [^^] [^^^] [ответить]  
  • +/
    К какому "миру"?
     
  • 2.53, Аноним (36), 13:42, 07/09/2022 [^] [^^] [^^^] [ответить]  
  • +/
    А теперь представьте, что надо написать свой собственный компилятор языка с++ (с++23) вообще с нуля!:)
     
     
  • 3.104, Neon (??), 17:47, 09/09/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Значит, что то давно не так в С++ королевстве. И развитие его идет в какую то не ту сторону.
     
     
  • 4.110, Аноним (36), 10:30, 10/09/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Да, у С++, впрочем как и у любого другого языка есть проблемы, но утверждать, что его развитие идет не в ту сторону, - я бы точно не стал!
     

  • 1.58, Ванёк (?), 17:10, 07/09/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Как оно по производительности генерируемого кода по сравнению с GCC, ICC, MSVC, в том числе с использованием PGO? Кто-нибудь знает?
     
     
  • 2.79, Аноним (79), 11:22, 08/09/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Без оптимизаций - влёт,а так жсс рулит,но это было с год назад,а то и больше.
     
  • 2.93, Аноним (92), 01:29, 09/09/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Про PGO не скажу, но на обычной компиляции clang и gcc где-то рядом - в одних случаях один лучше, в других - другой. icc сдох (Intel перешел на clang со своим бекендом, называется icx), и и clang, и gcc его уже давно обставили. Единственная его "киллер-фича" - это автоматический runtime dispatch в зависимости от наборов инструкций, поддерживаемых CPU. А MSVC - это хрень, а не компилятор. На типовом коде еще куда ни шло, и то - иногда умудряется генерировать некорректный код. Но как только начинаешь использовать векторные расширения - это дно.
     
     
  • 3.96, срыватель_покровов (?), 02:15, 09/09/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    clang в хламину сливает gcc. Обычно однорукие бандиты даже замерить нормально код не могут(допустим не знают про libcxx и llvm-рантайм для цпп). Так же шланг имеет более агрессивные умолчания нежели гцц, а так же там много всяких подложных фейковых оптимизаций.

    >Единственная его "киллер-фича" - это автоматический runtime dispatch в зависимости от наборов инструкций, поддерживаемых CPU.

    Это базовая фича gcc/gnuc ну и шланга как альтернативной реализации gcc/gnuc. Фича у интел-компилятора в другом. Она такая же как и в случае с шлангом и его фейковыми оптимизациями. Он создан специально чтобы заменять код вчерашнего мойщика полов на нормальный. Если же код пишет не мойщик полов все эти кулл-оптимизации нахрен ненужны.


    Из таких примеров простых. Боты-поломои в основном пастят шаблоннный мусор. Всякие for i j и прочий мусор. Вот icc умел детектировать этот мусор и заменять его на нормальные реализации. Допустим какое-нибудь умножение матриц и прочее.

    Точно так же как gcc/clang умеют детектировать memcpy.

     
     
  • 4.108, Аноним (108), 03:14, 10/09/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    >> Единственная его "киллер-фича" - это автоматический runtime dispatch в зависимости от наборов инструкций, поддерживаемых CPU.
    >
    > Это базовая фича gcc/gnuc ну и шланга как альтернативной реализации gcc/gnuc.

    Нет в gcc такой фичи. Есть ручное клонирование и маркировка функций для разных наборов инструкций.

    https://gcc.gnu.org/wiki/FunctionMultiVersioning

    А icc мог сам сгенерировать клоны (или даже вынести часть функции в клоны) и dispatch из простого кода.

     
     
  • 5.111, Ванёк (?), 13:13, 10/09/2022 [^] [^^] [^^^] [ответить]  
  • +/
    То же самое можно сделать в любом компиляторе с помощью #ifdef __инструкции__ (__SSE2__,__AVX2__ и т.п.)
     
     
  • 6.118, Аноним (118), 02:13, 12/09/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Вопрос на засыпку: в чем разница между директивами препроцессора и runtime dispatch?
     
     
  • 7.119, Ванёк (?), 14:35, 12/09/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Если прямо действительно необходимо runtime dispatch, то помимо директив препроцессора есть cpuid. Комбинация cpuid и директив - более гибко, контролируемо и более-менее универсально для любого компилятора.
     

  • 1.114, Аноним (-), 19:11, 10/09/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Не используйте LLVM, он нужен пермиссивщикам и проприетарщикам.
     
     
  • 2.116, Аноним (-), 01:16, 11/09/2022 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Не используйте GNU/GPL, он нужен пермиссивщикам и проприетарщикам.
    Пофиксил, не благодари.
    Кстати, а почему оракул не хочет гест аддишанс шайтан коробки в бсди положить, а вон мс скуль в пингвине крутится? Какая-то несвободная свобода. Не?
     

  • 1.117, anonima (?), 10:59, 11/09/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > В Libc++ продолжена реализация новых возможностей стандартов C++20 и C++2b, в том числе завершена реализация библиотеки "format" и предложен экспериментальный вариант библиотеки "ranges".

    Джва года ждал.

     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Спонсоры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2022 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру