abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    dnes 12:55 | IT novinky

    Čínská společnost Tencent uvolnila svůj AI model HunyuanWorld-Voyager pro generování videí 3D světů z jednoho obrázku a určené trajektorie kamery. Licence ale nedovoluje jeho používání na území Evropské unie, Spojeného království a Jižní Koreje.

    Ladislav Hagara | Komentářů: 0
    dnes 12:11 | Komunita

    Blender Studio se spojilo s kapelou OK Go a výsledkem je videoklip k písni Impulse Purchase. Stejně jako samotný 3D software Blender je i ve videoklipu použitý animovaný chlápek open source. Kdokoli si jej může stáhnout a upravovat.

    Ladislav Hagara | Komentářů: 0
    dnes 01:33 | Komunita

    Zig Software Foundation stojící za programovacím jazykem Zig publikovala finanční zprávu za rok 2024. Současně s prosbou o finanční příspěvek.

    Ladislav Hagara | Komentářů: 0
    dnes 00:22 | Nová verze

    Na čem pracují vývojáři webového prohlížeče Ladybird (GitHub)? Byl publikován přehled vývoje za srpen (YouTube). Vypíchnuta je podpora Tabulek Google, implementace Gamepad API a Cookie Store API nebo také podpora WebGL na Linuxu.

    Ladislav Hagara | Komentářů: 0
    včera 20:44 | Komunita

    openSUSE Leap 16, včetně Leap Micra 6.2+, nově nabízí 24 měsíců podpory pro každé vydání. To je dva roky aktualizací a stability, což z něj činí nejdéle podporovanou komunitní distribuci vůbec. Leap se tak stává ideální platformou pro všechny, kdo hledají moderní, stabilní a dlouhodobě podporovanou komunitní Linux distribuci.

    lkocman | Komentářů: 0
    včera 16:33 | Bezpečnostní upozornění

    Národní úřad pro kybernetickou a informační bezpečnost (NÚKIB) vydal dne 3. 9. 2025 VAROVÁNÍ před hrozbou v oblasti kybernetické bezpečnosti spočívající v předávání systémových a uživatelských dat do Čínské lidové republiky a ve vzdálené správě technických aktiv vykonávané z území Čínské lidové republiky. Varováním se musí zabývat povinné osoby podle zákona o kybernetické bezpečnosti.

    Ladislav Hagara | Komentářů: 27
    včera 11:55 | IT novinky

    Americká internetová společnost Google nemusí prodat svůj prohlížeč Chrome ani operační systém Android. Rozhodl o tom soud ve Washingtonu, který tak zamítl požadavek amerického ministerstva spravedlnosti. Soud ale firmě nařídil sdílet data s jinými podniky v zájmu posílení konkurence v oblasti internetového vyhledávání. Zároveň Googlu zakázal uzavírat dohody s výrobci mobilních a dalších zařízení, které by znemožňovaly

    … více »
    Ladislav Hagara | Komentářů: 3
    včera 11:33 | Humor

    Prvního září ozbrojení policisté zatkli na na londýnském letišti Heathrow scénáristu a režiséra Grahama Linehana, známého především komediálními seriály Ajťáci, Otec Ted nebo Black Books. Během výslechu měl 57letý Graham nebezpečně zvýšený krevní tlak až na samou hranici mrtvice a proto byl z policejní stanice převezen do nemocnice. Důvodem zatčení bylo údajné podněcování násilí v jeho 'vtipných' příspěvcích na sociální síti

    … více »
    Gréta | Komentářů: 91
    včera 10:22 | Pozvánky

    Studentská dílna Macgyver zve na další Virtuální Bastlírnu - pravidelné online setkání všech, kdo mají blízko k bastlení, elektronice, IT, vědě a technice. Letní prázdniny jsou za námi a je čas probrat novinky, které se přes srpen nahromadily. Tentokrát jich je více než 50! Těšit se můžete mimo jiné na:

    Hardware – Bus Pirate na ESP32, reverse engineering Raspberry Pi, pseudo-ZX-80 na RISC-V, PicoCalc, organizéry na nářadí z pěny nebo … více »
    bkralik | Komentářů: 0
    včera 03:11 | Nová verze

    Google Chrome 140 byl prohlášen za stabilní. Nejnovější stabilní verze 140.0.7339.80 přináší řadu novinek z hlediska uživatelů i vývojářů. Podrobný přehled v poznámkách k vydání. Opraveno bylo 6 bezpečnostních chyb. Vylepšeny byly také nástroje pro vývojáře.

    Ladislav Hagara | Komentářů: 0
    Pro otevření více webových stránek ve webovém prohlížečí používám
     (82%)
     (8%)
     (2%)
     (3%)
     (4%)
     (1%)
    Celkem 139 hlasů
     Komentářů: 10, poslední dnes 10:16
    Rozcestník

    gcc nova optimalizace

    29.9.2013 16:55 | Přečteno: 1300×

    testovaci program:
    #include <stdint.h>
    
    template<int N>
    struct Number {
    	enum { WORDS = N / 32 };
    	uint32_t words[WORDS] __attribute__((__aligned__(16)));
    	
    	void erase() __attribute__((noinline)) {
    		for (int i = 0; i < WORDS; ++i) { words[i] = 0; }
    	}
    };
    
    
    int main() {
    	Number<512> x;
    	for (int i = 0; i < 999999999; ++i) {
    		x.erase();
    	}
    }
    

    kod erase() vygenerovany gcc 4.7.3:
    _ZN6NumberILi512EE5eraseEv:
    .LFB2:
    	.cfi_startproc
    	pxor	%xmm0, %xmm0
    	movdqa	%xmm0, (%rdi)
    	movdqa	%xmm0, 16(%rdi)
    	movdqa	%xmm0, 32(%rdi)
    	movdqa	%xmm0, 48(%rdi)
    	ret
    
    doba behu:
    $ time ./a.out 
    
    real    0m2.435s
    user    0m2.416s
    sys     0m0.004s
    
    kod vygenerovany gcc 4.8.1:
    _ZN6NumberILi512EE5eraseEv:
    .LFB2:
    	.cfi_startproc
    	testb	$1, %dil
    	movl	$64, %edx
    	jne	.L27
    	testb	$2, %dil
    	jne	.L28
    .L3:
    	testb	$4, %dil
    	jne	.L29
    .L4:
    	movl	%edx, %ecx
    	xorl	%eax, %eax
    	shrl	$3, %ecx
    	testb	$4, %dl
    	rep stosq
    	je	.L5
    	movl	$0, (%rdi)
    	addq	$4, %rdi
    .L5:
    	testb	$2, %dl
    	je	.L6
    	xorl	%eax, %eax
    	addq	$2, %rdi
    	movw	%ax, -2(%rdi)
    .L6:
    	andl	$1, %edx
    	je	.L1
    	movb	$0, (%rdi)
    .L1:
    	rep ret
    	.p2align 4,,10
    	.p2align 3
    .L27:
    	movb	$0, (%rdi)
    	addq	$1, %rdi
    	movb	$63, %dl
    	testb	$2, %dil
    	je	.L3
    	.p2align 4,,10
    	.p2align 3
    .L28:
    	xorl	%ecx, %ecx
    	addq	$2, %rdi
    	subl	$2, %edx
    	movw	%cx, -2(%rdi)
    	testb	$4, %dil
    	je	.L4
    	.p2align 4,,10
    	.p2align 3
    .L29:
    	movl	$0, (%rdi)
    	subl	$4, %edx
    	addq	$4, %rdi
    	jmp	.L4
    	.cfi_endproc
    
    doba behu:
    $ time ./a.out 
    
    real    0m14.199s
    user    0m14.052s
    sys     0m0.040s
    
    z toho asm to vypada ze tam proste placl nejaky genericky kod pro nulovani pameti. Ted hledam, zatim bez uspechu, jak tuhle hruzu vypnout.        

    Hodnocení: 100 %

            špatnédobré        

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    Komentáře

    Vložit další komentář

    29.9.2013 17:12 chrono
    Rozbalit Rozbalit vše Re: gcc nova optimalizace
    Nepomôže, keď bude vhodne zarovnaná aj tá premenná x?
    29.9.2013 17:24 ::: | skóre: 14 | blog: e_lama
    Rozbalit Rozbalit vše Re: gcc nova optimalizace
    nepomuze. Ta promenna uz je zarovnana kvuli tomu atributu. Navic prekladac pri kompilaci erase() nemuze vedet o vsech instancich a brat na ne ohled.
    29.9.2013 19:34 asdf
    Rozbalit Rozbalit vše Re: gcc nova optimalizace
    welcome to GNU land :-D
    29.9.2013 21:05 kralyk z abclinuxu | skóre: 29 | blog:
    Rozbalit Rozbalit vše Re: gcc nova optimalizace
    Clang tenhle problém nemá, produkuje to, co gcc 4.7 ;-)
    29.9.2013 21:41 ::: | skóre: 14 | blog: e_lama
    Rozbalit Rozbalit vše Re: gcc nova optimalizace
    O clangu nejakou dobu uvazuju, ale naposled kdyz jsem ho zkousel tak mel problemy s nekteryma vecma v c++11. A to i kdyz oficialne uz je mel podporovat.

    Mohl bych ho vyzkouset znovu jestli to uz opravili...
    David Heidelberg avatar 29.9.2013 22:28 David Heidelberg | skóre: 46 | blog: blog_
    Rozbalit Rozbalit vše Re: gcc nova optimalizace
    Jardík avatar 30.9.2013 00:20 Jardík | skóre: 40 | blog: jarda_bloguje
    Rozbalit Rozbalit vše Re: gcc nova optimalizace
    g++ -o3 :-)
    0000000000400710 <_ZN6NumberILm512EE5eraseEv>:
      400710:       40 f6 c7 01             test   dil,0x1
      400714:       ba 40 00 00 00          mov    edx,0x40
      400719:       75 45                   jne    400760 <_ZN6NumberILm512EE5eraseEv+0x50>
      40071b:       40 f6 c7 02             test   dil,0x2
      40071f:       75 4f                   jne    400770 <_ZN6NumberILm512EE5eraseEv+0x60>
      400721:       40 f6 c7 04             test   dil,0x4
      400725:       75 61                   jne    400788 <_ZN6NumberILm512EE5eraseEv+0x78>
      400727:       89 d1                   mov    ecx,edx
      400729:       31 c0                   xor    eax,eax
      40072b:       c1 e9 03                shr    ecx,0x3
      40072e:       f6 c2 04                test   dl,0x4
      400731:       f3 48 ab                rep stos QWORD PTR es:[rdi],rax
      400734:       74 0a                   je     400740 <_ZN6NumberILm512EE5eraseEv+0x30>
      400736:       c7 07 00 00 00 00       mov    DWORD PTR [rdi],0x0
      40073c:       48 83 c7 04             add    rdi,0x4
      400740:       f6 c2 02                test   dl,0x2
      400743:       74 0a                   je     40074f <_ZN6NumberILm512EE5eraseEv+0x3f>
      400745:       31 c0                   xor    eax,eax
      400747:       48 83 c7 02             add    rdi,0x2
      40074b:       66 89 47 fe             mov    WORD PTR [rdi-0x2],ax
      40074f:       83 e2 01                and    edx,0x1
      400752:       74 03                   je     400757 <_ZN6NumberILm512EE5eraseEv+0x47>
      400754:       c6 07 00                mov    BYTE PTR [rdi],0x0
      400757:       f3 c3                   repz ret 
      400759:       0f 1f 80 00 00 00 00    nop    DWORD PTR [rax+0x0]
      400760:       c6 07 00                mov    BYTE PTR [rdi],0x0
      400763:       48 83 c7 01             add    rdi,0x1
      400767:       b2 3f                   mov    dl,0x3f
      400769:       40 f6 c7 02             test   dil,0x2
      40076d:       74 b2                   je     400721 <_ZN6NumberILm512EE5eraseEv+0x11>
      40076f:       90                      nop
      400770:       31 c9                   xor    ecx,ecx
      400772:       48 83 c7 02             add    rdi,0x2
      400776:       83 ea 02                sub    edx,0x2
      400779:       66 89 4f fe             mov    WORD PTR [rdi-0x2],cx
      40077d:       40 f6 c7 04             test   dil,0x4
      400781:       74 a4                   je     400727 <_ZN6NumberILm512EE5eraseEv+0x17>
      400783:       0f 1f 44 00 00          nop    DWORD PTR [rax+rax*1+0x0]
      400788:       c7 07 00 00 00 00       mov    DWORD PTR [rdi],0x0
      40078e:       83 ea 04                sub    edx,0x4
      400791:       48 83 c7 04             add    rdi,0x4
      400795:       eb 90                   jmp    400727 <_ZN6NumberILm512EE5eraseEv+0x17>
      400797:       66 0f 1f 84 00 00 00    nop    WORD PTR [rax+rax*1+0x0]
    
    g++ -O2 -ftree-vectorize:
    0000000000400710 <_ZN6NumberILm512EE5eraseEv>:
      400710:       66 0f ef c0             pxor   xmm0,xmm0
      400714:       48 8d 47 40             lea    rax,[rdi+0x40]
      400718:       66 0f 7f 07             movdqa XMMWORD PTR [rdi],xmm0
      40071c:       48 83 c7 10             add    rdi,0x10
      400720:       48 39 c7                cmp    rdi,rax
      400723:       75 f3                   jne    400718 <_ZN6NumberILm512EE5eraseEv+0x8>
      400725:       f3 c3                   repz ret
    
    g++ -O2 -ftree-vectorize -funroll-loops
    0000000000400750 <_ZN6NumberILm512EE5eraseEv>:
      400750:       66 0f ef c0             pxor   xmm0,xmm0
      400754:       66 0f 7f 07             movdqa XMMWORD PTR [rdi],xmm0
      400758:       66 0f 7f 47 10          movdqa XMMWORD PTR [rdi+0x10],xmm0
      40075d:       66 0f 7f 47 20          movdqa XMMWORD PTR [rdi+0x20],xmm0
      400762:       66 0f 7f 47 30          movdqa XMMWORD PTR [rdi+0x30],xmm0
      400767:       c3                      ret
    
    Můžeš zkusit -ftree-vectorizer-verbose=5 aby to kecalo.
    Věřím v jednoho Boha.
    Jardík avatar 30.9.2013 00:23 Jardík | skóre: 40 | blog: jarda_bloguje
    Rozbalit Rozbalit vše Re: gcc nova optimalizace
    T toho plyne ... že to je z nějakého důvodu v gcc 4.8.1 vypnuté s -O2.
    Věřím v jednoho Boha.
    30.9.2013 12:23 Pavel Píša | skóre: 18 | blog: logic
    Rozbalit Rozbalit vše Re: gcc nova optimalizace
    Neuvádíte kompletní řádek s voláním GCC. Není možné, že při volbě určitého/cílového CPU (-mtune -march) bude výsledek při -O3 zoptimalizovaný podle představ. Je možné, že defaulní nastavení GCC je jiné kvůli buildu v distribuci nebo zjištění problémů na určité variantě architektury.

    Jardík avatar 30.9.2013 13:55 Jardík | skóre: 40 | blog: jarda_bloguje
    Rozbalit Rozbalit vše Re: gcc nova optimalizace
    Volám
    g++ -std=c++11 -O2 -o bla bla.cpp
    ; stejný výsledek jako autor blogu
    
    g++ -std=c++11 -O3 -o bla bla.cpp
    ; z toho vyleze ta prasárna a je to hůře zoptimalizované
    ; než s -O2, nemám páru proč
    
    g++ -std=c++11 -O2 -ftree-vectorize -o bla bla.cpp
    ; sse2, ale ve smyčce
    
    g++ -std=c++11 -O2 -ftree-vectorize -funroll-loops -o bla bla.cpp
    ; dostanu sse2 kód bez smyčky
    
    Žádné extra -mtune či march nepřidávám, ale možná by stálo za to to zkusit. sse2 by to ale mělo použít bez nápovědy, to snad umí každý x86-64 cpu.
    Věřím v jednoho Boha.
    Jardík avatar 30.9.2013 13:56 Jardík | skóre: 40 | blog: jarda_bloguje
    Rozbalit Rozbalit vše Re: gcc nova optimalizace
    Zkusil jsem ještě clang 3.3 a ten vyplyvne SSE2 bez smyčky s O2 bez dalších parametrů.
    Věřím v jednoho Boha.
    30.9.2013 12:12 ::: | skóre: 14 | blog: e_lama
    Rozbalit Rozbalit vše Re: gcc nova optimalizace
    Diky, dobrej postreh. Zkusim se podivat jakej je rozdil mezi -O2 a -O3 a postupne jednotlivy optimalizace vypinat.
    Jardík avatar 30.9.2013 14:00 Jardík | skóre: 40 | blog: jarda_bloguje
    Rozbalit Rozbalit vše Re: gcc nova optimalizace
    Pozor. Optimalizovalo to s O2 s těma dalšíma optimalizacema, O3 mi produkuje totální prasárnu (a to i s -ftree-vectorize a -funroll-loops), O3 mi přijde rozbité.
    Věřím v jednoho Boha.
    30.9.2013 15:16 ::: | skóre: 14 | blog: e_lama
    Rozbalit Rozbalit vše Re: gcc nova optimalizace
    tak to asi dela tree-loop-distribute-patterns

    g++ -O2 -ftree-loop-distribute-patterns generuje stejny kod jako -O3.

    g++ -O3 -fno-tree-loop-distribute-patterns generuje:
    _ZN6NumberILi512EE5eraseEv:
    .LFB2:
    	.cfi_startproc
    	movl	4(%esp), %eax
    	movl	$0, (%eax)
    	movl	$0, 4(%eax)
    	movl	$0, 8(%eax)
    	movl	$0, 12(%eax)
    	movl	$0, 16(%eax)
    	movl	$0, 20(%eax)
    	movl	$0, 24(%eax)
    	movl	$0, 28(%eax)
    	movl	$0, 32(%eax)
    	movl	$0, 36(%eax)
    	movl	$0, 40(%eax)
    	movl	$0, 44(%eax)
    	movl	$0, 48(%eax)
    	movl	$0, 52(%eax)
    	movl	$0, 56(%eax)
    	movl	$0, 60(%eax)
    	ret
    
    coz uz je o neco lepsi.

    Asi zkusim zkompilovat nejnovejsi gcc a jestli to dela taky tak jim poslu bug report.

    Založit nové vláknoNahoru

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.