Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Mo Jun 03, 2024 23:25

Foren-Übersicht » Programmierung » Einsteiger-Fragen
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 20 Beiträge ]  Gehe zu Seite Vorherige  1, 2
Autor Nachricht
 Betreff des Beitrags: Re: Schnee!
BeitragVerfasst: Mi Dez 03, 2014 18:30 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Nov 08, 2010 18:41
Beiträge: 769
Programmiersprache: Gestern
Wobei dir das natürlich nur dann hilft wenn deine Daten relativ statisch sind. Sprich deine äußere Struktur muss dafür sorgen das das auch passt. Wenn du sehr viel hin und her musst dann ist es eher hinderlich. Du kannst dir ja mal just for fun irgendwann Lisp anschauen. Das ist quasi das komplette Gegenteil.

btw: oder Points ala Quake (gibts das eigentlich noch mit Shadern ???)

_________________
Meine Homepage


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Schnee!
BeitragVerfasst: Mi Dez 03, 2014 19:50 
Offline
DGL Member

Registriert: Do Nov 20, 2014 03:18
Beiträge: 36
Wohnort: Stuttgart
Programmiersprache: C++ (Java, Ada,...)
OpenglerF hat geschrieben:
Zitat:
Wieviele Byte liest der Cache genau voraus?

Ein Cache ist aus Cache-Lines organisiert. Auf der x86/x64 Architektur immer 64 Bytes groß.

In 4KB passen häufig eine Menge Container-Elemente. )

Sehr gute Infos. Bei Quellen im Netz weiss man ja nie, wie aktuell die Angaben sind.

yunharla hat geschrieben:
Wobei dir das natürlich nur dann hilft wenn deine Daten relativ statisch sind. Sprich deine äußere Struktur muss dafür sorgen das das auch passt.

Jup.

Werde mir übrigens demnächst auch mal was zu virtuellen Funktionen usw anlesen. Der Schnee entstand am zweiten Tag wo ich Zeit hatte mir mal C++ Syntax anzulernen. Wollte erst einen Array nehmen, aber man kennt ja vorher die Größe von Array und Objekten manchmal nicht. Vektoren tu ich mir an wenn Projekt fertig ist.
Hab 12-13 Prüfungen angemeldet, muss das erstmal hinter mich bringen, bleib hier aber noch aktiv. Hat jemand noch eine Idee zu meinem Thread mit der lüssigen Maussteuerung?
Gruß, Skel


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Schnee!
BeitragVerfasst: Do Dez 04, 2014 11:02 
Offline
DGL Member
Benutzeravatar

Registriert: Di Mai 18, 2004 16:45
Beiträge: 2622
Wohnort: Berlin
Programmiersprache: Go, C/C++
Folgende Präsi gibt nen recht guten eindruck, was im Cache/Speicher passiert, wenn man mit Objekten in Containern arbeitet.
http://research.scee.net/files/presentations/gcapaustralia09/Pitfalls_of_Object_Oriented_Programming_GCAP_09.pdf

Ab i5/AMD A10 CPU Generation sind sehr effizient indirekte Pointer auf zu lösen, du hast ein pointer auf ein Objekt und das enthält ein pointer auf die vtable und um das eigentlich auf zu lösen muss erst eine cacheline für das objekt gefüllt werden und dann die der vtable.
Die neue generation kann ohne es in die cacheline zu packen schon die vtable finden und in den cache packen.
Daher sind auf diesen CPU's virtual Methoden wesentlich schneller.

Das gabe es vorher nicht, weil einige Compiler vtables mit in den Objekt Speicher geschrieben haben(virtual und rtti ist sehr schnell) und einige nur nen Pointer am Anfang des Objektes geschrieben haben(speicher effizient und normale Methoden sowie member zugriffe sind schneller, weil die erste Cacheline schon die Daten enthalten).
Offensichtlich hat sich eine mehrheit auf pointer auf vtable gefunden.

Bzgl. der 4K Pages.
Das ist stark OS abhängig aber Windows z.B. alloziiert nicht nur ein 4K Page irgendwo sondern teilt in 3 reservierungsgrößen(find den MSDN Link ned :.( ).
Je nach dem wie viel du anfragst, tut Windows also nicht 4K Blöcke alloziieren sondern z.b. 16MB und gibt dir dann 2MB davon und ein reallocate von 3MB tut nix im OS, weil der Prozess bereits 16MB zur verfügung hat. Es wird also nur noch der allocator Funktion ein ok gegeben mit den gleichen start pointer und der neuen größe.
VMMap ist ein sehr nützliches stand alone Tool, welches die profiling API von Windows nutzt und ein tieferen einblick in den aktuellen Speicher gibt.
Man kann z.B. nicht VMMap und Concurrency Analyzer von VS2013 auf den gleichen Prozess laufen lassen.

Wenn man anfängt Caching und Memory zu optimieren sollte man schaun, dass man eine AMD CPU hat und CodeXL runter laden(kostenlos) oder bei Intel CPU's sich vTune kaufen(extrem teuer).
Beide Tools greifen auf die CPU internen Counter zu, welche schon Cache auslastung, effizienz, misses, cold cache und vieles mehr zu jeden Zeitpunkt tracken(fest in hardware gegossen).
Gleiches gilt auch für GPU mit Perfstudio für AMD und nsight für NVidia.

_________________
"Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren"
Benjamin Franklin

Projekte: https://github.com/tak2004


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Schnee!
BeitragVerfasst: Do Dez 04, 2014 17:27 
Offline
DGL Member

Registriert: Do Dez 29, 2011 19:40
Beiträge: 421
Wohnort: Deutschland, Bayern
Programmiersprache: C++, C, D, C# VB.Net
Zitat:
Je nach dem wie viel du anfragst, tut Windows also nicht 4K Blöcke alloziieren sondern z.b. 16MB und gibt dir dann 2MB davon und ein reallocate von 3MB tut nix im OS, weil der Prozess bereits 16MB zur verfügung hat.

Interessant. Der Link würde micht interessieren. :)

Bist du sicher, dass damit auch der physikalische Addressraum gemeint ist? Ich könnte mir denken, dass ich das nur auf den virtuellen Addressraum bezieht und im Physikalischen das nicht gilt und wieder (fast) beliebig zusammengemappt wird?(Zumindest im User-Mode Interface in 64K Blöcken) Kann ich mir nämlich schwer vorstellen, wenn dann in deinem Beispiele einfach mal 14MB physikalisch(!) verschwendet werden, wenn sie mit nicht wenig Wahrscheinlichkeit nie gebraucht werden. Außerdem habe ich mehrmals gelesen dass Windows physikalischen Speicher meistens lazy allokiert(wie scheinbar auch die anderen PC Betriebssysteme), also den tatsächlichen Speicher erst mappt, wenn der erste Zugriff darauf stattfindet. (Wohl nicht zu verwechseln mit einer "MEM_RESERVE" Allokation die im User Mode Ähnliches möglich macht.)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Schnee!
BeitragVerfasst: Fr Dez 05, 2014 10:20 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Nov 08, 2010 18:41
Beiträge: 769
Programmiersprache: Gestern
Joa, musst dir mal die Heap Funktionen auf MSDN anschauen. Da gibt es noch viel mehr als bei anderen Betriebssystemen. Aber ja im Prinzip ist das richtig. Der Speicher wird halt erst einmal nur reserviert und erst bei Gebrauch siehst du es dann auch. Kannst aber auch direkt an den Speicher.

_________________
Meine Homepage


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 20 Beiträge ]  Gehe zu Seite Vorherige  1, 2
Foren-Übersicht » Programmierung » Einsteiger-Fragen


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 25 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.009s | 14 Queries | GZIP : On ]