Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
qt* comiliert mit -DQT_HAVE_3DNOW
View unanswered posts
View posts from last 24 hours
View posts from last 7 days

 
Reply to topic    Gentoo Forums Forum Index Deutsches Forum (German)
View previous topic :: View next topic  
Author Message
Christian99
Veteran
Veteran


Joined: 28 May 2009
Posts: 1178

PostPosted: Thu Apr 14, 2011 3:04 pm    Post subject: qt* comiliert mit -DQT_HAVE_3DNOW Reply with quote

hallo, mir ist da kürzlich was aufgefallen, was mich etwas verwundert hat: qt libs setzen beim kompilieren unter anderen diese Optionen:
-DQT_HAVE_MMX -DQT_HAVE_3DNOW -DQT_HAVE_SSE -DQT_HAVE_MMXEXT -DQT_HAVE_SSE2 -DQT_HAVE_SSE3 -DQT_HAVE_SSSE3 -DQT_HAVE_SSE4_1 -DQT_HAVE_SSE4_2
ich find das ein bisschen seltsam, weil mein prozessor kann sachen davon gar nicht (Intel core2, der kann mmx, sse, sse2, ssse3 und sse4_1)
normalerweise werden doch solche sachen an den kompiler geschickt, -D sind doch präprozessor defines, oder?
weiß jemand, was da passiert, in qt?

also nicht, dass es nicht geht, ich hab mich nur gewundert....
Back to top
View user's profile Send private message
sirro
Veteran
Veteran


Joined: 20 Jul 2003
Posts: 1472
Location: aachen.nrw.de.eu

PostPosted: Thu Apr 14, 2011 7:00 pm    Post subject: Re: qt* comiliert mit -DQT_HAVE_3DNOW Reply with quote

Christian99 wrote:
normalerweise werden doch solche sachen an den kompiler geschickt, -D sind doch präprozessor defines, oder?

Richtig. Die bewirken im Prinzip nur, dass bestimmte Bereiche des C-Quellcodes einkompiliert werden. Da Qt OpenSource ist kann man ja mal gucken was da passiert:

Code:
    const uint features = qDetectCPUFeatures();
[...]
#ifdef QT_HAVE_3DNOW
        if (features & MMX3DNOW) {
            qt_memfill32 = qt_memfill32_sse3dnow;
            qDrawHelper[QImage::Format_RGB16].bitmapBlit = qt_bitmapblit16_sse3dnow;
        }
#endif


Wenn QT_HAVE_3DNOW gesetzt ist, nimmt er also den speziellen Code für 3dnow mit in die kompilierte Datei auf. Welche Features deine CPU unterstützt wird ueber die "qDetectCPUFeatures"-Funktion zur Laufzeit abgefragt. Der eigentliche 3dnow-Code wird dann auf deinem System nie aufgerufen weil dein Prozessor kein 3dnow kann. Er wertet bei dir nur die eine Bedingung mehr aus als er ohne QT_HAVE_3DNOW machen würde.
Theoretisch wäre er also ohne QT_HAVE_3DNOW ein ganz kleines bisschen schneller, was du in der Praxis aber nicht merken wirst (naja, vielleicht auf einem ganz langsamen embedded-System).

Hab mir die anderen Sachen jetzt nicht alle angeguckt, aber das Prinzip wird das ähnlich sein.


Die Prozessor-Features werden also explizit vom Quellcode genutzt, da braucht es AFAIK(!) auch nicht zusätzlich die entsprechende Compiler-Option.
Back to top
View user's profile Send private message
Josef.95
Advocate
Advocate


Joined: 03 Sep 2007
Posts: 3655
Location: Germany

PostPosted: Fri Apr 15, 2011 2:23 pm    Post subject: Reply with quote

Jo, da war ich neulich auch schon mal drüber gestolpert....
Da qt-gui hier grad neu gebaut werden musste hab ich mal mit drauf geachtet :
Code:
i686-pc-linux-gnu-g++ -c -O2 -march=opteron-sse3 -pipe -fomit-frame-pointer -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/freetype2 -fvisibility=hidden -fvisibility-inlines-hidden -D_REENTRANT -Wall -W -fPIC -DQT_NO_DEBUG -DQT_PLUGIN -DQT_GUI_LIB -DQT_CORE_LIB -DQT_HAVE_MMX -DQT_HAVE_3DNOW -DQT_HAVE_SSE -DQT_HAVE_MMXEXT -DQT_HAVE_SSE2 -DQT_HAVE_SSE3 -DQT_HAVE_SSSE3 -DQT_HAVE_SSE4_1 -DQT_HAVE_SSE4_2 -DQT_HAVE_AVX -D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE -DQT_SHARED -I../../../../mkspecs/linux-g++ -I. -I../../../../include/QtCore -I../../../../include/QtGui -I../../../../include -I../../../gui/image -I.moc/release-shared -o .obj/release-shared/qgifhandler.o ../../../gui/image/qgifhandler.cpp
und dass mit einer ca. fünf Jahre alten AMD CPU die ganz sicher kein
SSSE3 SSE4_1 und SSE4_2
kann.

Dankeschön sirro für deine Erklärung.
Back to top
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index Deutsches Forum (German) All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum