AMD K10 Software Optimization Guide

Nero24

Administrator
Teammitglied
Mitglied seit
01.07.2000
Beiträge
24.066
Renomée
10.446
  • BOINC Pentathlon 2019
  • BOINC Pentathlon 2020
  • BOINC Pentathlon 2018
  • BOINC Pentathlon 2021
Seit AMD eigene Prozessor-Architekturen entwickelt - also seit dem AMD K5 - veröffentlichen die Texaner auch mehr oder minder ausführliche Software Optimization Guides, die den Programmierern und Compiler-Entwicklern entscheidende Hinweise geben sollen, welche Codefolge für die jeweilige CPU-Architektur optimal ist und welche besser zu vermeiden sind. Dabei kann es schon auch mal zu Zielkonflikten kommen. Denken wir nur zurück an den AMD K6, wo AMD empfohlen hatte bei Schleifen den LOOP-Befehl zu verwenden, da dieser beim K6 in Hardware implementiert war. Beim Nachfolger K7 dagegen sollte der LOOP-Befehl dann tunlichst vermieden und stattdessen DEC/JNZ verwendet werden, da LOOP auf dem K7 plötzlich satte 8 Taktzyklen zur Ausführung beanspruchte, während der K6 LOOP im Idealfall in nur einem Takt durchprügelte.

Egal. Eines sind die Software Optimization Guides in jedem Fall: interessante Einblicke in die Besonderheiten der Architektur eines Prozessors. Vergangene Woche nun hat AMD den Guide für die kommenden K10-Prozessoren veröffentlicht, die beginnend mit dem neuen Opteron "<a href="http://www.planet3dnow.de/cgi-bin/newspub/viewnews.cgi?category=1&id=1179855228">Barcelona</a>" und die kommenden Phenom Prozessoren eingeführt werden (wir <a href="http://www.planet3dnow.de/cgi-bin/newspub/viewnews.cgi?category=1&id=1179128880">berichteten</a>). Nun ist der K10 keine wirklich neue Architektur wie es etwa der Pentium 4 bei Einführung war, sondern eher eine stark verbesserte K8-Architektur, die ihrerseits im Kern wiederum eine stark erweiterte K7-Architektur darstellt. Demnach dürfte es einem K8-optimierten Code beim Einsatz auf einem K10-System nicht ähnlich ergehen, wie einem K6-Code auf einem K7-System wie oben beschrieben. Dennoch haben sich einige Veränderungen ergeben, die AMD offen in den Guides beschreibt und für versierte Leser hochinteressant sind. Beispiel:<ul><i>A.10Translation-Lookaside Buffer
A translation-lookaside buffer (TLB) holds the most-recently-used page mapping information. It assists and accelerates the translation of virtual addresses to physical addresses.
The AMD Athlon 64 and AMD Opteron processors utilize a two-level TLB structure.
A.10.1L1 Instruction TLB Specifications
The AMD Family 10h processor contains a fully-associative L1 instruction TLB with 32 4-Kbyte page entries and 16 2-Mbyte page entries. 4-Mbyte pages require two 2-Mbyte entries; thus, the number of entries available for 4-Mbyte pages is one half the number of 2-Mbyte page entries.
A.10.2L1 Data TLB Specifications
The AMD Family 10h processor contains a fully-associative L1 data TLB with 48 entries for 4-Kbyte and 2-Mbyte pages. Support for 1-Gbyte pages has also been added. 4-Mbyte pages require two 2-Mbyte entries; thus, the number of entries available for 4-Mbyte pages is one half the number of 2-Mbyte page entries.</i></ul>Der komplette Guide kann <a href="http://www.amd.com/us-en/assets/content_type/white_papers_and_tech_docs/40546.pdf" TARGET="_blank">hier</A> als PDF-Datei heruntergeladen und studiert werden.
Danke jensibensi für den Hinweis
 
Hm, bin jetzt nicht so vertraut mit den Daten der ganzen Chips, was genau ist denn am neuen TLB jetzt so spektakulär? Größer, deutlich mehr Einträge, 2fach assoziativ?!
 
Hm, bin jetzt nicht so vertraut mit den Daten der ganzen Chips, was genau ist denn am neuen TLB jetzt so spektakulär?
Spektakulär? Nichts. Der Auszug war nur ein Beispiel von vielen, wo man im Guide sehen kann, was AMD am K10 ggü. dem K8 geändert hat :)
 
Hier die sogenannten Key Optimizations aus dem PDF-Dokument, geordnet nach Rang:
  1. Load-Execute Instructions for Floating-Point or Integer Operands (See section 4.2 on page 53.)
  2. Write-Combining (See section 5.6 on page 89.)
  3. Branches That Depend on Random Data (See section 6.3 on page 101.)
  4. Loop Unrolling (See section 7.2 on page 110.)
  5. Pointer Arithmetic in Loops (See section 7.6 on page 116.)
  6. Explicit Load Instructions (See section 9.2 on page 146.)
  7. Reuse of Dead Registers (See section 9.15 on page 165.)
  8. ccNUMA Optimizations (See section 11.1 on page 179.)
  9. Multithreading (See section 11.3 on page 190.)
  10. Prefetch and Streaming Instructions (See section 5.5 on page 81.)
  11. Memory and String Routines (See section 5.9 on page 92.)
  12. Loop Iteration Boundaries (See section 4.3 on page 56.)
  13. Floating-Point Scalar Conversions (See sections 9.16 on page 166.)

Interessant ist für uns BOINC'er wohl vor allem:
1.6.2 Floating-Point Improvements
Previous AMD64 processors supported 64-bit floating-point execution units. The new AMD Family 10h processors add support for 128-bit floating-point execution units. As a result, the throughput of both single-precision and double-precision floating-point SSEx vector operations has improved by 2X over the previous generation of AMD processors.

AndyK
 
Interessant ist für uns BOINC'er wohl vor allem:
1.6.2 Floating-Point Improvements
Previous AMD64 processors supported 64-bit floating-point execution units. The new AMD Family 10h processors add support for 128-bit floating-point execution units. As a result, the throughput of both single-precision and double-precision floating-point SSEx vector operations has improved by 2X over the previous generation of AMD processors.
Ich hoff auch das die K10 dann ordentlich Power für alles haben. Bei BOINC dauern mir manche Aufgaben zu lange. 4-Kerne und 2-4GB RAM und eine SSD sollten das ändern ^^
 
Zurück
Oben Unten