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

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

Почему в отдельных циклах стигментные добавления намного быстрее, чем в комбинированном цикле?

Предположим, что a1, b1, c1 и d1 указывают на память кучи, и мой числовой код имеет следующий основной цикл. const int n = 100000; for (int j = 0; j < n; j++) { a1[j] += b1[j]; c1[j] += d1[j]; } Этот цикл выполняется 10000 раз через др...
17 дек. '11 в 23:40
12 отв.

Почему GCC не оптимизирует a * a * a * a * a * a to (a * a * a) * (a * a * a)?

Я делаю некоторую численную оптимизацию в научном приложении. Я заметил, что GCC оптимизирует вызов pow(a,2), компилируя его в a*a, но вызов pow(a,6) не оптимизирован и фактически вызовет библиотечную функцию pow, что значительно замедляет производи...
21 июня '11 в 21:49
10 отв.

Замена 32-битного счетчика циклов на 64-битные значения приводит к сумасшедшим отклонениям производительности

Я искал самый быстрый способ для больших массивов данных popcount. Я столкнулся с очень странным эффектом: изменение переменной цикла от unsigned до uint64_t привело к снижению производительности на 50% на моем ПК. Контрольный показатель #include...
01 авг. '14 в 13:33
9 отв.

Быстрая бета-версия: сортировка массивов

Я реализовывал алгоритм в Swift Beta и заметил, что производительность была очень плохой. Покопавшись глубже, я понял, что одним из узких мест является нечто такое же простое, как сортировка массивов. Соответствующая часть здесь: let n = 1000000 var...
08 июня '14 в 2:53
3 отв.

Почему мы используем ключевое слово volatile в С++?

Возможный дубликат: С++: когда волатильный ключевой слово когда-либо помогал вам? Я никогда не использовал его, но мне интересно, почему люди его используют? Что он делает? Я искал форум, я нашел его только на С# или в Java.
14 дек. '10 в 12:14
2 отв.

Что такое &&& операция в C

#include <stdio.h> volatile int i; int main() { int c; for (i = 0; i < 3; i++) { c = i &&& i; printf("%d\n", c); } return 0; } Вывод вышеуказанной программы, скомпилированный с помощью...
19 дек. '12 в 9:48
3 отв.

Почему GCC генерирует такую ​​радикально различную сборку для почти того же C-кода?

При написании оптимизированной функции ftol я нашел очень странное поведение в GCC 4.6.1. Позвольте мне сначала показать вам код (для ясности я отметил различия): fast_trunc_one, C: int fast_trunc_one(int i) { int mantissa, exponent, sign, r; ...
20 апр. '12 в 19:59
10 отв.

Как скомпилировать Tensorflow с инструкциями SSE4.2 и AVX?

Это сообщение, полученное от запуска script, чтобы проверить, работает ли Tensorflow: I tensorflow/stream_executor/dso_loader.cc:125] successfully opened CUDA library libcublas.so.8.0 locally I tensorflow/stream_executor/dso_loader.cc:125] successf...
23 дек. '16 в 2:21
6 отв.

Как увидеть, какие флаги -march = native будут активированы?

Я компилирую свое приложение на С++ с помощью GCC 4.3. Вместо того, чтобы вручную выбирать флаги оптимизации, я использую -march=native, который теоретически должен добавить все флаги оптимизации, применимые к аппаратным средствам, которые я компили...
29 марта '11 в 12:14
2 отв.

Пределы типа Nat в Shapeless

В бесформенном, тип Nat представляет собой способ кодирования натуральных чисел на уровне типа. Это используется, например, для списков фиксированного размера. Вы даже можете выполнять вычисления на уровне типа, например. добавьте список элементов N...
23 янв. '14 в 2:15
5 отв.

Почему улучшенный оптимизатор GCC 6 нарушает практический код на С++?

GCC 6 имеет новую функцию оптимизатора: предполагается, что this всегда не является нулевым и оптимизирует на основе этого. Распространение диапазона значений теперь предполагает, что этот указатель функций-членов С++ не равен нулю. Это устраняет...
27 апр. '16 в 17:45
2 отв.

Почему лямбды лучше оптимизируются компилятором, чем простые функции?

В своей книге The C++ Standard Library (Second Edition) Николай Йосуттис утверждает, что lambdas лучше оптимизируется компилятором, чем простые функции. Кроме того, компиляторы С++ оптимизируют lambdas лучше, чем они делают обычные функции. (Стран...
05 дек. '12 в 14:38
3 отв.

Использование этого указателя вызывает странную деоптимизацию в горячем цикле

Недавно я столкнулся с странной деоптимизацией (или, скорее, упущенной возможностью оптимизации). Рассмотрим эту функцию для эффективной распаковки массивов трехбитовых целых чисел в 8-битные целые числа. Он распаковывает 16 ints в каждой итерации ц...
10 окт. '14 в 11:38
11 отв.

Эффективность преждевременного возврата в функции

Это ситуация, с которой я часто встречаюсь как неопытный программист, и мне интересно, в частности, за амбициозный, быстрый проект, который я пытаюсь оптимизировать. Для основных C-подобных языков (C, objC, С++, Java, С# и т.д.) И их обычных компилят...
25 окт. '11 в 7:26
6 отв.

Почему не может (или нет) компилятор оптимизировать предсказуемый цикл добавления в умножение?

Это вопрос, который пришел на ум, когда читал блестящий ответ Mysticial на вопрос: почему быстрее обрабатывать отсортированный массив, чем несортированный массив? Контекст для задействованных типов: const unsigned arraySize = 32768; int data[arrayS...
30 июня '12 в 20:48