Перейти к содержанию

    

Kabdim

Свой
  • Публикаций

    618
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный

Информация о Kabdim

  • Звание
    Знающий

Контакты

  • Сайт
    http://
  • ICQ
    0

Информация

  • Город
    Зеленоград

Посетители профиля

4 413 просмотра профиля
  1. ТСу если он решится нужно профилировать свои исходники и искать бутылочное горлышко. Переписывать все не нужно.
  2. Оптимизации просто так не пропадают. На них пишутся юниттесты и если вдруг они перестают работать, то такие изменения как правило даже не попадают в develop. Так что 99,9% не порушатся. Т.к. компилятору дана вся необходимая информация то и на новой платформе она будет оптимизирована близко к оптимальному. Для х86, желательно что бы массив ваших данных был выравнен 128/256 бит и тогда оптимизатор будет использоваться sse автоматом. Имхо это круто один раз написать предельно корректно и на выходе получить хорошо оптимизированный код без необходимости ручной правки. И не будет необходимости писать что-то на асме.
  3. Очень рад что получилось! :) Глаз правда режет одновременно и прагма и выравнивающие поля. От чего-то из них можно и нужно отказаться.
  4. Т.е. вы против того что корректно написанные программы не зависят от опций компиляции, но контраргументы у вас метафоричные.
  5. Не смогу, я из армии приверженцев гнутым компиляторам. :)
  6. Я вас не критикую, и да компилятор может такой код, даже с подсказкой о выравнивании, скомпилировать неоптимально. Но тем обиднее видеть что пример сформулирован не до конца корректно.
  7. И что компилятор, который соответствует платформе и аби размещает вам атомарные переменные в те области где не работает атомарность? Вы общее заявление о том что вы знаете некие общие случаи когда нужно нарушать стандарт аргументируете примерами из узкой области прямо связанной с железом с чем никто и не спорил.
  8. Для этого есть вполне конкретные инструменты, что в С, что в С++. В чем необходимость использовать не их, а полагаться на особенности реализации платформы? Напомню вопрос был про задачи где требуется нарушать, а не кому-то хочется или кто-то не знает как правильно. А что ИАР - это С, а С это ИАР? Я говорил про заметно более ранние времена.
  9. Вы же компилятору не сообщили что они выравнены по слову. Такое объединение по стандарту считается выравненным на 2 байта. Со всеми вытекающими из этого возможностями для оптимизации. Вам стоило обявить так: union AdcFastData { struct { u16 ampU; u16 ampV; u16 ampW; u16 voltH; //UQ0.16 }; u16 raw[4]; uint32_t align_placeholder; // или прагамами для структуры. а для всяких ссе нужно было добавить еще лучше выравнивание };
  10. И да, тут проскакивал аргумент для чего вообще сделана возможность компилировать без оптимизаций. Наверняка это ввели только ради кривых рук. Расскажу тем кто не знает, большие С++ проекты компилируются очень долго. Долго значит часами, а когда компютеры были маленькими могло и днями. В то же время при разработке удобно быстро скомпилировать только что написанное и посмотреть работает оно адекватно или нет. Так было принято еще до изобретения ТДД и кучи бибилиотек для него. Нижние уровни оптимизации нужны именно для ускорения цикла внесение изменений-компиляция-проверка.
  11. Аргументируйте пожалуйста, нарушать правила нужно только в тонком слое прямо связанным с железом. Приведите пожалуйста пример, вне этой области где требуется нарушать правила.
  12. Он как раз по результату выполнения есть, если писать на C/C++, а не на той пурге которую себе воображают на месте этого языка противники оптимизации.
  13. Нашли один баг в странном сочетании совсем юного llvm и gcc как фронтенда (сочетание которое и тогда использовали полтора инвалида, а нынче давно выпилили) и для солидности добавили некорректный пример и пример "я хочу что бы компилятор работал так как я хочу, а не по стандарту". Надули щеки и сделали из этого глубокомысленные выводы. Всё ради публикации за грант. Статья и впрямь забавная, но как аргумент слабая. ЗЫ Они там пишут что всё репортили, но как я не искал их в багтрекере гцц - не нашел.
  14. Я думаю тут стоит начать с "правильного" языка. А С/С++ явно "неправильный" т.к. делает не то о чем "программист" подумал, но не записал в исходнике.