Вопросы с тегом «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 раз через другой внешний forцикл. Чтобы ускорить …

12
Почему GCC не оптимизирует a * a * a * a * a * a до (a * a * a) * (a * a * a)?
Я делаю некоторую числовую оптимизацию для научного приложения. Одна вещь, которую я заметил, заключается в том, что GCC оптимизирует вызов pow(a,2), компилируя его a*a, но вызов pow(a,6)не оптимизируется и фактически вызовет библиотечную функцию pow, что значительно снижает производительность. (В отличие от этого , исполняемый файл компилятора Intel C ++icc исключает …

10
Замена 32-разрядного счетчика циклов на 64-разрядный вводит сумасшедшие отклонения производительности с _mm_popcnt_u64 на процессорах Intel
Я искал самый быстрый способ для popcountбольших массивов данных. Я обнаружил очень странное действие: Изменение переменного цикла из unsignedк uint64_tвысказанному падению производительности на 50% по сравнению с ПК. Бенчмарк #include <iostream> #include <chrono> #include <x86intrin.h> int main(int argc, char* argv[]) { using namespace std; if (argc != 2) { cerr …

9
Быстрая бета-версия: сортировка массивов
Я реализовывал алгоритм в Swift Beta и заметил, что производительность была очень плохой. Покопавшись глубже, я понял, что одним из узких мест является нечто такое же простое, как сортировка массивов. Соответствующая часть здесь: let n = 1000000 var x = [Int](repeating: 0, count: n) for i in 0..<n { x[i] …

6
Почему GCC генерирует код на 15-20% быстрее, если я оптимизирую размер вместо скорости?
Я впервые заметил в 2009 году, что GCC (по крайней мере, в моих проектах и ​​на моих машинах) имеет тенденцию генерировать заметно более быстрый код, если я оптимизирую для size ( -Os) вместо скорости ( -O2или -O3), и с тех пор я удивляюсь, почему. Мне удалось создать (довольно глупый) код, …

1
Почему компилятор Rust не оптимизирует код, предполагая, что две изменяемые ссылки не могут иметь псевдоним?
Насколько я знаю, псевдонимы ссылок / указателей могут препятствовать способности компилятора генерировать оптимизированный код, поскольку они должны обеспечивать правильное поведение сгенерированного двоичного файла в случае, когда две ссылки / указатели действительно являются псевдонимами. Например, в следующем коде C, void adds(int *a, int *b) { *a += *b; *a += *b; …

12
Как скомпилировать 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] successfully opened CUDA library libcudnn.so.5 locally I tensorflow/stream_executor/dso_loader.cc:125] successfully opened CUDA library libcufft.so.8.0 locally I tensorflow/stream_executor/dso_loader.cc:125] successfully opened CUDA library libcuda.so.1 locally I tensorflow/stream_executor/dso_loader.cc:125] successfully opened CUDA library libcurand.so.8.0 …

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; } Выход вышеуказанной программы составлен с использованием gccв 0 1 1 С опцией -Wallили выдает предупреждение:-Waddressgcc warning: the address of ‘i’ …

3
Почему GCC генерирует такую ​​радикально отличную сборку для почти одного и того же C-кода?
При написании оптимизированной ftolфункции я обнаружил очень странное поведение в GCC 4.6.1. Позвольте мне сначала показать вам код (для ясности я отметил различия): fast_trunc_one, C: int fast_trunc_one(int i) { int mantissa, exponent, sign, r; mantissa = (i & 0x07fffff) | 0x800000; exponent = 150 - ((i >> 23) & 0xff); …

4
Можно ли намекнуть оптимизатору, указав диапазон целого числа?
Я использую intтип для хранения значения. В соответствии с семантикой программы значение всегда изменяется в очень небольшом диапазоне (0 - 36), и int(не a char) используется только из-за эффективности процессора. Кажется, что многие специальные арифметические оптимизации могут быть выполнены для такого небольшого диапазона целых чисел. Многие вызовы функций для этих …

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

5
Как посмотреть, какие флаги -march = native активируют?
Я компилирую свое приложение C ++, используя GCC 4.3. Вместо того, чтобы вручную выбирать флаги оптимизации, которые я использую -march=native, теоретически следует добавить все флаги оптимизации, применимые к оборудованию, на котором я компилирую. Но как я могу проверить, какие флаги он использует?

2
Пределы типа Nat в Shapeless
В бесформенном типе Nat представлен способ кодирования натуральных чисел на уровне типа. Это используется, например, для списков фиксированного размера. Вы даже можете выполнять вычисления на уровне типа, например, добавлять список Nэлементов в список Kэлементов и возвращать список, который, как известно, во время компиляции имеет N+Kэлементы. Способно ли это представление представлять …

5
Почему улучшенный оптимизатор GCC 6 нарушает практический код C ++?
В GCC 6 появилась новая функция оптимизатора : она предполагает, что thisона всегда не равна нулю, и оптимизирует на основе этого. Распространение диапазона значений теперь предполагает, что указатель this функций-членов C ++ не равен NULL. Это исключает обычные проверки нулевого указателя, но также нарушает некоторые несоответствующие кодовые базы (такие как …

7
Почему компилятор не может (или не может) оптимизировать предсказуемый цикл сложения в умножение?
Этот вопрос пришел в голову при чтении блестящего ответа Mysticial на вопрос: почему обрабатывать отсортированный массив быстрее, чем несортированный ? Контекст для задействованных типов: const unsigned arraySize = 32768; int data[arraySize]; long long sum = 0; В своем ответе он объясняет, что компилятор Intel (ICC) оптимизирует это: for (int i …

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.