JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=80561f4234e3b0fe38ddd1064e8fed90Medaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

SIMD Mathe-Lib

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung
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

BeitragVerfasst am: 06.05.2004, 20:58    Titel: SIMD Mathe-Lib Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Kampfhund
Super JLI'ler


Alter: 42
Anmeldedatum: 20.07.2002
Beiträge: 408

Medaillen: Keine

BeitragVerfasst am: 07.05.2004, 11:10    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
xardias
JLI Master


Alter: 38
Anmeldedatum: 28.12.2003
Beiträge: 804
Wohnort: Palo Alto, CA
Medaillen: Keine

BeitragVerfasst am: 08.05.2004, 07:41    Titel: Antworten mit Zitat

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 Wink
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Cyianor
Super JLI'ler



Anmeldedatum: 23.12.2002
Beiträge: 452

Medaillen: Keine

BeitragVerfasst am: 08.05.2004, 08:50    Titel: Antworten mit Zitat

Oder man macht es so:

Code:
if(Intel)
    //SSE-Code
else if(AMD)
    //3DNow-Code
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
xardias
JLI Master


Alter: 38
Anmeldedatum: 28.12.2003
Beiträge: 804
Wohnort: Palo Alto, CA
Medaillen: Keine

BeitragVerfasst am: 08.05.2004, 08:54    Titel: Antworten mit Zitat

hm... ich glaube da verschwendet man mehr performance mit als man spart Wink
vielleicht lässt sich das auch noch irgendwie über vererbung oder function pinoter lösen..
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Christian Rousselle
Site Admin


Alter: 48
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

BeitragVerfasst am: 08.05.2004, 12:06    Titel: Antworten mit Zitat

Die Trennung würde ich mit Hilfe von DLLs machen.

Christan
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Sören
JLI Master Trainee



Anmeldedatum: 26.07.2002
Beiträge: 647
Wohnort: Bonn
Medaillen: Keine

BeitragVerfasst am: 08.05.2004, 20:31    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
KI
JLI Master


Alter: 39
Anmeldedatum: 04.07.2003
Beiträge: 965
Wohnort: Aachen
Medaillen: Keine

BeitragVerfasst am: 08.05.2004, 21:41    Titel: Antworten mit Zitat

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. Wink
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? Rolling Eyes


Zuletzt bearbeitet von KI am 08.05.2004, 22:02, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Sören
JLI Master Trainee



Anmeldedatum: 26.07.2002
Beiträge: 647
Wohnort: Bonn
Medaillen: Keine

BeitragVerfasst am: 08.05.2004, 21:59    Titel: Antworten mit Zitat

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. Wink
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
Benutzer-Profile anzeigen Private Nachricht senden
KI
JLI Master


Alter: 39
Anmeldedatum: 04.07.2003
Beiträge: 965
Wohnort: Aachen
Medaillen: Keine

BeitragVerfasst am: 08.05.2004, 22:03    Titel: Antworten mit Zitat

Aha Idea
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung Alle Zeiten sind GMT
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum