Pytania otagowane jako compiler-optimization

Optymalizacja kompilatora polega na dostosowaniu kompilatora w celu zmniejszenia czasu wykonywania lub rozmiaru obiektu lub obu. Można to osiągnąć za pomocą argumentów kompilatora (np. CFLAGS, LDFLAGS), wtyczek kompilatora (na przykład DEHYDRA) lub bezpośrednich modyfikacji kompilatora (takich jak modyfikacja kodu źródłowego).

13
Jak utworzyć nieskończoną pustą pętlę, która nie zostanie zoptymalizowana?
Standard C11 wydaje się sugerować, że instrukcje iteracji ze stałymi wyrażeniami kontrolującymi nie powinny być optymalizowane. Czerpię radę z tej odpowiedzi , która konkretnie cytuje sekcję 6.8.5 projektu standardu: Instrukcja iteracji, której wyrażenie kontrolne nie jest wyrażeniem stałym ... może zostać przyjęte przez implementację jako zakończona. W tej odpowiedzi wspomniano, …

3
Użycie tego wskaźnika powoduje dziwną deoptimization w gorącej pętli
Niedawno natknąłem się na dziwną dezoptymalizację (a raczej straciłem okazję do optymalizacji). Rozważ tę funkcję w celu wydajnego rozpakowywania tablic 3-bitowych liczb całkowitych na 8-bitowe liczby całkowite. Rozpakowuje 16 int w każdej iteracji pętli: void unpack3bit(uint8_t* target, char* source, int size) { while(size > 0){ uint64_t t = *reinterpret_cast<uint64_t*>(source); target[0] …

11
Skuteczność przedwczesnego powrotu w funkcji
Jest to sytuacja, z którą często się spotykam jako niedoświadczony programista i zastanawiam się nad tym, szczególnie w przypadku mojego ambitnego, intensywnego projektu, który staram się zoptymalizować. W przypadku głównych języków podobnych do języka C (C, objC, C ++, Java, C # itp.) I ich zwykłych kompilatorów, czy te dwie …

3
Poziomy optymalizacji Clang
Na gcc, instrukcja wyjaśnia, co -O3, -Ositp tłumaczyć w kategoriach argumenty specyficzne Optimization ( -funswitch-loops, -fcompare-elimetc.) Szukam tych samych informacji dla clang . Zajrzałem do Internetu, w man clangktórym podano tylko ogólne informacje ( -O2optymalizuje więcej niż -O1, -Osoptymalizuje pod kątem szybkości,…), a także spojrzałem tutaj na przepełnienie stosu i …


3
Dlaczego kod miałby aktywnie zapobiegać optymalizacji wywołań końcowych?
Tytuł pytania może być trochę dziwny, ale chodzi o to, że o ile wiem, nic nie przemawia przeciwko optymalizacji wywołań ogonowych. Jednak podczas przeglądania projektów open source natknąłem się już na kilka funkcji, które aktywnie próbują powstrzymać kompilator przed optymalizacją wywołań ogonowych, na przykład implementację CFRunLoopRef, która jest pełna takich …


2
Szybszy test podzielności niż operator%?
Zauważyłem ciekawą rzecz na moim komputerze. * Odręczny test podzielności jest znacznie szybszy niż %operator. Rozważ minimalny przykład: * AMD Ryzen Threadripper 2990WX, GCC 9.2.0 static int divisible_ui_p(unsigned int m, unsigned int a) { if (m <= a) { if (m == a) { return 1; } return 0; } …

1
Dlaczego GCC inicjuje agregację tablicy najpierw wypełniając całość zerami, w tym elementami niezerowymi?
Dlaczego gcc wypełnia całą tablicę zerami zamiast tylko pozostałych 96 liczb całkowitych? Wszystkie niezerowe inicjalizatory znajdują się na początku tablicy. 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 …

2
Java 8: Class.getName () spowalnia łańcuch konkatenacji ciągów
Ostatnio natknąłem się na problem dotyczący konkatenacji ciągów. Ten test porównawczy podsumowuje: @OutputTimeUnit(TimeUnit.NANOSECONDS) public class BrokenConcatenationBenchmark { @Benchmark public String slow(Data data) { final Class<? extends Data> clazz = data.clazz; return "class " + clazz.getName(); } @Benchmark public String fast(Data data) { final Class<? extends Data> clazz = data.clazz; final …

2
Czy mój kompilator zignorował mojego nieużywanego statycznego członka klasy thread_local?
Chcę dokonać rejestracji wątku w mojej klasie, więc postanawiam dodać opcję dla tej thread_localfunkcji: #include <iostream> #include <thread> class Foo { public: Foo() { std::cout << "Foo()" << std::endl; } ~Foo() { std::cout << "~Foo()" << std::endl; } }; class Bar { public: Bar() { std::cout << "Bar()" << std::endl; …
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.