«compiler-optimization» etiketlenmiş sorular

Derleyici optimizasyonu, bir derleyicinin çalışma süresini veya nesne boyutunu veya her ikisini azaltacak şekilde uyarlanmasını içerir. Bu, derleyici bağımsız değişkenleri (örn. CFLAGS, LDFLAGS), derleyici eklentileri (örneğin DEHYDRA) veya derleyicide yapılan doğrudan değişiklikler (kaynak kodunu değiştirmek gibi) kullanılarak gerçekleştirilebilir.


12
GCC neden * a * a * a * a * a - (a * a * a) * (a * a * a) 'yı optimize etmiyor?
Bilimsel bir uygulama üzerinde bazı sayısal optimizasyonlar yapıyorum. Fark ettiğim bir şey, GCC'nin çağrıyı pow(a,2)derleyerek optimize edeceğidir a*a, ancak çağrı pow(a,6)optimize edilmemiştir ve aslında kütüphane işlevini çağıracaktır pow, bu da performansı büyük ölçüde yavaşlatır. (Buna karşılık, çalıştırılabilir Intel C ++ Derleyicisiicc kitaplık çağrısını ortadan kaldıracaktır pow(a,6).) Ne hakkında merak ediyorum …

10
32 bit döngü sayacının 64 bit ile değiştirilmesi, Intel CPU'larda _mm_popcnt_u64 ile çılgın performans sapmaları sunar
popcountBüyük veri dizilerine giden en hızlı yolu arıyordum . Ben karşılaştı çok garip bir etkisi: den döngü değişkeni değiştirme unsignediçin uint64_tbenim PC'de% 50 tarafından yapılan performans düşüşü. Kıyaslamak #include <iostream> #include <chrono> #include <x86intrin.h> int main(int argc, char* argv[]) { using namespace std; if (argc != 2) { cerr << …


6
Hız yerine boyut için optimize edersem neden GCC% 15-20 daha hızlı kod üretir?
İlk olarak 2009'da GCC'nin (en azından projelerimde ve makinelerimde) hız ( veya ) yerine size ( -Os) için optimize edersem fark edilir derecede daha hızlı kod üretme eğiliminde olduğunu fark ettim ve nedenini merak ediyorum.-O2-O3 Bu şaşırtıcı davranışı gösteren ve burada gönderilecek kadar küçük bir kod (oldukça aptal) oluşturmayı başardık. …

1
Rust derleyicisi neden iki değiştirilebilir başvurunun diğer adının kullanılamayacağını varsayarak kodu en iyi duruma getirmiyor?
Bildiğim kadarıyla, referans / işaretçi takma adı, derleyicinin optimize edilmiş kod üretme yeteneğini engelleyebilir, çünkü iki referansın / işaretçinin gerçekten takma adda oluşturulduğu ikili kodun doğru şekilde davranmasını sağlamalıdırlar. Örneğin, aşağıdaki C kodunda, void adds(int *a, int *b) { *a += *b; *a += *b; } bayrak clang version 6.0.0-1ubuntu2 …

12
Tensorflow'u SSE4.2 ve AVX talimatları ile nasıl derleyebilirim?
Bu, Tensorflow'un çalışıp çalışmadığını kontrol etmek için bir komut dosyası çalıştırıldığında alınan mesajdır: 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 …

2
C'de &&& işlemi nedir
#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; } Kullanarak derlenmiş yukarıdaki program çıktısı gccolan 0 1 1 İle -Wallya da -Waddressseçenek, gccbir uyarı verir: warning: the address of …

3
GCC neden neredeyse aynı C kodu için bu kadar radikal olarak farklı bir montaj üretiyor?
Optimize edilmiş bir ftolişlev yazarken bazı garip davranışlar buldum GCC 4.6.1. Önce kodu göstereyim (açıklık için farklılıkları işaretledim): 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 = i & 0x80000000; …

4
Optimize ediciyi bir tamsayı aralığı vererek ipucu verebilir miyim?
intBir değeri saklamak için bir tür kullanıyorum . Programın anlambilimiyle, değer her zaman çok küçük bir aralıkta değişir (0 - 36) ve int(a değil char) yalnızca CPU verimliliği nedeniyle kullanılır. Bu kadar az sayıda tamsayı üzerinde birçok özel aritmetik optimizasyon yapılabiliyor gibi görünüyor. Bu tamsayılardaki birçok işlev çağrısı, küçük bir …

2
Lambdas neden derleyici tarafından düz işlevlerden daha iyi optimize edilebilir?
The C++ Standard Library (Second Edition)Nicolai Josuttis adlı kitabında lambdasların derleyici tarafından düz işlevlerden daha iyi optimize edilebileceğini belirtiyor. Ayrıca, C ++ derleyicileri lambdaları sıradan işlevlerden daha iyi optimize eder. (Sayfa 213) Neden? Inlining söz konusu olduğunda artık bir fark olmaması gerektiğini düşündüm. Düşünebilmemin tek nedeni, derleyicilerin lambdalarla daha iyi …


2
Shapeless'ta Nat tipinin sınırları
Biçimsiz olarak, Nat türü, doğal sayıları bir tür düzeyinde kodlamanın bir yolunu temsil eder. Bu, örneğin sabit boyutlu listeler için kullanılır. Tür düzeyinde hesaplamalar bile yapabilirsiniz, örneğin, bir Nöğe listesine bir öğe listesi ekleyebilir ve öğeleri Kderleme zamanında bilinen bir listeyi geri alabilirsiniz N+K. Bu gösterim, örneğin 10000002 53 gibi …

5
Geliştirilmiş GCC 6 optimizer neden pratik C ++ kodunu kırıyor?
GCC 6'nın yeni bir optimize edici özelliği var : Her thiszaman boş olmadığını varsayar ve buna göre optimize eder. Değer aralığı yayılımı artık C ++ üye işlevlerinin bu işaretçisinin boş olmadığını varsayar. Bu, genel boş işaretçi denetimlerini ortadan kaldırır, ancak bazı uygun olmayan kod tabanlarını da (Qt-5, Chromium, KDevelop gibi) …

7
Derleyici neden tahmin edilebilir bir toplama döngüsünü çarpmaya optimize edemiyor (veya yapmıyor)?
Bu, Mysticial'ın şu soruya verdiği parlak cevabı okurken akla gelen bir sorudur: Neden sıralı bir diziyi sıralanmamış bir diziden daha hızlı işlemek ? İlgili türler için bağlam: const unsigned arraySize = 32768; int data[arraySize]; long long sum = 0; Cevabında Intel Compiler'ın (ICC) bunu optimize ettiğini açıklıyor: for (int i …

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.