Вопросы с тегом «compiler-optimization»

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

13
Как сделать бесконечный пустой цикл, который не будет оптимизирован?
Стандарт C11, по-видимому, подразумевает, что итерационные операторы с постоянными управляющими выражениями не должны быть оптимизированы. Я беру свой совет из этого ответа , который конкретно цитирует раздел 6.8.5 из проекта стандарта: Оператор итерации, управляющее выражение которого не является константным выражением ... может быть реализован реализацией для завершения. В этом ответе …

3
Использование этого указателя вызывает странную деоптимизацию в горячем цикле
Недавно я столкнулся со странной деоптимизацией (точнее, упущенной возможностью оптимизации). Рассмотрим эту функцию для эффективной распаковки массивов 3-битных целых чисел в 8-битные целые числа. На каждой итерации цикла он распаковывает 16 int: void unpack3bit(uint8_t* target, char* source, int size) { while(size > 0){ uint64_t t = *reinterpret_cast<uint64_t*>(source); target[0] = t …

11
Эффективность преждевременного возврата в функцию
Это ситуация, с которой я часто сталкиваюсь как неопытный программист, и меня это интересует, особенно для моего амбициозного, требовательного к скорости проекта, который я пытаюсь оптимизировать. Для основных C-подобных языков (C, objC, C ++, Java, C # и т. Д.) И их обычных компиляторов будут ли эти две функции работать …

3
Уровни оптимизации Clang
На НКУ, руководство объясняет , что -O3, -Osи т.д. переводить с точки зрения аргументов оптимизации конкретных ( -funswitch-loops, -fcompare-elimи т.д.) Я ищу такую ​​же инфу для clang . Я искал в Интернете и в man clangкотором дается только общая информация ( -O2оптимизирует больше -O1, -Osоптимизирует скорость,…), а также посмотрел здесь, …

4
Почему 'd / = d' не генерирует исключение деления на ноль, когда d == 0?
Я не совсем понимаю, почему я не получаю исключение деления на ноль: int d = 0; d /= d; Я ожидал получить деление на нулевое исключение, но вместо этого d == 1. Почему не d /= dгенерирует исключение деления на ноль, когда d == 0?

2
Почему переключатель не оптимизирован так же, как цепочка, если еще в c / c ++?
Следующая реализация square производит серию операторов cmp / je, как я и ожидал от цепочки if: int square(int num) { if (num == 0){ return 0; } else if (num == 1){ return 1; } else if (num == 2){ return 4; } else if (num == 3){ return 9; …

2
Более быстрый тест делимости, чем оператор%?
Я заметил любопытную вещь на моем компьютере. * Рукописный тест делимости значительно быстрее, чем %оператор. Рассмотрим минимальный пример: * AMD Ryzen Threadripper 2990WX, GCC 9.2.0 static int divisible_ui_p(unsigned int m, unsigned int a) { if (m <= a) { if (m == a) { return 1; } return 0; } …

1
Почему GCC агрегирует инициализацию массива в первую очередь с нулями, включая ненулевые элементы?
Почему gcc заполняет весь массив нулями вместо оставшихся 96 целых чисел? Все ненулевые инициализаторы находятся в начале массива. void *sink; void bar() { int a[100]{1,2,3,4}; sink = a; // a escapes the function asm("":::"memory"); // and compiler memory barrier // forces the compiler to materialize a[] in memory instead of …

2
Java 8: Class.getName () замедляет цепочку конкатенации строк
Недавно я столкнулся с проблемой касательно конкатенации строк. Этот тест обобщает это: @OutputTimeUnit(TimeUnit.NANOSECONDS) public class BrokenConcatenationBenchmark { @Benchmark public String slow(Data data) { final Class<? extends Data> clazz = data.clazz; return "class " + clazz.getName(); } @Benchmark public String fast(Data data) { final Class<? extends Data> clazz = data.clazz; final …

2
Мой компилятор игнорировал мой неиспользуемый статический член класса thread_local?
Я хочу сделать некоторую регистрацию потока в моем классе, поэтому я решил добавить проверку для этой thread_localфункции: #include <iostream> #include <thread> class Foo { public: Foo() { std::cout << "Foo()" << std::endl; } ~Foo() { std::cout << "~Foo()" << std::endl; } }; class Bar { public: Bar() { std::cout << …
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.