Вопросы с тегом '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 в 20: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 в 18:49
10

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

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

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

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

Почему компилятор Rust не оптимизирует код, предполагая, что две изменяемые ссылки не могут иметь псевдоним?

Насколько я знаю, псевдонимы ссылок и указателей могут препятствовать способности компилятора генерировать оптимизированный код, поскольку они должны обеспечивать правильное поведение сгенерированного двоичного файла в случае, когда две ссылки/указат...
29 июл. '19 в 17:57
11

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

Это сообщение получено от запуска скрипта, чтобы проверить, работает ли 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] successfull...
22 дек. '16 в 23:21
3

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

Возможный дубликат: С++: когда волатильный ключевой слово когда-либо помогал вам? Я никогда не использовал его, но мне интересно, почему люди его используют? Что он делает? Я искал форум, я нашел его только на С# или в Java.
14 дек. '10 в 9: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 в 6: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 в 16:59
6

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

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

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

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

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

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

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

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

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

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

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

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