Windows Azure Cloud Storage ermöglicht es Ihnen bereits ab 0,10€ pro GB/Monat die Vorteile der Cloud zu nutzen.
Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.de  
   
Advanced Developers Conference     
Bücher-Shop mit Amazon (Buchkategorien)C++ : Referenzen zu C++ : C++ Builder : Visual C++ : C# : Java : Spieleprogrammierung : Systemprogrammierung Linux : Software-Entwicklung : .NET : Compilertechnik : Algorithmen & Datenstrukturen : Objektorientierung : Entwurfsmuster : UML : eXtreme Programming : Scrum : Projektmanagement : Software-Testing : Datenbanken : Tom DeMarco : Dilbert : User Friendly
C/C++ Forum :: Assembler ::  Explizites Cache Prefetch (?)     Zeige alle Beiträge auf einer Seite Auf Beitrag antworten
Autor Nachricht
krümelkacker
Mitglied

Benutzerprofil
Anmeldungsdatum: 10.08.2010
Beiträge: 1366
Beitrag krümelkacker Mitglied 16:51:29 12.08.2010   Titel:   Explizites Cache Prefetch (?)            Zitieren

Hat hier jemand auf x86 schon mal mit expliziten "cache prefetch"s gearbeitet? so, wie ich das verstanden habe, soll es möglich sein, dem CPU cache schon mal "vorzuwarnen", was als nächstes angefordert werden könnte. Wenn das jemand schon ausprobiert hat, könnte er sich ja mal hier melden und ein paar Tipps geben. :)

Ich habe hier im Moment mit relativ einfachen aber speicherintensiven Berechnungen zu tun und konnte entweder die Speicherbandbreite oder die Cache Misses als Bremse ausmachen. Darauf hin habe ich das Layout meiner Daten im Speicher optimiert und Schleifen entsprechend in ihrer Schachtelung umsortiert, so dass Speicherzugriffe möglichst linear (aufeinanderfolgende Adresse) erfolgen. Das hat schonmal etwa den Faktor 3 in der Geschwindigkeit ausgemacht. Ich würde jetzt noch gerne testen, ob "explizites prefetch" etwas bringt -- am liebsten als Inline-Assembler für'n GCC. Nur sowas hab ich noch nie gemacht ... :p

TIA,
kk
krümelkacker
Mitglied

Benutzerprofil
Anmeldungsdatum: 10.08.2010
Beiträge: 1366
Beitrag krümelkacker Mitglied 19:25:54 12.08.2010   Titel:              Zitieren

Habe gerade das hier gefunden:
http://gcc.gnu.org/projects/prefetch.html
(bin noch am Lesen, scheint aber interessant zu sein)
nurf
Mitglied

Benutzerprofil
Anmeldungsdatum: 09.04.2008
Beiträge: 261
Beitrag nurf Mitglied 20:30:38 12.08.2010   Titel:              Zitieren

Cache Prefetching bringt es tatsächlich, allerdings sollte man das einige Takte vor dem eigentlich Datenzugriff tun.

Falls du Ergebnisse "abspeichern" willst, die nicht mehr benötigt werden, würde ich noch "uncached memory write back" und "cache-pollution" als Thema empfehlen.
krümelkacker
Mitglied

Benutzerprofil
Anmeldungsdatum: 10.08.2010
Beiträge: 1366
Beitrag krümelkacker Mitglied 20:54:23 12.08.2010   Titel:              Zitieren

nurf schrieb:

Falls du Ergebnisse "abspeichern" willst, die nicht mehr benötigt werden, würde ich noch "uncached memory write back"

Das klingt gut. Ja, die Ergebnisse schreibe ich in ein riesiges Array linear rein -- Element für Element. Davon muss eigentlich nichts im Cache bleiben (passt eh nicht rein, da es typischerweise mehrere Hunderte von Megabytes sind).

nurf schrieb:

und "cache-pollution" als Thema empfehlen.

Ich denke, ich weiß, was Du damit meinst. Man sollte vermeiden, dass "unnütze" Daten im Cache landen und damit andere "wichtige" Daten aus dem Cache verdrängt werden.

Wie es aussieht, scheinen die "cache managemant instructions" aus der SSE/3Dnow Ecke zu kommen. Hat da jemand nen Tipp für ne nette Befehlsreferenz, die von einem "SIMD-Anfänger" verstanden werden kann?

kk
krümelkacker
Mitglied

Benutzerprofil
Anmeldungsdatum: 10.08.2010
Beiträge: 1366
Beitrag krümelkacker Mitglied 15:35:24 13.08.2010   Titel:              Zitieren

Assembler muss man (beim GCC zumindest) nicht dafür benutzen. Es gibt da nämlich seit GCC 3.1.1 (falls ich das richtig sehe), die Builtin-Funktion __builtin_prefetch.
rapso
Moderator

Benutzerprofil
Anmeldungsdatum: 17.06.2002
Beiträge: 7213
Beitrag rapso Moderator 15:59:04 23.08.2010   Titel:              Zitieren

allerdings haben neuere CPUs alle auch automatisches prefetching, man sollte also genau wissen was man macht, sonst koennte es langsammer werden.

_________________
Kilo Byte=1000,Kilobyte=1024 ANSI/IEEE Standard 1084-1986
rapso
-Mod im Spiele-/Grafikprogrammierung| rapsoo@hotmail.com | #dionysos irc.quakenet.org | amazon stole my PS3 :(
C/C++ Forum :: Assembler ::  Explizites Cache Prefetch (?)   Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum antworten.
Sie können Ihre Beiträge in diesem Forum nicht bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum nicht mitmachen.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.de ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info, www.c-sar.de, www.c-plusplus.net und www.baeckmann.de enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.