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

Развертывание цикла для умножения двух матриц NxN?
Я пытаюсь найти хорошую развёртку цикла для умножения двух матриц. Например, если мы хотим суммировать матрицу NxN: void SumMatrix(int *M, int n, int *result) { int i,j; *result = 0; for (i=0; i<n; i++) for (j=0; j<n;...
3179 просмотров

Почему вы НЕ хотите, чтобы компилятор оптимизировал ваш код?
Как только я понял, что в GCC есть такая возможность, я спросил у Google, и многие люди хотят знать, как запретить компилятору оптимизировать код. Это кажется контрпродуктивным, для чего это может помочь программисту? Возможно, отладка? Как это...
109 просмотров
schedule 10.10.2021

Почему компиляторы, поддерживающие предварительно скомпилированные заголовки, обычно разрешают только один?
Есть потенциальные преимущества использования нескольких предварительно скомпилированных заголовков. Предположим, существует проект, в котором есть несколько заголовков, которые редко меняются и используются во многих файлах исходного кода. Эти...
187 просмотров

Применение заданной функции к 256-битному вектору с использованием парадигмы SIMD
Есть ли способ оценить функцию по вектору __m256d/s ? Нравится: #include <immintrin.h> inline __m256d func(__m256d *a, __m256d *b) { return 1 / ((*a + *b) * (*a + *b)); } int main() { __m256d a = _mm256_set_pd(1.0f, 2.0f, 3.0f,...
372 просмотров

Почему невыгодно встраивать функции с помощью циклов или операторов переключения?
Я заметил, что руководство по стилю C ++ от Google предостерегает от встраивания функций с помощью циклов. или операторы переключения: Еще одно полезное эмпирическое правило: обычно неэффективно встраивать функции с помощью циклов или...
3772 просмотров
schedule 01.10.2021

Несовместимы ли потоки (параллельные вычисления в c ++) с уровнями оптимизации (gcc)?
Я пытаюсь научиться использовать многопоточность, а затем написал код (см. Ниже). Как и ожидалось, параллельная функция занимает 2,6 с , а непараллельная - 6,4 с . Затем я попытался изменить компиляцию, используя оптимизацию -O3, доступную...
242 просмотров

Компоновщик GCC для ARM не оптимизирует размещение символов
Когда я проверяю карту памяти после компиляции, я вижу, что символы в разделе DATA или BSS не упорядочены оптимизированным образом с учетом их размера и ограничения доступа к процессору. Например, я получаю что-то вроде: address size name...
498 просмотров
schedule 17.11.2021

С большей вероятностью компилятор встроит функцию в объявление класса с указанным ключевым словом inline?
Недавно я просматривал код коллеги и заметил, что он поставил ключевое слово «inline» перед кучей функций Getter, которые были определены в объявлении класса. eg class Foo { public: inline bool GetBar() const { return m_Bar; } private:...
945 просмотров

Есть ли способ отключить JIT-компилятор и повлияет ли это на производительность?
Что означает JIT-кодирование java-программы и делает ли это выполнение намного более быстрым или есть байт-коды, которые не JIT-обработаны?
8613 просмотров

Как написать цикл в C, чтобы компилятор мог использовать ветвление на нуле после декремента
Известно, что у процессоров есть специальные инструкции для уменьшения счетчика и перехода, если счетчик равен нулю с очень малой задержкой, поскольку инструкции перехода не нужно ждать, пока декремент счетчика пройдет через целочисленный блок. Вот...
391 просмотров

Как спекулятивная ошибка из-за оптимизации компилятора реализована под капотом?
Этот вопрос является продолжением вопроса о Может ли оптимизатор компилятора C нарушить короткое замыкание и переупорядочить доступ к памяти для операндов в выражении логического И ? . Рассмотрим следующий код. if (*p && *q) { /*...
83 просмотров

Будет ли C ++ lambda действительно копировать параметры, захваченные копией?
Использование лямбда-функции в C ++ с переменными, захваченными по значению, подразумевает копия значения . Имея хороший компилятор и предполагая, что мы не изменяем значение в лямбда-функции, можем ли мы надеяться, что не будет фактической копии...
1847 просмотров

Прирост времени выполнения в зависимости от различных возможных векторизации
Я провожу тесты с gcc-4.9 на простом примере изучения векторизации (мой небольшой код вычисляет сумму double 2 массивов и сохраняет результаты в выходной массив). Из того, что я видел в сети, похоже, что существуют: Векторизация SSE (128...
47 просмотров

gcc, связывающий объектные файлы с флагами предупреждения / оптимизации
Мы компилируем часть программного обеспечения с использованием универсальных шаблонов, в которых файлы сначала преобразуются в объектные файлы, они построены следующим образом: arm-unknown-linux-gnu-gcc -c -O2 -Wstrict-prototypes...
1556 просмотров

Оптимизирует ли компилятор порядок компиляции файлов в make-файле с учетом целевой функции?
Предположим, у меня есть файл make с 3 файлами: A, B, C. B и C зависят только от A. Один из возможных способов разрешения зависимостей - это компиляция в порядке ABC. Другой способ - ACB. Мои вопросы: оптимизируют ли компиляторы в целом порядок, в...
27 просмотров
schedule 06.09.2021

Как это произойдет при создании объекта с таким же именем
Если код вошел в область и определил новый объект с тем же именем, что и внешний объект, будет ли правильно определен вновь определенный объект? Как показано в следующем коде: class ClassB { ClassA* p; ClassB(ClassA* a) { p...
50 просмотров
schedule 22.10.2021

Почему компиляторы не объединяют избыточные записи std :: atomic?
Мне интересно, почему никакие компиляторы не готовы объединять последовательные записи одного и того же значения в одну атомарную переменную, например: #include <atomic> std::atomic<int> y(0); void f() { auto order =...
5176 просмотров

Почему разные размеры при компиляции с Visual Studio и командной строкой
Это не очень технический вопрос сам по себе, это в основном из-за моего любопытства, почему при создании программного обеспечения с помощью Visual Studio, когда вы нажимаете «Build» или «Build & Run», или вы просто компилируете свой программное...
222 просмотров

Может ли компилятор оптимизировать распределение от кучи до стека?
Что касается оптимизации компилятора, допустимо и / или возможно ли изменить выделение кучи на выделение стека? Или это нарушит правило «как если бы» ? Например, предположим, что это исходная версия кода. { Foo* f = new Foo();...
3378 просмотров

Разница между регистром, живущим и живым по инструкции
В чем разница между живым и живым регистром? Насколько я понимаю, регистр реального времени означает, что регистр, указанный в текущей строке, содержит переменную, которая не изменяется по сравнению с его последовательной строкой. Вот машинный...
317 просмотров