# [use flags]tout petit script

## killerwhile

voici un tout petit script qui check si les flags du processeur peuvent être mis en use flag :

[edit]code modifié en fonction de discussion ci-dessous[/edit]

```
#!/bin/bash

for i in `grep flags /proc/cpuinfo | head -n 1 | cut -d":" -f2 | sed "s/dts//"`

do

    euse -i -g $i | grep -v searching | grep $i

done
```

Moi ca m'a permis d'ajouter dts, sse, mmx dans make.conf.Last edited by killerwhile on Wed Apr 05, 2006 12:26 pm; edited 2 times in total

----------

## PabOu

ca tue ce programme ;) bravo !

et c'est rapide :)

```
root@chocolat ~ # ./flags.sh

[+ C  ] mmx - Adds support for optimizations for Pentium MMX and Athlon class processors

[+ C  ] sse - fast floating point optimization for PentiumIII+ class chips

[+ C  ] 3dnow - Adds support for 3dnow multimedia processor instructions
```

----------

## killerwhile

En fait c'était juste pour faire un 70ème post intelligent  :Wink: 

----------

## PabOu

Ce serait bien que le script soit ajouté à gentoo d'une façon ou d'une autre... (peut-être dans gentoolkit ?) et en faire de la pub dans le manuel d'installation lors de la config du make.conf

Tu pourrais t'inscrire aux mailing-lists et le proposer ;)

C'est tout petit comme script, mais c'est très pratique :D

----------

## Enlight

L'idée me parrâit excellente, mais il faudrait quelque coups de sed pour les extensions mmx et 3dnow, ainsi que sse3 (il y'as des use sse3???); pour ceux là le nom des use et celui reporté dans cpuinfo ne collent pas.

----------

## PabOu

mmx et 3dnow apparaissent correctement (la preuve, le script l'a bien trouvé chez moi)

sse3 n'est pas un useflag... Pour rechercher des useflags :

```
euse -i mot-clé
```

voici sse :

```
pabou@chocolat ~ $ euse -i sse

global use flags (searching: sse)

************************************************************

[+ C  ] sse - fast floating point optimization for PentiumIII+ class chips

local use flags (searching: sse)

************************************************************

no matching entries found
```

dans /proc/cpuinfo, on peut retrouver (au moins) sse, 3dnow, 3dnowext, mmx, mmxext

quand à sse2/3, je ne connais pas leur dénomination

----------

## Enlight

Au temps pour moi, il me semblait qu'un moment on avait mmxex et 3dnowex (sans les t donc) sse2 dans le cpuinfo reste sse2 et sse3 c'est un truc en n (pour new) quelquechose, mais pas moyen de me rappeler sur le moment, je regarderai chez moi.

----------

## Mickael

Salut,

Merci pour ton script, très sympatique.

----------

## killerwhile

Tant mieux qu'il plaise  :Wink: 

Je vais le soumettre dans "Portage & Programming" et tâter la réaction là-bas.

----------

## Mickael

J'ai une petite question tout de même : la commande suivante me retourne : 

```
cat /proc/cpuinfo | grep flags 
```

 *Quote:*   

> flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe

 

et ton petit scipt semble dire le contraire : 

```
./Mon_PC_Techno/Check_flags_cpu.sh

[+ C  ] dts - Enables libdts (DTS Coherent Acoustics decoder) support

[-    ] acpi - Adds support for Advanced Configuration and Power Interface

[-    ] mmx - Adds support for optimizations for Pentium MMX and Athlon class processors

[-    ] sse - fast floating point optimization for PentiumIII+ class chips

[-    ] sse2 - faster floating point optimization for SSE2 capable chips

```

Je lis mal les indications fournies dans /proc/cpuinfo?

----------

## killerwhile

c'est simplement que les flags sse et sse2 ne sont pas activés dans ta config portage.

ajoute les dans make.conf et fait un emerge -pv --newuse world pour voir la différence

----------

## xaviermiller

tant que tu y es, ajoute aussi acpi et mmx  :Wink: 

----------

## sireyessire

bon moi il y a un truc qui m'embête et j'arrive pas à avoir encore des infos dessus: c'est le flag dts. Ça me parait un peu bizarre le coup de tous les processeurs un peu récents on un support du dts dans le processeur, mais aucun des amd ne l'a (même des très récents).

Je me demande si effectivement il y a un rapport entre le flag dts du processeur et le use dts qui se rapporte à un format audio.

bon je sais bien que l'ebuild de mplayer tend à laisser sous entendre que ça pourrait être la même chose, mais quand même depuis le temps AMD aurait pu se bouger le cul, à moins qu'ils l'aient intégré dans un 3DNow?

Quelqu'un aurait des infos, des liens, histoire que je me couche moins bête ce soir?   :Wink: 

----------

## Mickael

Voilà, àprès modification du make.conf et en ayant rajouter ces uses flags : 

 *Quote:*   

> 
> 
> emerge --newuse -p world
> 
> >>> --newuse implies --update... adding --update to options.
> ...

 

Bon pour l'acpi je le sens pas, pas envie de débugger en ce moment alors je laisserai tombé et pour la mise à jour et bien j'attendrai xorg7, 45 Mo, pas très motivité.

Merci, donc ton script indique que les flags possibles parmis tous ceux de cpuinfo. (Le signe  - devant sse par exemple indiquait seulement un manque.) 

Je serai moins bête ce soir quand je me coucherai, j'espère qu'il en sera de même pour toi siryessire  :Wink: 

----------

## ltememe

heu .. j'ai une question surement très bete ... j'ai testé le script, et j'obtiens ca :

```

Gentoo-Instable yop # sh ./flags.sh

[-    ] mmx - Adds support for optimizations for Pentium MMX and Athlon class processors

[-    ] sse - fast floating point optimization for PentiumIII+ class chips

[-    ] sse2 - faster floating point optimization for SSE2 capable chips

[-    ] 3dnow - Adds support for 3dnow multimedia processor instructions

```

ca veut dire qu'il faut mettre tout ca ou que j'en ai pas besoin ?

merci  :Very Happy: 

----------

## Mickael

qu'il faut mettre tout

----------

## killerwhile

les - indiquent que les flags ne sont pas mis.

des + prendront leur place sitot spécifié

(man euse :

The output is in the following format:

              [- cD ] /* snip */

              is_active

                     + if the flag is seen as active by portage, - if not

)

----------

## sireyessire

bon après quelques recherches chez intel, c'est pas plus simple:

```
$cat /proc/cpuinfo |grep flag

flags           : fpu vme de pse tsc msr mce cx8 sep mtrr pge mca cmov pat clflush dts acpi mmx fxsr sse sse2 ss tm pbe est tm2

```

et là, je lis la doc du jeu d'instructions du pentium-m (intel inside  :Very Happy: ) :

je tombe sur Table 3-16. More on Feature Information Returned in the EDX Register qui me donne des tas d'infos sur la plupart des flags mais pas de dts: la feature apparait même pas dans la table ni dans les possibilités du registre   :Confused: 

ça fait chier là, moi je voudrais bien comprendre, en plus ils disent que certains bits sont réservés mais ils te disent pas à quoi alors...

sinon quelqu'un sait qui remplit le /proc/cpuinfo? s'il est fait à la volée? bref si c'est un prog qui le remplit ou qui fait le listing, où est la source?

----------

## netfab

 *sireyessire wrote:*   

> 
> 
> sinon quelqu'un sait qui remplit le /proc/cpuinfo? s'il est fait à la volée? bref si c'est un prog qui le remplit ou qui fait le listing, où est la source?

 

C'est le kernel : jette un oeil au fichier /usr/src/linux/arch/i386/kernel/cpu/proc.c

```

   static char *x86_cap_flags[] = {

      /* Intel-defined */

           "fpu", "vme", "de", "pse", "tsc", "msr", "pae", "mce",

           "cx8", "apic", NULL, "sep", "mtrr", "pge", "mca", "cmov",

           "pat", "pse36", "pn", "clflush", NULL, "dts", "acpi", "mmx",

           "fxsr", "sse", "sse2", "ss", "ht", "tm", "ia64", "pbe",

```

çà ne va pas t'avancer beaucoup plus  :Laughing: 

[edit] Ah si : j'ai zappé le commentaire qui peut être intéressant :

 *Quote:*   

> 
> 
> /* 
> 
> 	 * These flag bits must match the definitions in <asm/cpufeature.h>.
> ...

 

[edit] c'est pas çà :

 *Quote:*   

> #define X86_FEATURE_DTES	(0*32+21) /* Debug Trace Store */

 

----------

## killerwhile

j'aime bien le 

```
static char *x86_cap_flags[] = { ...  NULL ... }
```

 :Wink: 

----------

## sireyessire

thx NetFab,

bon alors comme prévu, il n'y a aucun lien entre le USE dts et le flag dts   :Laughing: 

 *<asm/cpufeature.h> wrote:*   

> #define X86_FEATURE_DTES    (0*32+21) /* Debug Trace Store */

 

 *Intel INSTRUCTION SET REFERENCE, A-M wrote:*   

> 
> 
> 21       DS          Debug Store 
> 
> The processor supports the ability to write debug information into a memory resident buffer. This feature is used by the branch trace store (BTS) and                                                                 precise event-based sampling (PEBS) facilities (see Chapter 18, "Debugging and Performance Monitoring" in the IA-32 Intel® Architecture Software Developer's                                                                Manual, Volume 3B).

 

 */usr/portage/profiles/use.desc wrote:*   

> dts - Enables libdts (DTS Coherent Acoustics decoder) support

 

Cherchez l'erreur. Bref, le coup du USE dts n'a strictement rien à voir avec le flag processeur dts (qui devrait s'appeler ds selon intel)

voilà on sera moins bête ce soir  :Mr. Green: 

----------

## sireyessire

 *killerwhile wrote:*   

> j'aime bien le 
> 
> ```
> static char *x86_cap_flags[] = { ...  NULL ... }
> ```
> ...

 

c'est parce que le bit 20 du registre EDX après un appel CPUID est réservé   :Wink: 

----------

## killerwhile

 *Quote:*   

> 'est parce que le bit 20 du registre EDX après un appel CPUID est réservé 

 

Ok, merci. Moi aussi je vais être plus intelligent ce soir  :Wink: 

Merci siryessir pour ta recherche concernant le dts. On adapte le script pour qu'il n'en tienne pas compte : 

```
#!/bin/bash

for i in `cat /proc/cpuinfo | grep flags | cut -d":" -f2 | sed "s/dts//"`

do

    euse -i -g $i | grep -v searching | grep $i

done
```

----------

## razer

J'avais cru comprendre que les flags corrects correspondants au capacités des processeurs étaient incluses dans les flags "march" et "mtune".

Par exemple, dans mon cas :

```
CFLAGS="-march=pentium4 -mtune=pentium4"
```

correspondrait à 

```
CFLAGS="-mmx -mmx2 -sse -sse2..."
```

si tel est le cas, je ne vois pas trop l'intérêt de la manoeuvre

Dans le cas inverse, je ne vois pas à quoi servent march et mtune.

Quelqu'un peut confirmer/infirmer ?

----------

## killerwhile

 *Quote:*   

> J'avais cru comprendre que les flags corrects correspondants au capacités des processeurs étaient incluses dans les flags "march" et "mtune". 

 

ou c'est plus ou moins le cas. 

La manoeuvre ici est de faire correspondre ces flags avec les flags de portage.

----------

## ghoti

Futé le script !  :Smile: 

Un petit détail toutefois (mais je ne vois pas très bien comment le régler sans compliquer les choses  :Sad:  ) : avec les systèmes SMP (hyperthreading et consors), les différents processeurs ne sont pas distingués ce qui fait que les infos apparaissent autant de fois qu'il y a de processeurs :

```
bigben ~ $ grep processor /proc/cpuinfo

processor       : 0

processor       : 1

bigben ~ $ ./local_bin/checkflags

[-    ] dts - Enables libdts (DTS Coherent Acoustics decoder) support

[-    ] acpi - Adds support for Advanced Configuration and Power Interface

[+ C  ] mmx - Adds support for optimizations for Pentium MMX and Athlon class processors

[+ C  ] sse - fast floating point optimization for PentiumIII+ class chips

[-    ] sse2 - faster floating point optimization for SSE2 capable chips

[-    ] dts - Enables libdts (DTS Coherent Acoustics decoder) support

[-    ] acpi - Adds support for Advanced Configuration and Power Interface

[+ C  ] mmx - Adds support for optimizations for Pentium MMX and Athlon class processors

[+ C  ] sse - fast floating point optimization for PentiumIII+ class chips

[-    ] sse2 - faster floating point optimization for SSE2 capable chips
```

Et puis, avant que les puristes ne s'en mêlent, il vaudrait peut-être mieux remplacer

```
for i in `cat /proc/cpuinfo | grep flags | cut -d":" -f2`
```

 par

```
for i in `grep flags /proc/cpuinfo | cut -d":" -f2`
```

  :Wink: 

----------

## sireyessire

 *razer wrote:*   

> J'avais cru comprendre que les flags corrects correspondants au capacités des processeurs étaient incluses dans les flags "march" et "mtune".
> 
> Par exemple, dans mon cas :
> 
> ```
> ...

 

ça n'a rien à voir ici:

les USES sont là pour configurer ton paquet comme tu le souhaites suivant les options que tu pourrais vouloir, les CFLAGS sont juste des options données au compilateur C pour qu'il produise un code le plus optimisé au processeur sur lequel le code va tourner.

Dans le cas ici, par exemple mplayer prend en compte les flags mmx, mmx2, sse, sse2,sse3, 3dnow..., pour dans le cas des x86 remplacer des portions de code C par des portions en assembleur optimisées à la main pour aller encore plus vite (c'est pour ça qu'ils ne sont pas actifs sur les amd64@64 car ces optimisations sont pour 32 bits)

Vois-tu la différence? Dans un cas tu dis au compilateur, bon le processeur il a du mmx, du mmx2, du sse et du sse2, démerdes-toi pour faire un truc pas mal, dans l'autre cas avec des uses, l'équipe de programmeurs fournit un jeu d'optimisations persos correspondant à du mmx (par exemple) et le fait de mettre le use +mmx va activer ces portions de code.

----------

## killerwhile

```
for i in `grep flags /proc/cpuinfo | cut -d":" -f2`
```

oui c'est juste. une chose de plus que j'arrête pas d'oublier, c'est que grep ne s'utilise pas seulement après des pipe.

Pour SMP, j'ai effectivement pas pensé à ce problème  :Wink: 

mais un 

```
grep flags /proc/cpuinfo | [b]head -n 1[/b] | cut -d":" -f2
```

 suffit.

----------

## sireyessire

 *ghoti wrote:*   

> Futé le script ! 
> 
> Un petit détail toutefois (mais je ne vois pas très bien comment le régler sans compliquer les choses  ) : avec les systèmes SMP (hyperthreading et consors), les différents processeurs ne sont pas distingués ce qui fait que les infos apparaissent autant de fois qu'il y a de processeurs :
> 
> ```
> ...

 

sinon ghoti, comme je pense pas que beaucoup de gens ici, aient des systèmes multiprocesseurs hétérogènes, je pense qu'on pourrait simplement considérer que le 2ème processeur a les mêmes caractéristiques et ne s'intéresser qu'au premier, non?

----------

## killerwhile

notre petit script deviendrait donc : 

```
#!/bin/bash

for i in `grep flags /proc/cpuinfo | head -n 1 | cut -d":" -f2 | sed "s/dts//"`

do

    euse -i -g $i | grep -v searching | grep $i

done
```

----------

## razer

 *sireyessire wrote:*   

> 
> 
> ça n'a rien à voir ici:
> 
> les USES sont là pour configurer ton paquet comme tu le souhaites suivant les options que tu pourrais vouloir, les CFLAGS sont juste des options données au compilateur C pour qu'il produise un code le plus optimisé au processeur sur lequel le code va tourner.
> ...

 

J'entends bien... J'ai simplement lu le thread (trop) en diagonale. Mea culpa...

----------

## ghoti

 *sireyessire wrote:*   

> sinon ghoti, comme je pense pas que beaucoup de gens ici, aient des systèmes multiprocesseurs hétérogènes, je pense qu'on pourrait simplement considérer que le 2ème processeur a les mêmes caractéristiques et ne s'intéresser qu'au premier, non?

 

D'accord avec toi , ma remarque était surtout esthétique ...

Les corrections de killerwhile me conviennent parfaitement !  :Very Happy: 

----------

