# Dúvida sobre CFLAGs (AMD64)

## BaYGoN

Olá, pessoal.

Tenho Gentoo instalado num sistema com a configuração da minha assinatura, e gostaria de tirar uma dúvida sobre CFLAGs. Atualmente uso a seguinte: "-march=k8 -O2 -pipe -fomit-frame-pointer". Como meu processador possue instruções SSE3, eu gostaria de adicionar -msse3 às minhas CFLAGs. Gostaria de saber o que preciso fazer depois, para que meus programas possam fazer uso de SSE3 (ex: Xorg). Eu normalmente atualizo meu sistema rodando primeiro emerge --sync e depois emerge -uD world. Qual(is) comando(s) devo passar, para recompilar os programas que fazem uso de SSE3?  Devo adicionar alguma USE flag, ex sse3?  Não estou em casa agora, mas quando chegar posto meu emerge info, make.conf e qq outro que vcs precisarem.

Obrigado.

----------

## MetalGod

deves usar

```
-march=k8 -O2 -pipe -msse3
```

 o -fomit-frame-pointer ja está incluido no -O2 em amd64.

Se pretenderes recompilar com essas flags basta fazeres emerge -uDav world e conseguentemente etc-update (ou dispatch-conf) a USE flag sse3 nao existe logo nao precisas de adcionar as USE.

----------

## BaYGoN

Obrigado, MetalGod.

Eu imaginei que seria emerge world o comando, mas eu tinha dúvidas se era só esse mesmo, e não quis arriscar. Eu uso esse comando regularmente, mas nunca havia alterado as CFLAGS depois da instalação.

Sobre o fomit-frame-pointer, eu vi no wiki que amd64 não precisa colocar mas não vi nenhuma explicação do porquê. E como nunca tive problemas, deixei assim mesmo. Chegando em casa vou alterar as flags. Só espero que não demore muito a recompilação.  :Very Happy: 

[]'s

----------

## MetalGod

ja te expliquei porque nao vale a pena adicionar o -fomit-frame-pointer.

----------

## BaYGoN

Sim. Eu entendi. Já que vou adicionar -msse3 aproveito para retirar -fomit-frame-pointer, já que é redundante.

Procurando um pouco mais no fórum e no wiki, achei alguns posts como o último deste tópico (https://forums.gentoo.org/viewtopic-t-439533.html), para um rebuild normal do sistema, eu deveria usar

```
emerge -uavDN system && emerge -uavDN world
```

Eu sei que system está incluído em world, mas o que vc acha deste comando?

É melhor? Pior? Não faz diferença alguma? 

Eu quero que tudo que suporte sse3, seja recompilado para tirar vantagem destas instruções.

Obrigado.

----------

## MetalGod

eu uso emerge -euD world apenas pois o world contem o system

----------

## S4M4R0N3

Aproveitando a duvida aqui sobre SSE3 , queria saber:

 *Quote:*   

> 
> 
> cat /proc/cpuinfo 
> 
> processor       : 0
> ...

 

Estou usando a flag -msse3 , meu sistema foi contruido do stage 3 , mais sempre com essa flag no make.conf , queria saber se mesmo a instrucao não sendo reconhecida no /proc/cpuinfo eu estou tirando proveito dela ? Queria saber tb porque meu processador que contem a sse3 não foi reconhecido com tal flag , valeu

```
CFLAGS="-mtune=k8 -O2 -pipe -msse3"
```

----------

## MetalGod

segundo isso nao tens sse3 (nem conheço semprons com sse3) logo nao vale a pena adicionar nem deves.

----------

## S4M4R0N3

 *MetalGod wrote:*   

> segundo isso nao tens sse3 (nem conheço semprons com sse3) logo nao vale a pena adicionar nem deves.

 

Os semprons socket 754 baseados no nucleo Venice dos 939 , possuem as instruçoes sse3. O nucleo eh chamado de palermo revisão E6, o windows o reconhece perfeitamente , queria saber porque não é reconhecido aqui no linux , detalhe ele esta overclockado por isso esta com 2.2 mhz , a velocidade real eh de 1.8   :Very Happy:   Ate mais

----------

## MetalGod

pronto ja fiquei a saber mais qq coisa heheeh. Eu reconheço que nao sou grande entendido de hardware mas segundo o cpuinfo nao possues sse3.

```
darksystem muine # cat /proc/cpuinfo

processor       : 0

vendor_id       : AuthenticAMD

cpu family      : 15

model           : 7

model name      : AMD Athlon(tm) 64 Processor 3500+

stepping        : 10

cpu MHz         : 2211.371

cache size      : 512 KB

fpu             : yes

fpu_exception   : yes

cpuid level     : 1

wp              : yes

flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 syscall nx mmxext lm 3dnowext 3dnow

bogomips        : 4425.55

TLB size        : 1024 4K pages

clflush size    : 64

cache_alignment : 64

address sizes   : 40 bits physical, 48 bits virtual

power management: ts fid vid ttp

```

quais sao as opçoes que tens no kernel para o processador ?

----------

## S4M4R0N3

Realmente o linux não está reconhecendo a flag,  porém o windows sim, veja:

http://www.portalcatita.com/temp/sempron-sse3-809x607.jpg

E aqui esta o meu .config

 *Quote:*   

> 
> 
> #
> 
> # Processor type and features
> ...

 

Se precisar de mais alguma informação pra fazer a analise so falar.

Ate mais

----------

## bbj

 *S4M4R0N3 wrote:*   

> Aproveitando a duvida aqui sobre SSE3 , queria saber:
> 
> cat /proc/cpuinfo 
> 
> processor       : 0
> ...

 

Repare que você possui a "flag" pni, que significa "prescott new instructions" (bastante comentado na lkml, cujo nome foi escolhido por motivos históricos). Esta é a indicação de que você possui suporte a sse3. Portanto, você pode utilizar o -msse3. Não sei se trará um aumento de performance significativo, mas se isso lhe faz sentir melhor, "manda bala".

Boa sorte.

----------

## MetalGod

bem ja estou a aprender qq coisa... realmente nao sabia disto.   :Crying or Very sad: 

----------

## bbj

Eu acabei me esquecendo de deixar um comentário sobre o SSE no manual do gcc. Eu acho o manual um pouco obscuro em certas partes, as quais me deixam em dúvida. O manual diz:

For the i386 compiler, you need to use -march=cpu-type, -msse

or -msse2 switches to enable SSE extensions and make this

option effective.  For the x86-64 compiler, these extensions

are enabled by default.

prescott

  Improved version of Intel Pentium4 CPU with MMX, SSE, SSE2 and

  SSE3 instruction set support.

nocona

  Improved version of Intel Pentium4 CPU with 64-bit extensions,

  MMX, SSE, SSE2 and SSE3 instruction set support.

Eu interpretaria o seguinte: já que determinadas variantes possuem suporte a estas "flags", elas seriam habilitadas com o uso do -march=variante. No meu caso, tenho um P4 prescott, onde utilizo apenas: 

```
CFLAGS="-march=prescott -O2 -pipe"
```

Acredito (mas não tenho certeza) que o SSE3 está embutida (-msse3) com o uso da variável acima. No caso do k8, opteron, athlon64 e athlon-fx, o manual não diz sobre SSE3, mas sabemos que há suporte em alguns hardwares (nesses casos, eu interpretaria que haveria a necessidade de se explicitar o -msse3).

De tudo isso, eu poderia dizer, por experiência e benchmarks, que a utilização do -march, ao invés do -mtune/-mcpu, traria um maior benefício ao desempenho do que a utilização isolada de alguma outra "flag", como -msse3.

----------

## S4M4R0N3

Ola a todos,

 *Quote:*   

> Repare que você possui a "flag" pni, que significa "prescott new instructions" (bastante comentado na lkml, cujo nome foi escolhido por motivos históricos). Esta é a indicação de que você possui suporte a sse3. Portanto, você pode utilizar o -msse3. Não sei se trará um aumento de performance significativo, mas se isso lhe faz sentir melhor, "manda bala". 

 

Eu realmente me sinto bem de ter o sse3 , serve em muito para emulacao de plataformas

Sobre isto:

Eu uso 

```
CFLAGS="-mtune=k8 -O2 -pipe -msse3"
```

http://gcc.gnu.org/onlinedocs/gcc-3.4.6/gcc/i386-and-x86_002d64-Options.html#i386-and-x86_002d64-Options

Veja que lá esta especificado que:

```
k8, opteron, athlon64, athlon-fx

    AMD K8 core based CPUs with x86-64 instruction set support. (This supersets MMX, SSE, SSE2, 3dNOW!, enhanced 3dNOW! and 64-bit instruction set extensions.) 
```

A flag k8 não possue a flag sse3 como padrão, penso eu, que seja para ter compatibilidade com processadores que não o possue como o 3500+ do amigo a cima. Ao contrario da flag prescott, que:

```
prescott

    Improved version of Intel Pentium4 CPU with MMX, SSE, SSE2 and SSE3 instruction set support. 
```

Resumindo eu uso -msse3 por vi ali que a flag k8 por si so não possue a SSE3.

Agora referente a desempenho, gostaria de perguntar:

Pelo que eu entedi , para o melhor desempenho deveriamos usar -march=cpu-type , como ressaltou bbj o pois essa inclue a -mtune e a -mcpu.

```
-march=cpu-type

    Generate instructions for the machine type cpu-type. The choices for cpu-type are the same as for -mtune. Moreover, specifying -march=cpu-type implies -mtune=cpu-type.

-mcpu=cpu-type

    A deprecated synonym for -mtune. 
```

bbj Queria perguntar: Quais programas vc usa para fazer benchmarks no linux ?

 E que motivos historicos são esses ? 

Moro em Viçosa - Mg , bem pertim de mineiro =)

----------

## bbj

 *S4M4R0N3 wrote:*   

> 
> 
> bbj Queria perguntar: Quais programas vc usa para fazer benchmarks no linux ?

 

Eu uso o app-benchmarks/acovea.

 *S4M4R0N3 wrote:*   

> 
> 
>  E que motivos historicos são esses ?

 

Você pode ver aqui.

 *S4M4R0N3 wrote:*   

> Moro em Viçosa - Mg , bem pertim de mineiro =)

 

Eu vejo bastante gente de Viçosa aqui na minha Universidade (UNIFEI, ex EFEI).

----------

