Téléchargez l'application
Tom's Hardware sur l'App Store
Toute l'actu informatique de référence sur votre iPhone
Oui Non

[DEV] Compiler VLC pour les CPU Atom

par - source: Tom's Hardware FR

Aujourd'hui, nous vous proposons une petite actualité dédiée aux amoureux du développement et de la programmation, mais également à tout geek qui se respecte : qui n’a en effet jamais désiré améliorer les programmes qu’il utilise et les optimiser « aux petits oignons » pour sa propre configuration ? On peut également songer à optimiser un programme pour une génération de processeurs ou une plateforme en particulier...

Nous allons donc nous intéresser à la compilation sur plateforme Win32 de VLC, un lecteur multimédia extrêmement léger. Pour l'occasion, nous allons essayer d'optimiser VLC pour les plateformes Atom, l'idée étant de tirer parti de toute la puissance disponible sur un netbook lambda basé sur une telle plateforme.

L’environnement de développement

Plusieurs choix sont possibles en ce qui concerne l’environnement de développement, nous avons choisi MinGW (Minimalist GNU for Windows), une adaptation sur plateforme Win32 des logiciels de développement et de compilation du GNU (GCC - GNU Compiler Collection), et MSYS (Minimal SYStem), un environnement en ligne de commande servant de support aux outils de développement MinGW.

Commençons donc par télécharger MinGW, puis installons-le en choisissant « download latest repository catalogue » afin d'utiliser les dernières versions des outils. Ne pas oublier de cocher « C++ Compiler » et « MinGW Developer ToolKit » (qui comprend MSYS), nous allons en avoir besoin…

Installer ensuite TDM-GCC (version SlJl) dans le même répertoire que MinGW. La version de GCC intégrée à MinGW pose en effet quelques problèmes lors de l'étape de compilation...

Créer un répertoire nommé « local » dans <lecteur>/MinGW/msys/1.0/.

Lancer enfin MinGW Shell. L'invite de commande nous place dans /home/<Utilisateur> par défaut (qui se trouve en réalité dans <lecteur>/MinGW/msys/1.0/home/<Utilisateur>).

Sources et pré-requis

Récupérer les sources de LUA (5.1.4) et de VLC (1.1.10) et les placer dans <lecteur>/MinGW/msys/1.0/home/<utilisateur>.

Décompresser les fichiers (commandes à taper ou à copier-coller dans l'invite de commande MSYS/MinGW) :

tar -xvzf lua-5.1.4.tar.gz
tar -xvjf vlc-1.1.10.tar.bz2

Ouvrir le fichier /home/utilisateur/lua-5.1.4-src-Makefile (avec WordPad par exemple) et remplacer :

CFLAGS= -O2 -Wall $(MYCFLAGS)

par :

CFLAGS= -O3 -Wall -march=atom -mfpmath=sse -pipe $(MYCFLAGS)

Cela permet d'activer de nombreuses optimisations permises par le compilateur, de lui demander d'utiliser les instructions SSE plutôt que du code x87 pour les opérations flottantes (mfpmath=sse), et enfin de générer du code optimisé pour les processeurs Atom (-march=atom). En contre-partie, les processeurs plus anciens risquent de rencontrer quelques problèmes pour exécuter le programme...

Compiler enfin LUA :

cd lua-5.1.4
make mingw -j2
make install
cp ./src/lua51.dll /local/bin

Si vous possédez un processeur quad-core, vous pouvez essayer de remplacer -j2 par -j4...

Compiler VLC

Définir la variable PKG_CONFIG_PATH :

export PKG_CONFIG_PATH=/win32/lib/pkgconfig

Récupérer les "contribs" (des librairies pré-compilées) et les décompresser dans <lecteur>/MinGW/msys/1.0/ en retirant "usr" du chemin (les fichiers doivent se trouver dans <lecteur>/MinGW/msys/1.0/win32/... ).

Récupérer les scripts configure-msys.sh et configure-common.sh et placer ces fichiers dans <lecteur>/MinGW/msys/1.0/home/<utilisateur>vlc-1.1.9/extras/package/win32 avec comme noms configure-msys.sh et configure-common.sh.

Ouvrir le fichier configure-msys.sh et modifier :

CONFIGOPTS="--host=i586-mingw32msvc --build=i386-linux
    --disable-mkv --disable-taglib --disable-nls --enable-debug"

en :

CONFIGOPTS="--disable-mkv --disable-taglib --disable-nls --disable-debug --disable-upnp --prefix=/local"

Récupérer pkg-config (0.25-1) et pkg-config-dev (0.25-1) et décompresser les fichiers dans <lecteur>/MinGW/msys/1.0/local/ .

Compiler VLC :

cd vlc-1.1.10
cp -v /usr/win32/share/aclocal/* m4/
cp -v /usr/share/aclocal/* m4/
cp -v /usr/local/aclocal/* m4/
PATH=/usr/win32/bin:$PATH ./bootstrap

LDFLAGS="-L/win32/lib -L/local/lib" CPPFLAGS="-I/win32/include -I/local/include" CFLAGS="-O3 -march=atom -mfpmath=sse -pipe" CXXFLAGS="${CFLAGS}" sh extras/package/win32/configure-msys.sh

On cherche ici aussi à utiliser le maximum d'optimisations autorisées par le compilateur et à générer du code optimisé Atom (en particulier le support des instructions MMX, SSE, SSE2, SSE3 et SSSE3).

Ouvrir /home/<utilisateur>/vlc-1.1.10/vlc-config et replacer :

cflags_tuning="-mtune=pentium2"
cflags_optim_size=" -Os"
cflags_optim_speed=" -O4 -ffast-math -funroll-loops"
cflags_optim_nodebug=" -fomit-frame-pointer"
cflags_nooptim=" -O0"

par :

cflags_tuning="-march=atom"
cflags_optim_size=" -Os"
cflags_optim_speed=" -O3 -mfpmath=sse -malign-double -maccumulate-outgoing-args -m128bit-long-double -momit-leaf-frame-pointer -minline-all-stringops -ffast-math -funroll-loops"
cflags_optim_nodebug=" -fomit-frame-pointer"
cflags_nooptim=" -O0"

Cela permet d'utiliser de nombreuses optimisations permises par le compilateur, et de générer du code optimisé pour les processeurs Atom.

Taper ensuite dans l'invite de commande MSYS/MinGW :

PATH=/local/bin:$PATH make -j2

Ça y est, VLC est compilé ! On va ensuite créer un fichier zip contenant tous les fichiers nécessaires au logiciel.

Récupérer zip (3.0) et bzip2 (1.0.5) et décompresser les fichiers dans <lecteur>/MinGW/msys/1.0/local/ .

Taper ensuite dans l'invite de commande MSYS/MinGW :

make package-win32-zip

Le fichier vlc-1.1.10-win32.zip est créé, il ne manque plus qu'à le récupérer dans /home/<utilisateur>/vlc-1.1.10 ! C'est votre processeur Atom qui va être content... Bien entendu, il est toujours possible de faire mieux, nous attendons d'ailleurs vos idées !

Un problème, une remarque ou une idée pour améliorer la compilation ou optimiser encore un peu plus VLC ? N'hésitez surtout pas à laisser un commentaire !

Partager:
26
Commentaires
X
Valider

Commentaires
Ajouter un commentaire
DayWalker 05/07/2011 11:34
Masquer
-3+

Ha tien, un article peu courant qui constitue une idée originale !

A noter que MingW existe aussi en version native 64 bits pour générer du code 64 bits, et que la plupart des processeurs ATOM sont en fait 64 bits ! C'est une option intéressante si on a installé windows en version 64 bits (au lieu de la version "Starter" qui équipe presque tous les netbooks).

DayWalker 05/07/2011 11:37
Masquer
-0+

EDIT : je ne suis pas certain que -Os et -O3 soient compatibles...

Yannick G 05/07/2011 11:42
Masquer
-0+

DayWalker :
EDIT : je ne suis pas certain que -Os et -O3 soient compatibles...



Le -Os n'est utilisé que si on choisit de compiler VLC en optimisant la taille. Ce n'est pas ce path que l'on prend ici ;)

popopow 05/07/2011 11:49
Masquer
-1+

le --disable-mkv m'intrigue. On risque pas de se retrouver avec un VLC ne sachant pas lire les mkv ? ce qui serait un peu dommage quand meme.

spamplemousse 05/07/2011 11:55
Masquer
-1+

Ça serait possible de faire une comparaison des performances entre la version classique téléchargée sur le site de VLC et la version compilée "sur mesure" pour son processeur?
Pour voir le gain réel?

Yannick G 05/07/2011 12:02
Masquer
-0+

popopow :
le --disable-mkv m'intrigue. On risque pas de se retrouver avec un VLC ne sachant pas lire les mkv ? ce qui serait un peu dommage quand meme.



Je viens de tester, ça fonctionne.

spamplemousse :
Ça serait possible de faire une comparaison des performances entre la version classique téléchargée sur le site de VLC et la version compilée "sur mesure" pour son processeur?Pour voir le gain réel?



ça serait intéressant à faire effectivement... Quelqu'un se dévoue pour essayer :D ?

Col Hanzaplast 05/07/2011 12:04
Masquer
-0+

Pourrait-on compiler pour SB afin d'utiliser Quick Sync ou mon idée est à la masse ? :)

zorro3364 05/07/2011 13:27
Masquer
-1+

article intéressant et inhabituel, en effet.
a condition de préciser toutefois qu'il ne suffit pas de quelques options de compilation pour optimiser du code. le processus d'optimisation est un travail de fond qui commence dès la conception du logiciel, donc bien avant l'écriture de la moindre ligne de code.
la seule optimisation due à la compilation est vraiment très très marginale, on l'utilise plutôt pour accroitre la compatibilité que pour autre chose.
ceci étant dit, merci pour cet article très technique pour une fois...

Yannick G 05/07/2011 13:40
Masquer
-0+

Citation :

article intéressant et inhabituel, en effet.
a condition de préciser toutefois qu'il ne suffit pas de quelques options de compilation pour optimiser du code. le processus d'optimisation est un travail de fond qui commence dès la conception du logiciel, donc bien avant l'écriture de la moindre ligne de code.
la seule optimisation due à la compilation est vraiment très très marginale, on l'utilise plutôt pour accroitre la compatibilité que pour autre chose.
ceci étant dit, merci pour cet article très technique pour une fois...




Effectivement :jap:

V@rgace 05/07/2011 14:39
Masquer
-0+

Citation :Si vous possédez un processeur quad-core, vous pouvez essayer de remplacer -j2 par -j4...


On peut aussi faire simplement make -j. Il me semble que ça lancera autant de processus de compilation qu'il y a de coeurs à disposition.

Yannick G 05/07/2011 14:51
Masquer
-1+

Citation :

Citation :Si vous possédez un processeur quad-core, vous pouvez essayer de remplacer -j2 par -j4...


On peut aussi faire simplement make -j. Il me semble que ça lancera autant de processus de compilation qu'il y a de coeurs à disposition.




Exact.

anonymous 05/07/2011 18:30
Masquer
-0+

ya pas moyen de faire un script qui détecte le cpu est les flags des unités installés, et de faire un exécutable destiné pour le pc en question ?

Mine de rien, moi qui m'y connais en info, je trouve, re-trouver les commandes, si je veux faire ça pour un Bulldozer ou un Lliano, ou n'importe quoi d'autre que vlc, c'est quand même un peu lourd.

Je suis pas spécialiste de linux aussi, donc normal aussi que je trouve ça lourd, mais bon, j'avoue c'est bien pratique. Ex, il y a Handbrake qui est open, et qui serais bien de l'avoir direct en avx, par ex.

Yannick G 05/07/2011 18:39
Masquer
-0+

barbare128 :
ya pas moyen de faire un script qui détecte le cpu est les flags des unités installés, et de faire un exécutable destiné pour le pc en question ?Mine de rien, moi qui m'y connais en info, je trouve, re-trouver les commandes, si je veux faire ça pour un Bulldozer ou un Lliano, ou n'importe quoi d'autre que vlc, c'est quand même un peu lourd.Je suis pas spécialiste de linux aussi, donc normal aussi que je trouve ça lourd, mais bon, j'avoue c'est bien pratique. Ex, il y a Handbrake qui est open, et qui serais bien de l'avoir direct en avx, par ex.



Il faut dans ce cas utiliser -march=native
ça détecte le CPU installé, et choisit l'archi qui va bien.

Mais dans le cas de la news, j'ai pas tellement envie de compiler VLC sur un Atom :whistle:

anonymous 05/07/2011 22:34
Masquer
-0+

comme d'hab il n'y a personne pour poster le binaire compilée, il reste plus qu'a laisser les novices comme moi perdre leur temps a essayer de 'compiler' pour qu'en plein milieu, submergé de messages d'erreurs, je me rende compte que j'ai perdu une heure de mon temps pour rien. Merci pour l'effort, dommage de s'etre arreter en si bon chemin.

Yannick G 05/07/2011 22:53
Masquer
-0+

lobo54 :
comme d'hab il n'y a personne pour poster le binaire compilée, il reste plus qu'a laisser les novices comme moi perdre leur temps a essayer de 'compiler' pour qu'en plein milieu, submergé de messages d'erreurs, je me rende compte que j'ai perdu une heure de mon temps pour rien. Merci pour l'effort, dommage de s'etre arreter en si bon chemin.



L'objectif n'était pas de mettre en ligne le binaire final, mais au contraire que tout le monde puisse, pas à pas (d'où toutes les étapes détaillées !), arriver au même résultat.

Sinon, pour ceux qui ne veulent pas s’embêter/perdre leur temps/tester (tout simplement), il est toujours possible d'aller récupérer le binaire de VLC - non optimisé mais qui fonctionne partout - sur le site officiel...

shooby 06/07/2011 10:01
Masquer
-0+

Tient, un peu hors sujet mais je tente quand même : j'avais télécharger UMPlayer il y a quelques semaines et pendant quelques jours je ne pouvais plus lire de vidéos avec. Maintenant c'est revenu mais est-ce arriver à d'autres ?

pluies 06/07/2011 14:15
Masquer
-0+

A quand le tuto pour ICC ? :)

Les pratiques anticoncurrentielles d'Intel sont relou, mais si on cherche les perfs maximales sur une archis Intel, c'est à tenter.

anonymous 05/09/2011 12:49
Masquer
-0+

Lors de la compilation de VLC, la ligne : cp -v /usr/local/aclocal/* m4/ ne marche pas chez moi, par contre j'ai trouvé aclocal dans /usr/local/share/aclocal. J'ai continué avec ça donc et quand plus tard je rentre : PATH=/local/bin:$PATH make -j2 , j'obtiens : make: ***No targets specified and no makefile found. Stop.

Une idée svp ?

Yannick G 05/09/2011 17:05
Masquer
-0+

ChuangTseu :
Lors de la compilation de VLC, la ligne : cp -v /usr/local/aclocal/* m4/ ne marche pas chez moi, par contre j'ai trouvé aclocal dans /usr/local/share/aclocal. J'ai continué avec ça donc et quand plus tard je rentre : PATH=/local/bin:$PATH make -j2 , j'obtiens : make: ***No targets specified and no makefile found. Stop.Une idée svp ?



tu lances bien la commande make en étant dans le bon répertoire (vlc-x.x.xx) ?

chuangtseu 05/09/2011 18:16
Masquer
-0+

Oui je viens de tester après "cd vlc-1.1.10" et ça donne rien donc j'étais dans le bon répertoire.

Yannick G 05/09/2011 18:26
Masquer
-0+

chuangtseu :
Oui je viens de tester après "cd vlc-1.1.10" et ça donne rien donc j'étais dans le bon répertoire.



Et si tu lances ,toujours dans ce repertoire, un simple make, il commence à compiler ?

chuangtseu 05/09/2011 19:21
Masquer
-0+

Marche pas non plus, il affiche toujours :
"make: *** No targets specified and no makefile found. Stop."

Peut être que j'ai foiré un truc dans les fichier .m4 au moment du cp -v /usr/local/aclocal/* m4/ (voire manip que j'ai faite dans mon premier message en gris)

Yannick G 05/09/2011 19:52
Masquer
-0+

chuangtseu :
Marche pas non plus, il affiche toujours :"make: *** No targets specified and no makefile found. Stop."Peut être que j'ai foiré un truc dans les fichier .m4 au moment du cp -v /usr/local/aclocal/* m4/ (voire manip que j'ai faite dans mon premier message en gris)



Même si tu avais foiré un truc à ce niveau, la commande make fonctionnerait...

quand tu as fait le "sh extras/package/win32/configure-msys.sh", t'as pas eu de message d'erreur ?

chuangtseu 05/09/2011 20:50
Masquer
-0+

J'ai plusieurs warning et la dernière ligne écrite est :
"configure: Error: Library shout >= 2.1 needed for shout was not found"

Sinon je vois quand même 2 fichiers makefile dans vlc-1.1.10 (un .in et un .am)

Yannick G 06/09/2011 00:06
Masquer
-0+

chuangtseu :
J'ai plusieurs warning et la dernière ligne écrite est :"configure: Error: Library shout >= 2.1 needed for shout was not found"Sinon je vois quand même 2 fichiers makefile dans vlc-1.1.10 (un .in et un .am)



Et bien il va falloir que tu attendes que je revienne de vacances alors :o
Ou qu'une âme charitable passe par là avant [:cupra]

chuangtseu 06/09/2011 11:53
Masquer
-0+

Pas de probleme :)
Mon atom tiendra le coup jusque là... :D

Publicité

Les offres du moment

Newsletters


OK