Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Sören JLI Master Trainee
Anmeldedatum: 26.07.2002 Beiträge: 647 Wohnort: Bonn Medaillen: Keine
|
Verfasst am: 06.05.2004, 20:58 Titel: SIMD Mathe-Lib |
|
|
Hi,
ich will mir eine Mathematik Library Coden(3D Mathe halt!) und zwar per SIMD, also mit asm.
Hab deswegen mal ein paar Fragen:
1. Denkt ihr man kann einen Athlon XP(oder vergleichbare Intel 3/4) mittlerweile vorraussetzen?
2. Weiss jemand ob SSE auf AMD's ungefähr so schnell wie auf Intel's ist? Weil dann könnte ich mir 3DNow! ja klemmen, wenn es eh kein(bzw. kaum!) Performance einbringt.
weitere Fragen werden morgen folgen! |
|
Nach oben |
|
|
Kampfhund Super JLI'ler
Alter: 42 Anmeldedatum: 20.07.2002 Beiträge: 408
Medaillen: Keine
|
Verfasst am: 07.05.2004, 11:10 Titel: |
|
|
Gabs nicht bei www.steampowered.com so eine Liste mit den Hardwaredetails der Steamuser? Da könntest du ja mal schaun, wie weit die verschiedenen Techniken verbreitet sind. |
|
Nach oben |
|
|
xardias JLI Master
Alter: 38 Anmeldedatum: 28.12.2003 Beiträge: 804 Wohnort: Palo Alto, CA Medaillen: Keine
|
Verfasst am: 08.05.2004, 07:41 Titel: |
|
|
Naja, wenn du einmal 3dnow und einmal SSE optimierten Code benutzt dann müsstest du doch 2 verschiedene Binaries ausliefern... und ich kenne kein Spiel, was das macht.. also scheint es da einen weg drumrum zu geben |
|
Nach oben |
|
|
Cyianor Super JLI'ler
Anmeldedatum: 23.12.2002 Beiträge: 452
Medaillen: Keine
|
Verfasst am: 08.05.2004, 08:50 Titel: |
|
|
Oder man macht es so:
Code: | if(Intel)
//SSE-Code
else if(AMD)
//3DNow-Code |
|
|
Nach oben |
|
|
xardias JLI Master
Alter: 38 Anmeldedatum: 28.12.2003 Beiträge: 804 Wohnort: Palo Alto, CA Medaillen: Keine
|
Verfasst am: 08.05.2004, 08:54 Titel: |
|
|
hm... ich glaube da verschwendet man mehr performance mit als man spart
vielleicht lässt sich das auch noch irgendwie über vererbung oder function pinoter lösen.. |
|
Nach oben |
|
|
Christian Rousselle Site Admin
Alter: 48 Anmeldedatum: 19.07.2002 Beiträge: 1630
Medaillen: Keine
|
Verfasst am: 08.05.2004, 12:06 Titel: |
|
|
Die Trennung würde ich mit Hilfe von DLLs machen.
Christan |
|
Nach oben |
|
|
Sören JLI Master Trainee
Anmeldedatum: 26.07.2002 Beiträge: 647 Wohnort: Bonn Medaillen: Keine
|
Verfasst am: 08.05.2004, 20:31 Titel: |
|
|
Ich hab mir jetzt folgendes Gedacht: Ich will den ganzen Kram in einer *.lib packen. Dann habe ich zB die Klasse CVector4D, diese Klasse ist im Prinzip nur eine Wrapperklasse, die nur ein Attribit hat, nämlich einen Pointer auf einer rein virtuellen Klasse. Von einer rein virtuellen Klasse, die die gleichen Funktionen hat sind dann zB die Klassen CVector4D_SSE oder CVector4D_3DNOW abgeleitet. Im Konstruktor wird dann kurz abgefragt welcher CPU verwendet wird(wird beim Programmstart in einer externen Variable gespeichert), und dann schließlich entweder der Pointer auf eine SSE-oder 3DNow! Implementierung gesetzt.
Die CVector4D würde also so aus sehen(Pseudocode):
Code: |
Konstruktor
{
if(Intel)
pVector4D = new CVector4D_SSE
else if(AMD)
pVector4D = new CVector4D_3DNOW
}
eine Funktion könnte dann so lauten:
Funktion(float f)
{
pVector4D->Funktion(f)
}
|
Was haltet ihr davon? |
|
Nach oben |
|
|
KI JLI Master
Alter: 39 Anmeldedatum: 04.07.2003 Beiträge: 965 Wohnort: Aachen Medaillen: Keine
|
Verfasst am: 08.05.2004, 21:41 Titel: |
|
|
Vision hat Folgendes geschrieben: | Oder man macht es so:
Code: | if(Intel)
//SSE-Code
else if(AMD)
//3DNow-Code |
|
AMD unterstützt auch die Befehlssätze von Intel.
Sie können also in der Regel mit dem SSE Befehssatz umgehen!
AMD darf aus rechtlichen Gründen nur nicht damit werben...
Es gibt eine einfache Assembler Routine, die überprüft welche Befehlssätze unterstützt werden...
Hab ich mal in der MSDN gefunden, glaub ich.
Ach ja, und für besonders alten Prozessoren sollte man vorher überprüfen, ob die Überprüfung (für die Unterstützung der anderen Befehlssätze) unterstützt wird.^^
@MiracleBoy
Ich seh grad. Du weißt das man SSE auf AMDs benutzen kann.
Ich hab aber keine Ahnung ob das genauso schnell ist..
Ich mach eigentlich nichts mit ASM.
Jetzt stellt sich nur die Frage: Wss ist besser 3DNow oder SSE?
Zuletzt bearbeitet von KI am 08.05.2004, 22:02, insgesamt einmal bearbeitet |
|
Nach oben |
|
|
Sören JLI Master Trainee
Anmeldedatum: 26.07.2002 Beiträge: 647 Wohnort: Bonn Medaillen: Keine
|
Verfasst am: 08.05.2004, 21:59 Titel: |
|
|
KI hat Folgendes geschrieben: | Vision hat Folgendes geschrieben: | Oder man macht es so:
Code: | if(Intel)
//SSE-Code
else if(AMD)
//3DNow-Code |
|
AMD unterstützt auch die Befehlssätze von Intel.
Sie können also in der Regel mit dem SSE Befehssatz umgehen!
AMD darf aus rechtlichen Gründen nur nicht damit werben...
Es gibt eine einfache Assembler Routine, die überprüft welche Befehlssätze unterstützt werden...
Hab ich mal in der MSDN gefunden, glaub ich.
Ach ja, und für besonders alten Prozessoren sollte man vorher überprüfen, ob die Überprüfung (für die Unterstützung der anderen Befehlssätze) unterstützt wird.^^ |
Der AMD unterstützt SSE aber erst ab der XP Reihe und die hat heute nicht umbedingt jeder schon.
Wie man rauskriegt ob ein Befehlssatz läuft? Man führt einfach brutal eine spezifische Instruktion aus und guckt dann obs geklappt hat bzw. es einen Fehler gegeben hat. Den Hersteller kann man per Vendor bestimmen. |
|
Nach oben |
|
|
KI JLI Master
Alter: 39 Anmeldedatum: 04.07.2003 Beiträge: 965 Wohnort: Aachen Medaillen: Keine
|
Verfasst am: 08.05.2004, 22:03 Titel: |
|
|
Aha |
|
Nach oben |
|
|
|