AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

grundsätzliche Frage zu Multithreading

Ein Thema von Gargamel · begonnen am 26. Mär 2013 · letzter Beitrag vom 26. Mär 2013
Antwort Antwort
Seite 3 von 4     123 4      
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#21

AW: grundsätzliche Frage zu Multithreading

  Alt 26. Mär 2013, 10:55
Und in C++ ? (darum gings ja in erster Linie )
Und dann noch den C# Code!
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Gargamel

Registriert seit: 19. Mär 2007
171 Beiträge
 
#22

AW: grundsätzliche Frage zu Multithreading

  Alt 26. Mär 2013, 10:56
@jfheins: Gerne doch.

Delphi-Quellcode:
void calcCSharp()
    {
        for (int i = 0; i < (100000000 - 1); i++)
        {
            float vecX = 5.7458F;
            float vecY = 3.758F;
            float vecZ = 7.12544F;

            float len = Mathf.Sqrt(vecX*vecX+vecY*vecY+vecZ*vecZ);

            float normX = vecX / len;
            float normY = vecY / len;
            float normZ = vecZ / len;
        }

    }
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#23

AW: grundsätzliche Frage zu Multithreading

  Alt 26. Mär 2013, 10:56
@Gargamel

Implementiere doch mal in allen 3 Sprachen die Funktion
Delphi-Quellcode:
type
  TVector = record
    x,y,z: Single;
  end;

function normalisieren(AVector: TVector): TVector; // inline;
var len: Integer;
begin
  len := sqrt(AVector.x*AVector.x+AVector.y*AVector.y+AVector.z*AVector.z);
  Result.x := AVector.x / len;
  Result.y := AVector.y / len;
  Result.z := AVector.z / len;
end;
exact gleich und führe dann deine Messung erneut durch. Diese Werte wären interessant im Vergleich zu sehen
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Gargamel

Registriert seit: 19. Mär 2007
171 Beiträge
 
#24

AW: grundsätzliche Frage zu Multithreading

  Alt 26. Mär 2013, 11:05
Mit dem nachfolgenden C++-Code sind es 0,8 Sekunden.

Delphi-Quellcode:
TVector normalisieren(TVector AVector)
{
  float len = sqrt(AVector.x*AVector.x+AVector.y*AVector.y+AVector.z*AVector.z);
  AVector.x = AVector.x / len;
  AVector.y = AVector.y / len;
  AVector.z = AVector.z / len;
  return AVector;
}


__declspec(dllexport) void cppTesten()
{
  TVector vec;
  for (int i=0; i< 100000000 - 1; i++)
  {
    vec.x = 5.7458F;
    vec.y = 3.758F;
    vec.z = 7.12544F;
    vec = normalisieren(vec);
  }

}
  Mit Zitat antworten Zitat
Gargamel

Registriert seit: 19. Mär 2007
171 Beiträge
 
#25

AW: grundsätzliche Frage zu Multithreading

  Alt 26. Mär 2013, 11:14
@alle: Damit jetzt alle drei Sprachen abgedeckt wurden, hier noch der C#-Code. Die benötigte Zeit hierfür beträgt 2,9 Sekunden.

Delphi-Quellcode:
public struct TVector
    {
        public float x;
        public float y;
        public float z;
    }


////////////////////////////

public TVector normalisieren(TVector AVector)
    {
        float len = Mathf.Sqrt(AVector.x * AVector.x + AVector.y * AVector.y + AVector.z * AVector.z);
        AVector.x = AVector.x / len;
        AVector.y = AVector.y / len;
        AVector.z = AVector.z / len;
        return AVector;
    }


void calcCSharp_V2()
    {
        TVector vec;
        for (int i = 0; i < 100000000 - 1; i++)
        {
            vec.x = 5.7458F;
            vec.y = 3.758F;
            vec.z = 7.12544F;
            vec = normalisieren(vec);
        }

    }

Geändert von Gargamel (26. Mär 2013 um 11:16 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#26

AW: grundsätzliche Frage zu Multithreading

  Alt 26. Mär 2013, 11:18
Also ernsthaft.. Jetzt würde ich noch gerne den Maschinencode der normalisieren Funktion in Delphi und C++ sehen

Wo spart C++ denn da über die Hälfte der Zeit?
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Robotiker
(Gast)

n/a Beiträge
 
#27

AW: grundsätzliche Frage zu Multithreading

  Alt 26. Mär 2013, 11:38
Ein Unterschied von 2-5% zwischen den einzelnen Compilern ist durchaus denkbar,
Der Unterschied zwischen den (32 Bit-) Compilern vom C++ Builder und Visual C++ ist durchaus größer als 2-5%, eher manchmal 20-50% bei gleichem Code.

Wo spart C++ denn da über die Hälfte der Zeit?
Von welchem Compiler reden wir eigentlich ?
Schlägt da ein Vektorisierer zu, wie bei Microsoft oder Intel ?
http://msdn.microsoft.com/de-de/library/hh872235.aspx
  Mit Zitat antworten Zitat
Gargamel

Registriert seit: 19. Mär 2007
171 Beiträge
 
#28

AW: grundsätzliche Frage zu Multithreading

  Alt 26. Mär 2013, 11:59
1. Für C++ habe ich Visual C++ 2010 Express verwendet. Ahnung habe ich aber nicht, welche Optimierungen da vorgenommen werden.

2. Thema Multithreading: Nehmen wir an, es ist ein QuadCore, ich erstelle 4 Threads und es gibt 4 KI-Objekte. Jedes Objekt läuft auf einem separaten Kern. Jetzt wird, auch angenommen, ständig in jedem Objekt ein Vektor normalisiert. Die vier Threads laufen über Delphi, jedoch wird die "normalisieren"-Funktion aus einer C++-DLL aufgerufen. Würde das funktionieren oder gibt es da Probleme?
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#29

AW: grundsätzliche Frage zu Multithreading

  Alt 26. Mär 2013, 12:02
Letztens las ich erst, dass man für intensive Berechnungen 2*CPUKerne an Threads benutzen kann.

Die aufgerufenen Funktionen laufen immer in diesem Kontext (wenn man das nicht aktiv ändert und in einen weiteren Thread übergibt)
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.110 Beiträge
 
Delphi 10 Seattle Enterprise
 
#30

AW: grundsätzliche Frage zu Multithreading

  Alt 26. Mär 2013, 12:05
Jeder Thread hat doch seinen eigenen Stack, das Beispiel mit der Vektor-Normalisierung dürfte doch problemlos klappen?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 4     123 4      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:04 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz