SSE2 optimierung ?
-
/arch:SSE2 in den Compileroptionen soweit ich weiß :xmas2:
-
ja das dachte ich auch, aber das bringt mir null leistungssteigerung, darum wundere ich mich ...
mein programm führt zum aller größten teil additionen durch und weist zweidimensionalen matrizen werte zu und kopiert matrizen mit memcpy.
und ein kumpel von mir hat mal meinen code sse2 compiliert und das war mindestens 6x so schnell. was muss man da machen ??
-
erinner ich dunkel daran gelesen zu haben das der unterschied der express versionen zur anderen (nicht kostenlos) version unter anderem die fehlende optimierungsmoeglichkeit ist.
kann aber auch sein das ich mich falsch erinner
-
so ein mist. wie kann ich das denn jetzt für sse2 optimieren? welche tools brauch ich? jemand ne idee?
-
daHa schrieb:
erinner ich dunkel daran gelesen zu haben das der unterschied der express versionen zur anderen (nicht kostenlos) version unter anderem die fehlende optimierungsmoeglichkeit ist.
kann aber auch sein das ich mich falsch erinnerHmm, also der Compiler der Express Edition sollte eigentlich derselbe sein, denn den kann man ja sowieso kostenlos über das SDK runterladen.
-
Konrad Rudolph schrieb:
daHa schrieb:
erinner ich dunkel daran gelesen zu haben das der unterschied der express versionen zur anderen (nicht kostenlos) version unter anderem die fehlende optimierungsmoeglichkeit ist.
kann aber auch sein das ich mich falsch erinnerHmm, also der Compiler der Express Edition sollte eigentlich derselbe sein, denn den kann man ja sowieso kostenlos über das SDK runterladen.
hatte mich nur halb an den text da
Does Visual C++ 2005 Express include the "optimizing compiler"?
Yes, Visual C++ 2005 Express Edition includes the same core optimizing compiler that will be included with all other Visual Studio 2005 editions. Some new expanded optimization features, including Profile Guided Optimizations, will be available only in the Professional and above editions of Visual Studio 2005.
erinnert.jetzt is halt die frage ob bei ms sse unter core optimizing faellt, keine ahnung, vielleicht kanns ja auch der compiler aber es gibt im frontend kein hackerl dafuer
edit:
bin neugierig geworden und hab nachgeschaut
geben duerfts fast alles
http://msdn2.microsoft.com/en-us/library/19z1t1wy.aspxwie mans setzt duerft da stehn
http://msdn2.microsoft.com/en-us/library/3600tzxa.aspx
-
ich hab mich da jetzt durchgewühlt und bin abermals nur drauf gestoßen, dass ich in die zeile bei den eigenschaften meiner cpp datei
/arch:SSE bzw /arch:SSE2 eintippen muss. das tue ich - aber die geschwindigkeit ist auf +/- 20 ms gleich. hab ich da was falsch verstanden ?
so sieht das bei mir aus.[img=http://img403.imageshack.us/img403/452/befehlszeilejf4.th.png]
-
Konrad Rudolph schrieb:
daHa schrieb:
erinner ich dunkel daran gelesen zu haben das der unterschied der express versionen zur anderen (nicht kostenlos) version unter anderem die fehlende optimierungsmoeglichkeit ist.
kann aber auch sein das ich mich falsch erinnerHmm, also der Compiler der Express Edition sollte eigentlich derselbe sein, denn den kann man ja sowieso kostenlos über das SDK runterladen.
Bei welchem Platform SDK is der 8.0er Compiler dabei? Entweder ich hab das verpennt, oder es gibt bloss den 7.1er als "SDK Compiler".
-

woher krieg ich jetzt einen kompiler, der mir das sse2 feature reinbaut - was muss ich mir organisieren, wenns mit visual c++ nich geht? - welchen verwendet ihr ?
-
Wenn es keinen kostenlosen Compiler gibt, der das kann, mußt du einen kaufen. Z.B. den Intel Compiler oder den MS VC++ 2005.
-
Mach doch die Optimierung selbst per Inline Assembly.
-
don-house schrieb:
ich hab mich da jetzt durchgewühlt und bin abermals nur drauf gestoßen, dass ich in die zeile bei den eigenschaften meiner cpp datei
/arch:SSE bzw /arch:SSE2 eintippen muss. das tue ich - aber die geschwindigkeit ist auf +/- 20 ms gleich.Dafür gibt es einen Schalter unter Codegenerierung. Im Übrigen düfte es wenig sinnvoll sein, diese Einstellung nur lokal vorzunehemn und nicht für das ganze Projekt.
don-house schrieb:
hab ich da was falsch verstanden ?
Wo steht geschrieben, dass das der magische Speedup-Schalter ist? Ob (und wieweit) das etwas bringt, hängt primär von deinem Programm und außerdem vom verwendeten Prozessor ab.
-
don-house schrieb:
woher krieg ich jetzt einen kompiler, der mir das sse2 feature reinbaut - was muss ich mir organisieren, wenns mit visual c++ nich geht?
Nur um sicher zu gehen, dir ist schon klar, dass in deinem Screenshot nur SSE aktiviert ist und nicht SSE2? Zudem gibt es dafür einen Schalter, das muss nicht manuell hinzugefügt werden.
Lass dir ausserdem ein Assembler Listing erstellen, dann siehst du ja, ob SSE2 verwendet wird.
-
@ groove
tja da lass ich mich nicht lumpen, ich dachte SSE2 geht nicht, vielleicht dann ja SSE.. Davor hab ichs mit SSE2 probiert ...
schalter? wenn du mir zeigen würdest, wo der ist, wäre ich dir seehr dankbar ^^@champer:
Athlon XP 3200+.
Programm: Minimax Algorithmus mit alpha-beta cutoff das bedeutet: zweidimensionale integer-arrays, 2darrays tausendfach kopieren , werte zuweisen und zweidimensionale arrays nach kombinationen absuchen. das sind etwa 99,999% des programms. ein bekannter hat das mal für mich mit SSE2 compiliert und das war ca 6x so schnell hinterher.
-
SSE2 wird vom Athlon XP nicht unterstützt.
-
Dieser Thread wurde von Moderator/in evilissimo aus dem Forum C++ in das Forum MFC (Visual C++) verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
camper schrieb:
SSE2 wird vom Athlon XP nicht unterstützt.
Weis wer wie das VS das SSE reinnimmt?
Also fügt der selbst ne Abfrage zum Code hinzu, ob SSE2 da ist und führt dann entsprechenden Code aus, je nachdem ob was da ist oder nicht.
Oder wird einfach SSE2 kompiliert und wenn das Zielsystem dieses nicht hat, gibts nen Crash?
-
AFAIk wird hier nichts überprüft... wenn Du also /arch:SSE(2) aktivierst, dann muss es der Prozessor auch unterstützen, sonst gibt es Probleme (hab es aber nicht verifiziert!).
Ein
double a, b, c; a = 1; b = 2; c = a/b;erzeugt ohne SSE(2):
double a, b, c; a = 1; 00431A9E D9 E8 fld1 00431AA0 DD 5D F4 fstp qword ptr [a] b = 2; 00431AA3 DD 05 38 FD 48 00 fld qword ptr [__real@4000000000000000 (48FD38h)] 00431AA9 DD 5D E4 fstp qword ptr [b] c = a/b; 00431AAC DD 45 F4 fld qword ptr [a] 00431AAF DC 75 E4 fdiv qword ptr [b] 00431AB2 DD 5D D4 fstp qword ptr [c]mit SSE2 ein:
double a, b, c; a = 1; 00431A9E F2 0F 10 05 48 FD 48 00 movsd xmm0,mmword ptr [__real@3ff0000000000000 (48FD48h)] 00431AA6 F2 0F 11 45 F4 movsd mmword ptr [a],xmm0 b = 2; 00431AAB F2 0F 10 05 38 FD 48 00 movsd xmm0,mmword ptr [__real@4000000000000000 (48FD38h)] 00431AB3 F2 0F 11 45 E4 movsd mmword ptr [b],xmm0 c = a/b; 00431AB8 F2 0F 10 45 F4 movsd xmm0,mmword ptr [a] 00431ABD F2 0F 5E 45 E4 divsd xmm0,mmword ptr [b] 00431AC2 F2 0F 11 45 D4 movsd mmword ptr [c],xmm0
-
@ camper
also meinst du, bei irgendwem kommt mit folgendem code#include <math.h> #include <stdio.h> int main() { int i = _set_SSE2_enable(1); if (i) printf("SSE2 enabled.\n"); else printf("SSE2 not enabled; processor does not support SSE2.\n"); }auch die zeile " SSE2 enabled " ?
mfg
houseps.: aber sse schein ich auch nicht aktivieren zu können mit /arch:sse
- die geschwindigkeit ist exakt gleich ...weiß jemand zufällig, wo bei visual c++ 2006 expr. dieser knopf, den groovemaster erwähnte liegt? hat hier jemand selbst die oberfläche und keine probleme, das zu aktivieren ?
-
don-house schrieb:
weiß jemand zufällig, wo bei visual c++ 2006 expr. dieser knopf, den groovemaster erwähnte liegt? hat hier jemand selbst die oberfläche und keine probleme, das zu aktivieren ?
Project|Properties|Configuration Properties|C/C++|Code Generation|Enable Enhanced Instructions Set: "Not Set" / "Streaming SIMD Extensions" / "Streaming SIMD Extensions 2"