Jammer-Thread

Hier kann über allgemeine Themen diskutiert werden, die sonst in kein Forum passen.
Insbesondere über Szene, Games, Kultur, Weltgeschehen, Persönliches, Recht, Hard- und Software.
Benutzeravatar
Jonathan
Establishment
Beiträge: 2545
Registriert: 04.08.2004, 20:06
Kontaktdaten:

Re: Jammer-Thread

Beitrag von Jonathan »

Tiles hat geschrieben: Ansonsten, gib mal im Startmenü Aufgabenplanung ein und schau was da so alles aktiv ist. Da stehen auch noch ein paar nette Sachen. Und uah, da stehn ja bei mir echt nen paar komische Dinger drin. WTF? Täglich Lenovo Customer Feedback Programm 64. Wann habe ich mir das denn eingefangen O_O
Woah, das Ding ist ja riesig. Ich weiß gar nicht, wie ich da zwanzig Jahre nicht drin rumspielen konnte.
Allerdings: Es ist auch ziemlich unübersichtlich, es gibt einfach eine Millionen Tasks mit merkwürdigen Namen bei denen ich nicht weiß, ob ich will das sie laufen, oder nicht. Gibt es irgendeine Möglichkeit zu sehen, welcher Task wie viel verbraucht? Ich habe irgendwie wenig Lust, von 100 Tasks zu googeln, was genau sie machen und dann zu entscheiden, ob ich sie will, oder nicht. Das meiste scheint im Taskmanager unter svchost zu laufen, was wohl nur ein generischer Starter ist und so ziemlich alles sein kann.

Aber wenigstens weiß ich jetzt, wie ich meinen Autoupdater automatisiert starten kann, wann immer eine Internetverbindung aufgebaut wird. Falls ich mal einen schreiben sollte...
Lieber dumm fragen, als dumm bleiben!
https://jonathank.de/games/
Tiles

Re: Jammer-Thread

Beitrag von Tiles »

Da bin ich überfragt, sorry :)

Bei mir ist da übrigens gar nicht so viel drin. 37 Einträge. Ich würde mal grundsätzlich bei allem misstrauisch werden was nicht Microsoft ist. Und bei Microsoft bei allem was Experience im Namen trägt. Um Goolge wirst du da aber nicht rumkommen.
DerAlbi
Establishment
Beiträge: 269
Registriert: 20.05.2011, 05:37

Re: Jammer-Thread

Beitrag von DerAlbi »

Diese zwei Zeilen sind für den Optimizer innerhalb meiner Umgebung nicht äquivalent:

Code: Alles auswählen

Iterator first = begin;   
Version1: while ((first != end) && SendData(*first)) ++first;   //wie stl  find_if
Version2: while (first != end) { if(!SendData(*first)) break; ++first; } //unter allen Testfällen besser optimierbar
Damit ist der STL-Algo find_if schlechter als etwas selbstgeschriebenes. :(
Im Compiler-Explorer mit Minimalbeispiel klappt natürlich alles.
Benutzeravatar
Krishty
Establishment
Beiträge: 8316
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Jammer-Thread

Beitrag von Krishty »

Ja, sowas hat der MS-Compiler auch. for löst grundsätzlich alle möglichen Optimierungen (von sinnig bis unsinnig) aus, do while bringt das, was man haben will.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Neo.uc
Beiträge: 19
Registriert: 17.04.2003, 16:31
Kontaktdaten:

Re: Jammer-Thread

Beitrag von Neo.uc »

Das ist ja noch garnix - wo wir schonmal beim Jammern sind - meine Frau hat ohne mein Wissen beim ausmisten
nach gerade mal 15 Jahren meinen Zerbst Band I und Band II in den Müll geworfen ! :'(

Sie meinte nur - ist bestimmt eh total veraltet, von wegen ...

Stefan vergieb mir :(
Benutzeravatar
Chromanoid
Moderator
Beiträge: 4273
Registriert: 16.10.2002, 19:39
Echter Name: Christian Kulenkampff
Wohnort: Lüneburg

Re: Jammer-Thread

Beitrag von Chromanoid »

Ich bin da eher von der Fraktion Deiner Frau :) Ausmisten FTW :D
Benutzeravatar
Chromanoid
Moderator
Beiträge: 4273
Registriert: 16.10.2002, 19:39
Echter Name: Christian Kulenkampff
Wohnort: Lüneburg

Re: Jammer-Thread

Beitrag von Chromanoid »

Ich bin da eher von der Fraktion Deiner Frau :) Ausmisten FTW :D Beim letzten Umzug musste praktisch meine ganze Programmierbuchsammlung (inkl. Zerbies Klassikern :)) dran glauben...
Benutzeravatar
Krishty
Establishment
Beiträge: 8316
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Jammer-Thread

Beitrag von Krishty »

abload.de verändert meine GIFs.

Ich nutze das schon seit … zehn? Jahren, und es ist der einzige Image Hoster, dem ich vertraue. Und plötzlich kommen die GIFs total kaputt raus. Scheiße.

Jemand mache Attachments GIF-fähig!
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Chromanoid
Moderator
Beiträge: 4273
Registriert: 16.10.2002, 19:39
Echter Name: Christian Kulenkampff
Wohnort: Lüneburg

Re: Jammer-Thread

Beitrag von Chromanoid »

Bild
6V7FJRr.gif
Das ist der einzige Workaround, der mir dazu einfällt... Ich schau morgen noch mal.

Code: Alles auswählen

[img]http://zfx.info/download/file.php?mode=view&id=3734[/img]
[spoiler][attachment=0]6V7FJRr.gif[/attachment][/spoiler]
Benutzeravatar
Krishty
Establishment
Beiträge: 8316
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Jammer-Thread

Beitrag von Krishty »

Ich hatte mich auf den neuen Optimizer in Visual C++ 2015 Update 3 gefreut, aber er ist ein Haufen Scheiße.

Ich habe das Gefühl, dass *vor* Inlining optimiert wird. Irgendwie wird nicht mehr zwischen äußeren Funktionen und einer geinlineten aufgerufenen Funktion optimiert.

Dazu kommt Flow Control. Es war als große Stärke angekündigt, dass jetzt viel mehr Conditional Moves kämen und dass Verzweigungen aggressiver aufgelöst würden:
x64 assembly with old optimizer    x64 assembly with new optimizer

?test@@YAHH@Z PROC                 ?test@@YAHH@Z PROC
and   ecx, -2147483647             and   ecx, 1
jge   SHORT $LN3@test              lea   eax, DWORD PTR [rcx*2+2]
dec   ecx                          ret   0
or    ecx, -2
inc   ecx
$LN3@test:
test  ecx, ecx
mov   eax, 2
mov   edx, 4
cmovne eax, edx
ret   0
Gucken wir doch mal:

Code: Alles auswählen

	auto hasSucceeded = no;

	// Load “d3d11.dll” (not available on XP, Vista without platform upgrade, etc.) and find the factory for all D3D 11
	//  interfaces, “D3D11CreateDevice()”:
	if(auto d3d11_dll = Windows::tryToLoadModule(UTF16("d3d11.dll"))) {

		if(auto createDevice = tryToFindFunction<decltype(D3D11CreateDevice)>(*d3d11_dll, "D3D11CreateDevice")) {

			hasSucceeded = callCreateDevice(result, *createDevice, minimumRequirement, supervisorOrNull);

		} else {
			report(supervisorOrNull, Error::noD3D11);
		}

		// Leave the D3D 11 DLL allocated, it does no any harm and speeds up re-use.
		// Windows::release(*d3d11_dll);
	} else {
		report(supervisorOrNull, Error::noD3D11);
	}

	return hasSucceeded;
111 Befehle in 395 B. Wenn man ins Disassembly schaut:

Code: Alles auswählen

0000000000018BF0 89 54 24 10          mov         dword ptr [rsp+10h],edx  
0000000000018BF4 53                   push        rbx  
0000000000018BF5 55                   push        rbp  
0000000000018BF6 48 83 EC 58          sub         rsp,58h  
0000000000018BFA 48 8B E9             mov         rbp,rcx  
0000000000018BFD 49 8B D8             mov         rbx,r8  
0000000000018C00 48 8D 0D 01 A7 00 00 lea         rcx,[string "d\03\0d\01\01\0.\0d\0l\0l\0\0" (023308h)]  
0000000000018C07 FF 15 F3 84 00 00    call        qword ptr [__imp_LoadLibraryW (021100h)]  
0000000000018C0D 48 85 C0             test        rax,rax  
0000000000018C10 0F 84 4B 01 00 00    je          Windows::D3D11::tryToCreate_onXPOrLater+171h (018D61h)  
0000000000018C16 48 8D 15 03 A7 00 00 lea         rdx,[string "D3D11CreateDevice" (023320h)]  
0000000000018C1D 48 89 74 24 70       mov         qword ptr [rsp+70h],rsi  
0000000000018C22 48 8B C8             mov         rcx,rax  
0000000000018C25 FF 15 FD 84 00 00    call        qword ptr [__imp_GetProcAddress (021128h)]  
0000000000018C2B 48 8B F0             mov         rsi,rax  
0000000000018C2E 48 85 C0             test        rax,rax  
0000000000018C31 0F 84 0A 01 00 00    je          Windows::D3D11::tryToCreate_onXPOrLater+151h (018D41h)  
0000000000018C37 48 8D 44 24 78       lea         rax,[rsp+78h]  
0000000000018C3C 48 89 BC 24 80 00 00 00 mov         qword ptr [rsp+80h],rdi  
0000000000018C44 4C 89 74 24 50       mov         qword ptr [rsp+50h],r14  
0000000000018C49 45 33 C0             xor         r8d,r8d  
0000000000018C4C 45 33 F6             xor         r14d,r14d  
0000000000018C4F 33 C9                xor         ecx,ecx  
0000000000018C51 4C 89 74 24 48       mov         qword ptr [rsp+48h],r14  
0000000000018C56 48 89 44 24 40       mov         qword ptr [rsp+40h],rax  
0000000000018C5B 4C 89 74 24 38       mov         qword ptr [rsp+38h],r14  
0000000000018C60 C7 44 24 30 07 00 00 00 mov         dword ptr [rsp+30h],7  
0000000000018C68 45 8D 4E 21          lea         r9d,[r14+21h]  
0000000000018C6C 44 89 74 24 28       mov         dword ptr [rsp+28h],r14d  
0000000000018C71 41 8D 56 01          lea         edx,[r14+1]  
0000000000018C75 4C 89 74 24 20       mov         qword ptr [rsp+20h],r14  
0000000000018C7A FF D6                call        rsi  
0000000000018C7C 8B F8                mov         edi,eax  
0000000000018C7E 48 85 DB             test        rbx,rbx  
0000000000018C81 74 0E                je          Windows::D3D11::tryToCreate_onXPOrLater+0A1h (018C91h)  
0000000000018C83 85 C0                test        eax,eax  
0000000000018C85 79 0E                jns         Windows::D3D11::tryToCreate_onXPOrLater+0A5h (018C95h)  
0000000000018C87 48 8B D3             mov         rdx,rbx  
0000000000018C8A 8B C8                mov         ecx,eax  
0000000000018C8C E8 EF FE FF FF       call        Windows::D3D11::onD3D11Error (018B80h)  
0000000000018C91 85 FF                test        edi,edi  
0000000000018C93 78 36                js          Windows::D3D11::tryToCreate_onXPOrLater+0DBh (018CCBh)  
0000000000018C95 8B 44 24 78          mov         eax,dword ptr [rsp+78h]  
0000000000018C99 44 8B C0             mov         r8d,eax  
0000000000018C9C 48 85 DB             test        rbx,rbx  
0000000000018C9F 74 11                je          Windows::D3D11::tryToCreate_onXPOrLater+0C2h (018CB2h)  
0000000000018CA1 BA 00 0D 00 10       mov         edx,10000D00h  
0000000000018CA6 48 8B CB             mov         rcx,rbx  
0000000000018CA9 E8 52 F9 FF FF       call        report (018600h)  
0000000000018CAE 8B 44 24 78          mov         eax,dword ptr [rsp+78h]  
0000000000018CB2 3D 00 A0 00 00       cmp         eax,0A000h  
0000000000018CB7 73 2D                jae         Windows::D3D11::tryToCreate_onXPOrLater+0F6h (018CE6h)  
0000000000018CB9 48 85 DB             test        rbx,rbx  
0000000000018CBC 74 0D                je          Windows::D3D11::tryToCreate_onXPOrLater+0DBh (018CCBh)  
0000000000018CBE BA 04 0D 00 80       mov         edx,80000D04h  
0000000000018CC3 48 8B CB             mov         rcx,rbx  
0000000000018CC6 E8 25 F9 FF FF       call        report (0185F0h)  
0000000000018CCB 32 C0                xor         al,al  
0000000000018CCD 48 8B BC 24 80 00 00 00 mov         rdi,qword ptr [rsp+80h]  
0000000000018CD5 4C 8B 74 24 50       mov         r14,qword ptr [rsp+50h]  
0000000000018CDA 48 8B 74 24 70       mov         rsi,qword ptr [rsp+70h]  
0000000000018CDF 48 83 C4 58          add         rsp,58h  
0000000000018CE3 5D                   pop         rbp  
0000000000018CE4 5B                   pop         rbx  
0000000000018CE5 C3                   ret  
0000000000018CE6 48 8D 45 08          lea         rax,[rbp+8]  
0000000000018CEA 41 B9 21 00 00 00    mov         r9d,21h  
0000000000018CF0 48 89 44 24 48       mov         qword ptr [rsp+48h],rax  
0000000000018CF5 45 33 C0             xor         r8d,r8d  
0000000000018CF8 4C 89 74 24 40       mov         qword ptr [rsp+40h],r14  
0000000000018CFD 48 8D 44 24 78       lea         rax,[rsp+78h]  
0000000000018D02 48 89 6C 24 38       mov         qword ptr [rsp+38h],rbp  
0000000000018D07 33 C9                xor         ecx,ecx  
0000000000018D09 C7 44 24 30 07 00 00 00 mov         dword ptr [rsp+30h],7  
0000000000018D11 41 8D 51 E0          lea         edx,[r9-20h]  
0000000000018D15 C7 44 24 28 01 00 00 00 mov         dword ptr [rsp+28h],1  
0000000000018D1D 48 89 44 24 20       mov         qword ptr [rsp+20h],rax  
0000000000018D22 FF D6                call        rsi  
0000000000018D24 8B F8                mov         edi,eax  
0000000000018D26 48 85 DB             test        rbx,rbx  
0000000000018D29 74 0E                je          Windows::D3D11::tryToCreate_onXPOrLater+149h (018D39h)  
0000000000018D2B 85 C0                test        eax,eax  
0000000000018D2D 79 0E                jns         Windows::D3D11::tryToCreate_onXPOrLater+14Dh (018D3Dh)  
0000000000018D2F 48 8B D3             mov         rdx,rbx  
0000000000018D32 8B C8                mov         ecx,eax  
0000000000018D34 E8 47 FE FF FF       call        Windows::D3D11::onD3D11Error (018B80h)  
0000000000018D39 85 FF                test        edi,edi  
0000000000018D3B 78 8E                js          Windows::D3D11::tryToCreate_onXPOrLater+0DBh (018CCBh)  
0000000000018D3D B0 01                mov         al,1  
0000000000018D3F EB 8C                jmp         Windows::D3D11::tryToCreate_onXPOrLater+0DDh (018CCDh)  
0000000000018D41 48 85 DB             test        rbx,rbx  
0000000000018D44 74 0D                je          Windows::D3D11::tryToCreate_onXPOrLater+163h (018D53h)  
0000000000018D46 BA 05 0D 00 80       mov         edx,80000D05h  
0000000000018D4B 48 8B CB             mov         rcx,rbx  
0000000000018D4E E8 9D F8 FF FF       call        report (0185F0h)  
0000000000018D53 32 C0                xor         al,al  
0000000000018D55 48 8B 74 24 70       mov         rsi,qword ptr [rsp+70h]  
0000000000018D5A 48 83 C4 58          add         rsp,58h  
0000000000018D5E 5D                   pop         rbp  
0000000000018D5F 5B                   pop         rbx  
0000000000018D60 C3                   ret  
0000000000018D61 48 85 DB             test        rbx,rbx  
0000000000018D64 74 0D                je          Windows::D3D11::tryToCreate_onXPOrLater+183h (018D73h)  
0000000000018D66 BA 05 0D 00 80       mov         edx,80000D05h  
0000000000018D6B 48 8B CB             mov         rcx,rbx  
0000000000018D6E E8 7D F8 FF FF       call        report (0185F0h)  
0000000000018D73 32 C0                xor         al,al  
0000000000018D75 48 83 C4 58          add         rsp,58h  
0000000000018D79 5D                   pop         rbp  
0000000000018D7A 5B                   pop         rbx  
0000000000018D7B C3                   ret 
… dann sieht man, dass VC drei returns mit quasi identischen Befehlen in diese Funktion kompiliert hat. Entfernen wir die (leider nur in diesem Fall) überflüssige bool hasSucceeded:

Code: Alles auswählen

⇨

	// Load “d3d11.dll” (not available on XP, Vista without platform upgrade, etc.) and find the factory for all D3D 11
	//  interfaces, “D3D11CreateDevice()”:
	if(auto d3d11_dll = Windows::tryToLoadModule(UTF16("d3d11.dll"))) {

		if(auto createDevice = tryToFindFunction<decltype(D3D11CreateDevice)>(*d3d11_dll, "D3D11CreateDevice")) {

			if(callCreateDevice(result, *createDevice, minimumRequirement, supervisorOrNull)) {
⇨				return yes;
			}

		} else {
			report(supervisorOrNull, Error::noD3D11);
		}

		// Leave the D3D 11 DLL allocated, it does no any harm and speeds up re-use.
		// Windows::release(*d3d11_dll);
	} else {
		report(supervisorOrNull, Error::noD3D11);
	}

⇨	return no;
… haben wir 94 Befehle in 343 Bytes, und nur noch einen einzigen return-Pfad:

Code: Alles auswählen

0000000000018BF0 48 89 5C 24 08       mov         qword ptr [rsp+8],rbx  
0000000000018BF5 48 89 6C 24 18       mov         qword ptr [rsp+18h],rbp  
0000000000018BFA 89 54 24 10          mov         dword ptr [rsp+10h],edx  
0000000000018BFE 56                   push        rsi  
0000000000018BFF 57                   push        rdi  
0000000000018C00 41 56                push        r14  
0000000000018C02 48 83 EC 50          sub         rsp,50h  
0000000000018C06 48 8B E9             mov         rbp,rcx  
0000000000018C09 49 8B D8             mov         rbx,r8  
0000000000018C0C 48 8D 0D F5 A6 00 00 lea         rcx,[string "d\03\0d\01\01\0.\0d\0l\0l\0\0" (023308h)]  
0000000000018C13 FF 15 E7 84 00 00    call        qword ptr [__imp_LoadLibraryW (021100h)]  
0000000000018C19 48 85 C0             test        rax,rax  
0000000000018C1C 0F 84 FC 00 00 00    je          Windows::D3D11::tryToCreate_onXPOrLater+12Eh (018D1Eh)  
0000000000018C22 48 8D 15 F7 A6 00 00 lea         rdx,[string "D3D11CreateDevice" (023320h)]  
0000000000018C29 48 8B C8             mov         rcx,rax  
0000000000018C2C FF 15 F6 84 00 00    call        qword ptr [__imp_GetProcAddress (021128h)]  
0000000000018C32 48 8B F0             mov         rsi,rax  
0000000000018C35 48 85 C0             test        rax,rax  
0000000000018C38 0F 84 E0 00 00 00    je          Windows::D3D11::tryToCreate_onXPOrLater+12Eh (018D1Eh)  
0000000000018C3E 45 33 F6             xor         r14d,r14d  
0000000000018C41 48 8D 44 24 78       lea         rax,[rsp+78h]  
0000000000018C46 4C 89 74 24 48       mov         qword ptr [rsp+48h],r14  
0000000000018C4B 45 33 C0             xor         r8d,r8d  
0000000000018C4E 48 89 44 24 40       mov         qword ptr [rsp+40h],rax  
0000000000018C53 33 C9                xor         ecx,ecx  
0000000000018C55 4C 89 74 24 38       mov         qword ptr [rsp+38h],r14  
0000000000018C5A C7 44 24 30 07 00 00 00 mov         dword ptr [rsp+30h],7  
0000000000018C62 45 8D 4E 21          lea         r9d,[r14+21h]  
0000000000018C66 44 89 74 24 28       mov         dword ptr [rsp+28h],r14d  
0000000000018C6B 41 8D 56 01          lea         edx,[r14+1]  
0000000000018C6F 4C 89 74 24 20       mov         qword ptr [rsp+20h],r14  
0000000000018C74 FF D6                call        rsi  
0000000000018C76 8B F8                mov         edi,eax  
0000000000018C78 48 85 DB             test        rbx,rbx  
0000000000018C7B 74 0E                je          Windows::D3D11::tryToCreate_onXPOrLater+9Bh (018C8Bh)  
0000000000018C7D 85 C0                test        eax,eax  
0000000000018C7F 79 12                jns         Windows::D3D11::tryToCreate_onXPOrLater+0A3h (018C93h)  
0000000000018C81 48 8B D3             mov         rdx,rbx  
0000000000018C84 8B C8                mov         ecx,eax  
0000000000018C86 E8 F5 FE FF FF       call        Windows::D3D11::onD3D11Error (018B80h)  
0000000000018C8B 85 FF                test        edi,edi  
0000000000018C8D 0F 88 9D 00 00 00    js          Windows::D3D11::tryToCreate_onXPOrLater+140h (018D30h)  
0000000000018C93 8B 44 24 78          mov         eax,dword ptr [rsp+78h]  
0000000000018C97 44 8B C0             mov         r8d,eax  
0000000000018C9A 48 85 DB             test        rbx,rbx  
0000000000018C9D 74 11                je          Windows::D3D11::tryToCreate_onXPOrLater+0C0h (018CB0h)  
0000000000018C9F BA 00 0D 00 10       mov         edx,10000D00h  
0000000000018CA4 48 8B CB             mov         rcx,rbx  
0000000000018CA7 E8 54 F9 FF FF       call        report (018600h)  
0000000000018CAC 8B 44 24 78          mov         eax,dword ptr [rsp+78h]  
0000000000018CB0 3D 00 A0 00 00       cmp         eax,0A000h  
0000000000018CB5 73 0C                jae         Windows::D3D11::tryToCreate_onXPOrLater+0D3h (018CC3h)  
0000000000018CB7 48 85 DB             test        rbx,rbx  
0000000000018CBA 74 74                je          Windows::D3D11::tryToCreate_onXPOrLater+140h (018D30h)  
0000000000018CBC BA 04 0D 00 80       mov         edx,80000D04h  
0000000000018CC1 EB 65                jmp         Windows::D3D11::tryToCreate_onXPOrLater+138h (018D28h)  
0000000000018CC3 48 8D 45 08          lea         rax,[rbp+8]  
0000000000018CC7 41 B9 21 00 00 00    mov         r9d,21h  
0000000000018CCD 48 89 44 24 48       mov         qword ptr [rsp+48h],rax  
0000000000018CD2 45 33 C0             xor         r8d,r8d  
0000000000018CD5 4C 89 74 24 40       mov         qword ptr [rsp+40h],r14  
0000000000018CDA 48 8D 44 24 78       lea         rax,[rsp+78h]  
0000000000018CDF 48 89 6C 24 38       mov         qword ptr [rsp+38h],rbp  
0000000000018CE4 33 C9                xor         ecx,ecx  
0000000000018CE6 C7 44 24 30 07 00 00 00 mov         dword ptr [rsp+30h],7  
0000000000018CEE 41 8D 51 E0          lea         edx,[r9-20h]  
0000000000018CF2 C7 44 24 28 01 00 00 00 mov         dword ptr [rsp+28h],1  
0000000000018CFA 48 89 44 24 20       mov         qword ptr [rsp+20h],rax  
0000000000018CFF FF D6                call        rsi  
0000000000018D01 8B F8                mov         edi,eax  
0000000000018D03 48 85 DB             test        rbx,rbx  
0000000000018D06 74 0E                je          Windows::D3D11::tryToCreate_onXPOrLater+126h (018D16h)  
0000000000018D08 85 C0                test        eax,eax  
0000000000018D0A 79 0E                jns         Windows::D3D11::tryToCreate_onXPOrLater+12Ah (018D1Ah)  
0000000000018D0C 48 8B D3             mov         rdx,rbx  
0000000000018D0F 8B C8                mov         ecx,eax  
0000000000018D11 E8 6A FE FF FF       call        Windows::D3D11::onD3D11Error (018B80h)  
0000000000018D16 85 FF                test        edi,edi  
0000000000018D18 78 16                js          Windows::D3D11::tryToCreate_onXPOrLater+140h (018D30h)  
0000000000018D1A B0 01                mov         al,1  
0000000000018D1C EB 14                jmp         Windows::D3D11::tryToCreate_onXPOrLater+142h (018D32h)  
0000000000018D1E 48 85 DB             test        rbx,rbx  
0000000000018D21 74 0D                je          Windows::D3D11::tryToCreate_onXPOrLater+140h (018D30h)  
0000000000018D23 BA 05 0D 00 80       mov         edx,80000D05h  
0000000000018D28 48 8B CB             mov         rcx,rbx  
0000000000018D2B E8 C0 F8 FF FF       call        report (0185F0h)  
0000000000018D30 32 C0                xor         al,al  
0000000000018D32 48 8B 5C 24 70       mov         rbx,qword ptr [rsp+70h]  
0000000000018D37 48 8B AC 24 80 00 00 00 mov         rbp,qword ptr [rsp+80h]  
0000000000018D3F 48 83 C4 50          add         rsp,50h  
0000000000018D43 41 5E                pop         r14  
0000000000018D45 5F                   pop         rdi  
0000000000018D46 5E                   pop         rsi  
0000000000018D47 C3                   ret  
Das ist genau das Verhalten, das man nicht erwartet hätte: Ergebnis in einer Variable festhalten und einmal return schreiben produziert drei Pfade. Ergebnis an zwei verschiedenen Stellen explizit returnen produziert nur noch einen. Scheiße!

Nun sind das in diesem Beispiel 15 % Größe, die flöten gegangen sind. Normalerweise kann sogar ich über sowas hinwegsehen. Aber das Problem ist überall, in fast jeder Funktion, deren Disassembly ich ansehe.

Sie hatten auch geprahlt, dass Windows und verschiedene Microsoft-Produkte mit dem neuen Compiler ein Promille kleiner geworden wären:
https://blogs.msdn.microsoft.com/vcblog/2016/05/04/new-code-optimizer/ hat geschrieben:Application    Old optimizer      New optimizer      Reduction
Windows        1,112,545,269      1,112,096,059         438 KB
SQL Server        64,078,336         64,032,256          46 KB
Chakra             5,963,621          5,952,997          10 KB
Meine Tools sind mit dem neuen Optimizer 20 % (!!!) größer geworden. Das kann ich an der x86-Version sehen, die vorher nur ein paar Prozent kleiner war, und jetzt neben x64 verschwindend klein aussieht. (Der neue Optimizer ist ausschließlich x64.)

Scheiße scheiße scheiße. Der Optimizer ist jung, und niemand erwartet nach dem ersten Release Perfektion. Dann postet aber bitte nicht diese lächerlichen Windows-Größenvergleiche (da sind eh die DLL-Ressourcen und Manifests und Lokalisierungen der Platzfresser, und 438 KiB Ersparnis auf über 1 GiB Daten klingt sogar in meinen Ohren armselig) und macht ihn zum Opt-In!
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Krishty
Establishment
Beiträge: 8316
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Jammer-Thread

Beitrag von Krishty »

  void foo(size_t);

  …
  int x = 8;
  foo(1 << x); // warning C4334: '<<': result of 32-bit shift implicitly converted to 64 bits (was 64-bit shift intended?)


Nagut:

  foo(uint32_t(1 << x)); // warning C6297: Arithmetic overflow: 32-bit value is shifted, then cast to 64-bit value. Results might not be an expected value.

wat

  foo(size_t(uint32_t(1 << x))); // warning C4334: '<<': result of 32-bit shift implicitly converted to 64 bits (was 64-bit shift intended?)

Wo ist das implizit? Warum nervt der Compiler mich damit? Warum seid ihr alle gefeuert?

Bild
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
dot
Establishment
Beiträge: 1745
Registriert: 06.03.2004, 18:10
Echter Name: Michael Kenzel
Kontaktdaten:

Re: Jammer-Thread

Beitrag von dot »

foo(size_t {1} << x); ;)
Benutzeravatar
Krishty
Establishment
Beiträge: 8316
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Jammer-Thread

Beitrag von Krishty »

Nein, das ist ein 64-Bit-Shift. Ich will einen 32-Bit-Shift!
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
dot
Establishment
Beiträge: 1745
Registriert: 06.03.2004, 18:10
Echter Name: Michael Kenzel
Kontaktdaten:

Re: Jammer-Thread

Beitrag von dot »

Ja, das muss wohl ein Bug sein, VS 2013 kompiliert das hier ohne warning

Code: Alles auswählen

int main()
{
	int x = 2;
	static_cast<size_t>(1 << x);
}
Es scheint wichtig zu sein dass ein Argument eine Variable ist, sonst kommt die Warning nicht...

Reportest du?
Benutzeravatar
Krishty
Establishment
Beiträge: 8316
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Jammer-Thread

Beitrag von Krishty »

Nachdem Connect drei Minuten(!) lang gesucht hat: https://connect.microsoft.com/VisualStu ... ls/2351352

Seit Februar offen, war schon in Update 2. Upvote!
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Krishty
Establishment
Beiträge: 8316
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Jammer-Thread

Beitrag von Krishty »

Ich bin in Visual Studio mit meinem Firmenkonto angemeldet

damit werde ich auch automatisch in Chrome angemeldet, sobald ich Microsoft.com besuche

in Chrome wollte ich mich dann mit meinem Privatkonto anmelden

was passiert?

ALLES SCHROTT

jetzt leiten beide Konten auf die selbe Identität, aber mit unterschiedlichen E-Mail-Adressen, und die Privatinformationen wurden für das Firmenkonto übernommen und ich kann nichts mehr ändern weil ich nur noch das Privatkonto angezeigt bekomme, auch wenn ich mich mit Firmen-Credentials einlogge

WHAT THE FUCKING FUCK

trotz unterschiedlicher Namen, unterschiedlicher E-Mail-Adressen, unterschiedlicher Domains … jetzt sind das alles die Privatinfos

FUCK FUCK FUCK FUCK FUCK

DAS WAR DER GRUND, WARUM ICH SEIT ZWEI JAHREN KEIN FEEDBACK MEHR ABGEGEBEN HABE, GANZ GENAU DIESE SCHEIßE HATTE ICH DAMALS AUCH SCHON
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
DerAlbi
Establishment
Beiträge: 269
Registriert: 20.05.2011, 05:37

Re: Jammer-Thread

Beitrag von DerAlbi »

Also.. dass das mit der Größe in deinen Programmen schlechter geworden ist, könnte ich mir durchaus mit deiner händischen Optimierung erklären. Du hast wahrscheinlich (unter)bewusst angefangen Code für den Compiler zu designen anstatt sich einzig um die Programmlogik und das Datengesign zu kümmern. Da jetzt der Compiler anders ist, ist jede Stelle, die für den alten Compiler toll war, für den neuen vielleicht lästig.
Vielleicht muss man Codeoptimierung über verschiedene Compiler gegenchecken und vielleicht auch einen Schritt zurücktreten: das Laden von DX11 ist kein Ort, um Optimierungen zu beurteilen, oder? ;-) Ist es mit -Os [das MSVC-äquivalent] compiliert?

Und wozu muss man sich beim Programmieren neuerdings anmelden? :-O
Benutzeravatar
Krishty
Establishment
Beiträge: 8316
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Jammer-Thread

Beitrag von Krishty »

Ja; du hast mit der Optimierung auf den Compiler wahrscheinlich recht. Allerdings:

Der alte Optimizer war stark lokal begrenzt, wegen den Wurzeln auf DOS mit 64 KiB RAM. Der Optimizer hat eigentlich äquivalente Code-Stücke unterschiedlich optimiert, wenn z.B. die Reihenfolge der Operationen unterschiedlich war. Das galt als Gag bei Clang und GCC, weil die auf Static Single Assignment Form aufbauen, und die ist dabei wesentlich robuster.

Der neue Optimizer von Microsoft baut ebenfalls auf SSA auf, deshalb sollte nun Schluss mit sowas sein. Was aber stattdessen passiert: semantisch äquivalente Code-Stücke werden wieder unterschiedlich optimiert, weil irgendwo eine temporäre Variable zu viel oder zu wenig ist. Aua.

Das Laden von D3D 11 war als Beispiel geeignet, weil es a) kürzer ist als die anderen Funktionen mit diesem Problem und b) ich gerade davor saß als mir der Kragen platzte. Optimiert war der Code in beiden Fällen für Geschwindigkeit.
Und wozu muss man sich beim Programmieren neuerdings anmelden? :-O
Man muss sich in Visual Studio mit einem Microsoft-Konto anmelden, um es kostenlos nutzen zu können. Um Bugs zu melden muss man sich erst mit seinem Microsoft-Konto anmelden, und dann ein damit verknüpftes Microsoft Connect-Konto erstellen, oder so ein ähnlicher Schwachsinn.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
DerAlbi
Establishment
Beiträge: 269
Registriert: 20.05.2011, 05:37

Re: Jammer-Thread

Beitrag von DerAlbi »

Optimiere mal auf Code-Größe und gucke, was passiert.
Die performancekritischen strücke kannst du, solange du mehere cpps hast , getrennt auf Geschwindigkeit optimieren.
Ich vermute fast, dass das mehr bringt als jede händische optimierung.
Du weißt, wo du keinen Platz verschwenden willst -> CPP auf Größe kompilieren. Du weißt, welcher Code kritisch ist -> auf Geschwindigkeit optimieren.
Hast du beide Optimierungsziele in einer CPP, sortiere um.
kA, was LTO dann macht.. aber einen Test ist es Wert.
Berichte :-)

Aber ich verstehe die Frustration. Optimizer sollten sich deterministisch verhalten. Aber GCC tut das auch nicht.
Benutzeravatar
Krishty
Establishment
Beiträge: 8316
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Jammer-Thread

Beitrag von Krishty »

DerAlbi hat geschrieben:Optimiere mal auf Code-Größe und gucke, was passiert.
Aber das tut doch nichts zur Sache: Wenn es ein Ding der Optimierung auf Geschwindigkeit WÄRE, müssten ja trotzdem beide Versionen identisch sein, weil der Compiler äquivalenten Code gegen ein gemeinsames Optimum transformieren soll!
Die performancekritischen strücke kannst du, solange du mehere cpps hast , getrennt auf Geschwindigkeit optimieren.
Ich vermute fast, dass das mehr bringt als jede händische optimierung.
Du weißt, wo du keinen Platz verschwenden willst -> CPP auf Größe kompilieren. Du weißt, welcher Code kritisch ist -> auf Geschwindigkeit optimieren.
Hast du beide Optimierungsziele in einer CPP, sortiere um.
kA, was LTO dann macht.. aber einen Test ist es Wert.
Für sowas gibt es Profile-Guided Optimization ;) In Visual C++ wird dann auch eine Klasse neuer Optimierungen aktiv, die so nicht zur Verfügung stehen (z.B. Optimierung auf Sprungvorhersage).
Aber ich verstehe die Frustration. Optimizer sollten sich deterministisch verhalten. Aber GCC tut das auch nicht.
Ja; um mal cbloom zu zitieren:
We've struggled a lot with modern clang/LLVM/GCC. The problem is that you poke at the code in some seemingly innocuous way and the performance jumps massively because it either enables or disables some optimization opportunity. It makes iterative tweaking almost impossible, because it's hard to tell if some little change was actually a fundamental algorithm improvement, or if it just tripped the optimizer into something else.
Er hält dem VC++ gegenüber, das den Code wörtlicher nimmt. Aber das ist jetzt wohl vorbei.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
DerAlbi
Establishment
Beiträge: 269
Registriert: 20.05.2011, 05:37

Re: Jammer-Thread

Beitrag von DerAlbi »

Ich verstehe deinen Punkt schon und mich kotzt diese konzeptuelle schwäche auch an. Das ist letztlich vergleichbar mit den "äquivalenten" Schleifen, die ich bisschen über dir geschrieben hatte.
Ich weiß auch nicht, wieso das so ist. Das sieht nach einem konstruktionsfehler im Compiler aus.
Wenn das gleiche dasteht, muss auch das gleiche rauskommen.
Als würden die Optimizer-Passen in der falschen Reihenfolge und nur 1x geschehen oder so.

Lass uns einen ZFX-Compiler bauen. Danach verstehen wir, warum das alles nicht so geht, wie wir wollen.
Benutzeravatar
Krishty
Establishment
Beiträge: 8316
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Jammer-Thread

Beitrag von Krishty »

DerAlbi hat geschrieben:Lass uns einen ZFX-Compiler bauen. Danach verstehen wir, warum das alles nicht so geht, wie wir wollen.
Ja; ich setze mich gleich nach meinem ZFX-Betriebssystem dran …
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
DerAlbi
Establishment
Beiträge: 269
Registriert: 20.05.2011, 05:37

Re: Jammer-Thread

Beitrag von DerAlbi »

Das ist heutzutage zum glück trivial dank #include<os>.
Wenn mans wirklich selbst schreiben will, leitet man einfach eine Kindklasse davon ab. :lol:
Benutzeravatar
Krishty
Establishment
Beiträge: 8316
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Jammer-Thread

Beitrag von Krishty »

Geiler Vortrag, danke!
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Krishty
Establishment
Beiträge: 8316
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Jammer-Thread

Beitrag von Krishty »

Hab’s erst jetzt erfahren, aber Michael Kaplan ist letztes Jahr gestorben. Er war Microsoft-Urgestein und hat sich dort fast 20 Jahre lang um Unicode und Internationalisierung gekümmert. Seine Blog-Posts waren unfassbar hilfreich bei jeder API-Nische, die irgendwie mit Unicode zu tun hat (z.B.: Wie unterscheidet NTFS Dateinamen mit exotischen Steuerzeichen?). Vor Jahren wurde alles im Streit gelöscht, Sicherheitskopien hier.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Jonathan
Establishment
Beiträge: 2545
Registriert: 04.08.2004, 20:06
Kontaktdaten:

Re: Jammer-Thread

Beitrag von Jonathan »

Sagmal, diese behinderten Flash-Player Updates gibt es doch nur noch, damit man irgendwann einmal aus Versehen nicht die angebotene Zusatzsoftware abwählt, oder?
Ich stelle es mir äußerst schwierig vor, einen Video-Player zu schreiben, der so unstabil ist, dass alle zwei Wochen eine neue kritische Sicherheitslücke gefunden werden kann. Das Ding ist kein Betriebssystem, das Ding spielt Videos ab (oder nicht?). Natürlich ist das nicht unbedingt trivial, aber es ist doch trotzdem überschaubar. Und selbst wenn es so kaputt sein sollte, hätte man da nicht langsam mal auf die Idee kommen müssen, eine Neuentwicklung zu beginnen? Vielleicht in einer dieser coolen neuen Programmiersprachen, die von Haus aus 95% aller Fehler die man in z.B. C so machen kann komplett verhindern?

Natürlich würde ich den am liebsten gar nicht mehr installiert haben. Aber ab und zu landet man dann doch nochmal auf einer Webseite, wo dann die Videos nicht mehr funktionieren. Kaputtes Internet ist dann auch irgendwie doof.
Lieber dumm fragen, als dumm bleiben!
https://jonathank.de/games/
Tiles

Re: Jammer-Thread

Beitrag von Tiles »

Naja, Flash ist eben doch ein wenig mehr als nur ein Videoplayer. Das ist im Grunde eine kleine Spieleengine samt eigener Sprache. Siehe Flashgames. Die Neuentwicklung heisst WebGL. So richtig einzuschlagen scheint das aber auch nicht irgendwie :/
Benutzeravatar
Chromanoid
Moderator
Beiträge: 4273
Registriert: 16.10.2002, 19:39
Echter Name: Christian Kulenkampff
Wohnort: Lüneburg

Re: Jammer-Thread

Beitrag von Chromanoid »

Sichere VMs zu entwickeln, die performanten Zugriff auf die Hardware haben, ist einfach nicht so leicht... Als Entwickler bin ich ein Fan von Flash und AIR. Das sind wirklich gute Werkzeuge, die vielen Leuten ein Auskommen mit "digitalen Kulturprodukten" beschert haben.
Benutzeravatar
Krishty
Establishment
Beiträge: 8316
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Jammer-Thread

Beitrag von Krishty »

Flash … Adobe … Sicherheitsprobleme … da war doch was … ach ja, fefe!
Der aktuelle Höhepunkt in diesem Kasperletheater ist der Security-Chef von Adobe (Der Brüller! Adobe hat tatsächlich einen Security-Chef!)

Der hat sich tatsächlich hingestellt (auf einer Kaspersky-Konferenz, das passt auch mal wieder wie Arsch auf Eimer) und dem staunenden Publikum erklärt, dass es Adobe ja gar nicht darum geht, die Bugs zu fixen. Stattdessen sei das Ziel, das Ausnutzen der Bugs teurer zu machen. Und aus diesem Gesichtspunkt verurteilte er die Forscher, die es wagen, Papiere darüber zu veröffentlichen, wie man die sinnlosen Mitigations umgeht.
Weil ja immer viel zu wenig wirtschaftliches Denken in der Schule gelehrt wird, nochmal deutlich: Adobe als Firma ist nicht primär dazu da, deinen Computer mit sicherer Software zu bereichern, sondern ihren Gewinn zu maximieren. Bugs beheben kostet Zeit und damit Geld. Zu viele Bugs wiederum verhindern, dass sie mit ihrer Adware gewisse Kunden erreichen. In der Gewinnfunktion sucht man nun ein Maximum. Das liegt augenscheinlich dabei, bis ans Ende der Zeit jede Woche die zwei oder drei Sicherheitslücken zu stopfen, die gerade von besonders vielen Erpressungstrojanern ausgenutzt werden.

Neuentwicklungen sind wirtschaftlich eine besonders teure Katastrophe. Denn eine Neuentwicklung kostet nicht nur viel viel Geld, das sie erst Jahre später wieder einbringt, sondern sie hält das Entwickerteam auch davon ab, das bestehende Produkt zu erweitern, reduziert also zusätzlich dein bestehndes Einkommen. Ganz ab davon, dass sie nicht automatisch besser wird, weil man Rust benutzt, denn VM-Entwicklung ist – wie Chromanoid schon sagte – nicht trivial, und der ganze Code aus den Jahren davor existiert nicht zum Spaß.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Tiles

Re: Jammer-Thread

Beitrag von Tiles »

The fuck? O_O
Antworten