Запитання з тегом «compiler-optimization»

Оптимізація компілятора включає адаптацію компілятора для зменшення часу виконання або розміру об'єкта або того й іншого. Це може бути досягнуто за допомогою аргументів компілятора (тобто CFLAGS, LDFLAGS), плагінів компілятора (наприклад, DEHYDRA) або прямих модифікацій компілятора (наприклад, модифікації вихідного коду).

13
Як зробити нескінченний порожній цикл, який не буде оптимізований?
Здається, що стандарт C11 означає, що операції ітерації з постійними керуючими виразами не повинні оптимізуватися. Я приймаю поради з цієї відповіді , яка конкретно цитує розділ 6.8.5 проекту проекту: Ітераційний оператор, керуючий вираз якого не є постійним виразом ..., може припускати, що реалізація припиняється. У цій відповіді зазначається, що цикл …

3
Використання цього покажчика викликає дивну деоптимізацію в гарячому циклі
Нещодавно я натрапив на дивну деоптимізацію (а точніше, пропустив можливість оптимізації). Розглянемо цю функцію для ефективного розпакування масивів 3-бітових цілих чисел до 8-бітних цілих чисел. Він розпаковує 16 входів у кожній ітерації циклу: void unpack3bit(uint8_t* target, char* source, int size) { while(size > 0){ uint64_t t = *reinterpret_cast<uint64_t*>(source); target[0] = …

11
Ефективність передчасного повернення у функції
Це ситуація, з якою я часто стикаюся як недосвідчений програміст, і мені цікаво, особливо для мого амбіційного, швидкісного проекту, який я намагаюся оптимізувати. Для основних мов, подібних до С (C, objC, C ++, Java, C # тощо) та їх звичайних компіляторів, чи будуть ці дві функції працювати так само ефективно? …

3
Рівні оптимізації Clang
На ПКУ, керівництво пояснює , що -O3, -Osі т.д. переводити з точки зору аргументів оптимізації конкретних ( -funswitch-loops, -fcompare-elimі т.д.) Я шукаю ту ж інформацію про дзвін . Я дивився в Інтернеті, і в man clangньому подано лише загальну інформацію ( -O2оптимізує більше -O1, -Osоптимізує швидкість, ...), а також подивився …

3
Чому код активно намагається запобігти оптимізації зворотних викликів?
Заголовок запитання може бути дещо дивним, але справа в тому, що, наскільки мені відомо, взагалі немає нічого, що могло б говорити проти оптимізації виклику хвоста. Однак, переглядаючи проекти з відкритим кодом, я вже натрапив на кілька функцій, які активно намагаються перешкодити компілятору виконувати оптимізацію хвостового виклику, наприклад, реалізація CFRunLoopRef, яка …

4
Чому 'd / = d' не видає ділення на нуль винятку, коли d == 0?
Я не зовсім розумію, чому я не отримую ділення на нульовий виняток: int d = 0; d /= d; Я очікував отримати ділення на нульовий виняток, але замість цього d == 1 . Чому не d /= dвикидає ділення на нульовий виняток, коли d == 0?

7
Як вимкнути оптимізацію компілятора в gcc?
Я намагаюся вивчити мову асемблера. Я шукав і знаходив, як розібрати .cфайл, але, на мою думку, він видає якусь оптимізовану версію програми. Чи є спосіб, щоб я міг побачити точний код збірки, який відповідає моєму файлу C.

6
Як вимкнути оптимізацію компілятора gcc, щоб увімкнути переповнення буфера
Я працюю над проблемою домашнього завдання, яка вимагає відключення захисту від оптимізації компілятора, щоб вона працювала. Я використовую gcc 4.4.1 на ubuntu linux, але не можу зрозуміти, які прапори є правильними. Я усвідомлюю, що це залежить від архітектури - моя машина працює з 32-розрядним процесором Intel. Дякую.

5
Чому "while (i ++ <n) {}" значно повільніше, ніж "while (++ i <n) {}"
Очевидно, на моєму ноутбуці Windows 8 із HotSpot JDK 1.7.0_45 (з усіма параметрами компілятора / віртуальної машини, встановленими за замовчуванням), нижченаведений цикл final int n = Integer.MAX_VALUE; int i = 0; while (++i &lt; n) { } принаймні на 2 порядки швидше (~ 10 мс проти ~ 5000 мс), ніж: …

7
Чи можна сказати провіснику гілок, наскільки ймовірно, що він стежить за гілкою?
Тільки для того, щоб це було зрозуміло, я не маю наміру до будь-якої переносимості тут, тому будь-які рішення, які прив’яжуть мене до певного вікна, чудові. В основному, у мене є твердження if, яке 99% часу оцінить як істинне, і я намагаюся вибити кожен останній годинник продуктивності, чи можу я виконати …

2
Чому комутатор не оптимізований так само, як ланцюговий, якщо інший в c / c ++?
Наступна реалізація квадрата видає серію операторів cmp / je, як я би сподівався на ланцюжок, якщо заява: int square(int num) { if (num == 0){ return 0; } else if (num == 1){ return 1; } else if (num == 2){ return 4; } else if (num == 3){ return …

2
Швидше випробування на роздільність, ніж оператор%?
Я помітив цікаву річ на своєму комп’ютері. * Рукописний тест на роздільність значно швидше, ніж %оператор. Розглянемо мінімальний приклад: * AMD Ryzen Threadripper 2990WX, GCC 9.2.0 static int divisible_ui_p(unsigned int m, unsigned int a) { if (m &lt;= a) { if (m == a) { return 1; } return 0; …

1
Чому ініціалізація масиву GCC у масиві спочатку заповнює всю нуль, включаючи ненульові елементи?
Чому gcc заповнює весь масив нулями замість лише 96 цілих чисел? Ненульові ініціалізатори знаходяться на початку масиву. void *sink; void bar() { int a[100]{1,2,3,4}; sink = a; // a escapes the function asm("":::"memory"); // and compiler memory barrier // forces the compiler to materialize a[] in memory instead of optimizing …

2
Java 8: Class.getName () уповільнює ланцюжок конкатенації рядків
Нещодавно я зіткнувся з проблемою, пов'язаною з об'єднанням рядків. Цей тест підсумовує його: @OutputTimeUnit(TimeUnit.NANOSECONDS) public class BrokenConcatenationBenchmark { @Benchmark public String slow(Data data) { final Class&lt;? extends Data&gt; clazz = data.clazz; return "class " + clazz.getName(); } @Benchmark public String fast(Data data) { final Class&lt;? extends Data&gt; clazz = data.clazz; …

2
Чи проігнорував мій компілятор мого невикористаного статичного учасника класу thread_local?
Я хочу зробити деяку реєстрацію потоків у своєму класі, тому я вирішую додати чек на цю thread_localфункцію: #include &lt;iostream&gt; #include &lt;thread&gt; class Foo { public: Foo() { std::cout &lt;&lt; "Foo()" &lt;&lt; std::endl; } ~Foo() { std::cout &lt;&lt; "~Foo()" &lt;&lt; std::endl; } }; class Bar { public: Bar() { std::cout &lt;&lt; …
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.