Описание тега compiler-optimization

Оптимизация компилятора включает в себя адаптацию компилятора для уменьшения времени выполнения или размера объекта или того и другого. Это может быть выполнено с использованием аргументов компилятора (например, CFLAGS, LDFLAGS), плагинов компилятора (например, DEHYDRA) или прямых модификаций компилятора (например, изменения исходного кода).
3 ответа

Насколько дорого компилятору обрабатывать заголовок с защитой от включения?

Чтобы ускорить компиляцию большого исходного файла, имеет ли смысл сокращать количество заголовков, используемых в модуле перевода, или же затраты на компиляцию кода намного превышают время, необходимое для обработки include-guarded заголовок? Если …
1 ответ

Компиляторы C/C++, такие как GCC, обычно оптимизируют по модулю с постоянной степенью 2?

Допустим, у меня есть что-то вроде: #define SIZE 32 /* ... */ unsigned x; /* ... */ x %= SIZE; Будет ли x % 32 как правило, сводится к x & 31 большинством C/C++ компиляторов, таких как GCC?
1 ответ

Почему мой оптимизированный IL дважды хранит одно и то же значение в переменной save?

Исходный код представляет собой цикл for следующим образом: public class ForLoop { public static void Main() { var count = 0; for (var i = 0; i < 10; i = i++) { count++; } } } Я скомпилировал его с включенной оптимизацией (csc /o+ ForLoop.cs), но…
14 мар '15 в 20:23
3 ответа

Почему лямбды могут быть лучше оптимизированы компилятором, чем обычные функции?

В своей книге The C++ Standard Library (Second Edition) Николай Йосуттис утверждает, что компилятор может лучше оптимизировать лямбда-выражения, чем простые функции. Кроме того, компиляторы C++ оптимизируют лямбда-выражения лучше, чем обычные функци…
4 ответа

Добавление против производительности ORing

Я видел, как люди используют сложение, где побитовое ИЛИ было бы более концептуально подходящим, потому что они считают, что это быстрее. Это правда? Если да, все ли современные компиляторы знают этот трюк?
0 ответов

Может ли C++ const вызывать методы с помощью оптимизатора?

Этот isocpp.org FAQ по константности гласит: (...) давайте уточним, изменяет ли метод логическое состояние объекта. Если вы находитесь за пределами класса - вы обычный пользователь, каждый эксперимент, который вы можете выполнить (каждый метод или …
26 ноя '18 в 22:18
2 ответа

Некоторый указатель на понимание исходного кода GCC

Я учусь на оптимизации GCC для многоядерных процессоров. Я пытался пройтись по исходному коду, это трудно понять, так как мне нужно добавить некоторый код в бэкэнд. Может кто-нибудь предложить какой-нибудь хороший ресурс, который объясняет поток код…
23 мар '10 в 23:21
2 ответа

C++ O3 оптимизация прерывает работу цикла while

У меня есть этот простой код, который ищет файл для "данных" шаг за шагом, используя fseek в wcm файле pcm: FILE * waveFile; waveFile = fopen ( this->fileLocation.c_str ( ), "rb" ); // ... some other code here between, then ... // int seekTo = 0;…
13 май '16 в 11:29
1 ответ

Java: разница между компилятором Java Hotspot и клиентским компилятором

Сегодня, когда я читал о Escape Analysis в JVM от http://docs.oracle.com/javase/7/docs/technotes/guides/vm/performance-enhancements-7.html. В этом они обсуждают Java Hotspot Server Compiler, Я запутался что Server Compiler на Яве. Я был также Google…
30 мар '15 в 09:39
0 ответов

Какие различия между оптимизатором GCC и clang приводят к тому, что этот код не оптимизируется?

Если я скомпилирую следующий код: #include <boost/range/irange.hpp> template<class Integer> auto iota(Integer last) { return boost::irange(0, last); } template<class Integer, class StepSize> auto iota(Integer last, StepSize step_si…
1 ответ

Почему компилятор gcc ведет себя по-разному в этих двух случаях?

У меня есть два одинаковых цикла while, и мне любопытно, почему компилятор C ведет себя по-разному в каждом случае. Подробности: Компилятор: x86-64 gcc 8.2 Опции: -O3 void use() { int* ptr; while (*ptr == 6); } Assembly: use: cmp DWORD PTR ds:0, 6 j…
23 ноя '18 в 11:25
1 ответ

GCC Оптимизирует предложение if, которое нельзя оптимизировать

Я создал небольшой код, показывающий ошибку, с которой я столкнулся #include<stdlib.h> #include<stdio.h> int test(char * flag) { char flagger = *flag; printf("test value %d", (int) flagger); if (flagger != 0x82) { exit(3); } else { retur…
21 фев '17 в 13:23
1 ответ

g++: оптимизация -march=haswell и более новые изменения числовой результат

Я работал над оптимизацией производительности и, конечно, проводил регрессионные тесты, когда заметил, что g++, похоже, меняет результаты в зависимости от выбранной оптимизации. До сих пор я думал, что -O2 -march=[whatever] должны давать одинаковые …
27 июл '17 в 14:10
1 ответ

stdafx.h для всех заголовочных файлов или только для соответствующих

При использовании оптимизированной компиляции Microsoft -stdafx.h - это идея, что все включения должны когда-либо встречаться только в этом файле. Или это просто компиляция интенсивных компонентов? Если придерживаться принципа " все ", смогу ли я до…
04 янв '16 в 22:58
1 ответ

Ошибки valgrind при сборке с встраиванием, сделанные g++5 - ошибка в valgrind или g++5?

Точные версии g++ и valgrind: g++-5 (Ubuntu 5.2.1-23ubuntu1~12.04) 5.2.1 20151031 valgrind-3.7.0 Я не стал вдаваться в то, какой именно флаг делает это (finline-small-functions/findirect-inlining/finline-functions/finline-functions-вызвано-единожды …
1 ответ

Зачем GCC включать оптимизацию в O2/O3, когда он явно говорит, что это замедлит работу программы?

Цитируется по https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html: -falign-этикетки -falign-метки = п Выровняйте все цели ветвления с границей степени двух, пропуская до n байтов, как -falign-functions. Эта опция может легко сделать код медленн…
1 ответ

Существуют ли какие-либо компиляторы / интерпретаторы, которые оптимизируют операции, которые не выполняются на месте?

Я часто наблюдаю подобные ошибки, когда оцениваю работы (и иногда делаю их сам): % any vectorized language, such as MATLAB/Octave/R that supports logical indexing Y = rand(1,10); % random numbers drawn uniformly from the interval [0,1] in a 1x10 vec…
0 ответов

Является ли член временного также временным?

Учитывая функцию как: Foo MakeFoo(const std::string& name); мы могли бы ожидать, что следующее будет построено, предполагая, что конструктор перемещения определен для Fooпотому что RHS является временным: auto foo = MakeFoo("foo 1"); То же самое…
16 апр '18 в 18:58
1 ответ

C++ const оптимизация компилятора

Скажем, у меня есть следующий код: int foo () { int const x = 0; return x; } Разрешено ли компилятору перемещать x в глобальную область? Как насчет следующего сценария? Можно res2 варьироваться в зависимости от оптимизаций? std::set<int const *&g…
23 янв '13 в 01:04
3 ответа

Локализуйте параметры компиляции g++ в коде

Я ищу простой способ локализовать определенные опции компиляции g++ (g++-4.9) для определенных строк кода или, по крайней мере, целевых функций. Я в целом заинтересован, но и конкретно -fast-math, -ffinite-math-only а также -fno-signed-zeros опции. …