Frage

Die theoretische maximale Speicherbandbreite für einen Core 2-Prozessor mit DDR3 Dual-Channel-Speicher ist beeindruckend: Nach der Wikipedia-Artikel auf der Architektur, 10+ oder 20+ Gigabyte pro Sekunde. Allerdings Lager memcpy () Anrufe erreichen das nicht. (3 GB / s ist die höchste ich auf solchen Systemen gesehen habe.) Wahrscheinlich ist dies aufgrund der OS-Anbieter erforderlich, dass MEMCPY () für jeden Prozessor Linie auf die Eigenschaften des Prozessors auf Basis abgestimmt werden, so dass ein Lager memcpy () -Implementierung sollte auf eine große Anzahl von Marken und Linien angemessen sein.

Meine Frage: Gibt es eine frei verfügbare, stark getunten Version für Core 2 oder Core i7-Prozessoren, die in einem C-Programm genutzt werden können? Ich bin sicher, dass ich in der Notwendigkeit einer nicht die einzige Person bin, und es wäre für jeden Mikro-Optimierung ihrer eigenen memcpy () eine große Verschwendung von Aufwand sein.

War es hilfreich?

Lösung

Wenn Sie / ARCH angeben. SSE2 es Sie mit einem abgestimmten Memcpy msvc sollte bieten (zumindest mein Fall ist)

, dass Failing, die SSE nutzen ausgerichtet Lade- / Speicher-Spezifika dich den Speicher in großen Brocken zu kopieren, ein Duff Gerät des Wortes einsetzt liest bei Bedarf mit dem Kopf und Schwanz von Daten zu tun, es zu einer ausgerichteten Grenze zu erhalten. Hier finden Sie die Cache-Management-Spezifika und verwenden müssen, um eine gute Leistung zu erhalten.

Ihr limitierende Faktor ist wahrscheinlich Cache-Misses und Südbrücke Bandbreite, anstatt CPU-Zyklen. Da es geht immer viele anderen Verkehr auf dem Speicherbus sein, ich bin in der Regel glücklich in solchen Operationen auf etwa 90% des theoretischen Speicherbandbreite Durchsatz zu erhalten.

Andere Tipps

Bei der Messung von Bandbreite haben Sie berücksichtigt Memcpy nehmen war sowohl ein Lese- und ein Schreib, also 3 GB / s Speicher kopiert ist eigentlich 6 GB / s Bandbreite?

Denken Sie daran,

ist die Bandbreite theoretisches Maximum - reale Welt Nutzung wird viel niedriger. Zum Beispiel fällt ein Seitenfehler und Ihre Bandbreite MB / s.

Memcpy / memmove sind Compiler-Spezifika und wird in der Regel zu rep movsd inlined (oder den entsprechenden SSE-Befehle, wenn Ihr Compiler das Ziel kann). Es kann unmöglich sein, die codegen über diese zu verbessern, da moderne CPUs rep Anweisungen wie diese sehr behandelt, sehr gut.

Sie können Ihre eigene schreiben. Versuchen Sie es mit der Intel optimiert Compiler direkt an zielt auf die Architektur?

Intel produziert auch etwas namens VTune (Compiler und sprachunabhängig) für die Optimierung von Anwendungen.

Hier ist ein

scroll top