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í
×
včera 23:33 | IT novinky

Poslanecká sněmovna bude projednávat vládní návrh novely zákona č. 289/2005 Sb., o Vojenském zpravodajství, který by právě Vojenskému zpravodajství dal možnost sledovat síťový provoz a provádět aktivní zásahy v kyberprostoru. Okolnostmi předložení novely a kontroverzí v jejím obsahu rozebírá např. Jan Cibulka na iRozhlasu, a to včetně kritizované nedostatečné kontroly.

Fluttershy, yay! | Komentářů: 0
včera 22:00 | Nová verze

Byla vydána verze 2.27.0 distribuovaného systému správy verzí Git. Přispělo 71 vývojářů, z toho 19 nových. Přehled novinek v poznámkách k vydání.

Ladislav Hagara | Komentářů: 0
včera 16:22 | Upozornění

V rámci projektu ADAM (Advanced DNS Analytics and Measurements) uvádí Laboratoře CZ.NIC ve spolupráci s CSIRT.CZ do produkčního provozu nástroj DNS crawler. Záměrem je periodicky procházet všechny domény 2. úrovně pod TLD .cz, získávat o nich různá veřejně dostupná data a ta pak dále zpracovávat. I když to jeho jméno přímo nenapovídá, DNS crawler bude kromě sběru dat z DNS také komunikovat s webovým a e-mailovým serverem každé domény.

Ladislav Hagara | Komentářů: 2
včera 07:00 | Nová verze

Po 9 týdnech vývoje od vydání Linuxu 5.6 oznámil Linus Torvalds vydání Linuxu 5.7 (LKML). Přehled nových vlastností a vylepšení na stránce Linux Kernel Newbies. Kódové jméno Linuxu 5.7 zůstává Kleptomaniac Octopus.

Ladislav Hagara | Komentářů: 2
včera 00:22 | Komunita

Byl aktualizován styl zápisu zdrojových kódů Linuxu. Maximální počet znaků (sloupců) na řádek byl zvýšen z 80 na 100. Preferováno ale zůstává 80 znaků [reddit].

Ladislav Hagara | Komentářů: 18
31.5. 23:44 | Komunita

Vývojáři postmarketOS (GitLab) hodnotí tři roky vývoje tohoto v květnu 2017 představeného operačního systému pro chytré telefony vycházejícího z optimalizovaného a nakonfigurovaného Alpine Linuxu s vlastními balíčky.

Ladislav Hagara | Komentářů: 15
30.5. 01:00 | Nová verze

Po více než pěti měsících od vydání verze 3.11.0 byla vydána nová stabilní verze 3.12.0, tj. první z nové řady 3.12, minimalistické linuxové distribuce zaměřené na bezpečnost Alpine Linux (Wikipedie) postavené na standardní knihovně jazyka C musl libc a BusyBoxu. Z novinek lze zmínit počáteční podporu architektury mips64 (big endian) a programovacího jazyka D.

Ladislav Hagara | Komentářů: 0
29.5. 23:00 | Komunita

Coffee Run je další krátký open source film od Blender Animation Studia. Vše o filmu na Blender Cloudu.

Ladislav Hagara | Komentářů: 7
29.5. 16:33 | Nová verze

Byla vydána nová verze 2020.06.01 distribuce BlackArch Linux (Wikipedie). Jedná se o distribuci založenou na Arch Linuxu zaměřenou na penetrační testování a výzkum počítačové bezpečnosti. Z novinek lze zmínit přes 150 nových nástrojů. Aktuálně jich je 2553.

Ladislav Hagara | Komentářů: 0
29.5. 14:11 | Komunita

V dubnu loňského roku získal multiplatformní open source herní engine Godot (Wikipedie) 50 tisíc dolarů z programu Mozilla Open Source Support (MOSS) Mission Partners na portaci Godot Editoru na webové technologie (HTML5 a WebAssembly), vylepšení podpory WebRTC, přidání podpory WebSocket a vytvoření 3D modelů pro nová dema. Fabio Alessandrelli dnes přestavil jeden z výsledků: Godot Editor běžící ve webovém prohlížeči.

Ladislav Hagara | Komentářů: 0
Používáte některé open-source řešení [protokol] pro šifrovaný instant messaging?
 (53%)
 (6%)
 (3%)
 (9%)
 (3%)
 (6%)
 (16%)
 (16%)
Celkem 32 hlasů
 Komentářů: 0
Rozcestník

gcc nova optimalizace

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

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.
The enemy of my enemy is still my enemy.
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 ;-)
Přidej se k odporu proti eko-fanatismu! Konzumuj prémiové informace plné zdravého rozumu a vyhýbej se těm nevhodným!
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...
The enemy of my enemy is still my enemy.
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: 16 | 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.
The enemy of my enemy is still my enemy.
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.
The enemy of my enemy is still my enemy.

Založit nové vláknoNahoru

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