Запитання з тегом «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 to (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зменшення продуктивності на моєму ПК. Орієнтир #include <iostream> #include <chrono> #include <x86intrin.h> int main(int argc, char* argv[]) { using namespace std; if (argc != 2) { cerr << "usage: array_size in …

9
Виконання бета-версії Swift: сортування масивів
Я впроваджував алгоритм у 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 (принаймні, на моїх проектах і на моїх машинах) має тенденцію генерувати помітно швидший код, якщо я оптимізую розмір ( -Os) замість швидкості ( -O2або -O3), і з тих пір мені цікаво чому. Мені вдалося створити (досить нерозумний) код, який показує цю дивовижну …

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

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або або -Waddressнадсилає gccпопередження: warning: the …

3
Чому GCC генерує такі кардинально різні збірки майже для одного і того ж коду С?
Під час написання оптимізованої 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); sign …

4
Чи можу я натякнути на оптимізатор, давши діапазон цілого числа?
Я використовую intтип для зберігання значення. За семантикою програми значення завжди змінюється в дуже малому діапазоні (0 - 36), а int(не а 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це не завжди є нульовим і оптимізується на основі цього. Поширення діапазону значень тепер передбачає, що цей покажчик функцій-членів C ++ не є нульовим. Це виключає загальні перевірки нульових покажчиків, але також порушує деякі невідповідні бази коду (наприклад, Qt-5, …

7
Чому компілятор не може (або ні) оптимізувати передбачуваний цикл додавання до множення?
Це питання, яке прийшло в голову під час читання блискучої відповіді Mysticial на запитання: чому швидше обробити відсортований масив, ніж несортований масив ? Контекст для задіяних типів: const unsigned arraySize = 32768; int data[arraySize]; long long sum = 0; У своїй відповіді він пояснює, що Intel Compiler (ICC) оптимізує це: …

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.