Determina a família de CPUs Intel para o compilador C?

2

Estou verificando as informações da CPU em um servidor Linux e as opções de ajuste do compilador Intel C icc para meu código C executado na arquitetura específica do servidor. Estou pensando em escolher o valor para a opção -march em icc . O seguinte é parte do conteúdo de /proc/cpuinfo/ para um núcleo (o mesmo para os outros núcleos) e qual valor devo dar para -march para icc ? Ou devo usar uma opção diferente de -march ?

-march=<cpu> (i32, i64em only)
          Generate code exclusively for a given cpu.  For  this  release,
          the  <cpu>  values of pentiumii and pentiumiii have been depre-
          cated.  For a given cpu, <cpu> is one of the following:

         core2 -- Intel(R) Core(TM)2 processor family

         pentium4 -- Intel Pentium 4 processors

         pentium3 -- Intel Pentium III processors

O seguinte é a saída de cat /proc/cpuinfo em um servidor Linux

processor   : 0
vendor_id   : GenuineIntel
cpu family  : 6
model       : 26
model name  : Intel(R) Xeon(R) CPU           E5504  @ 2.00GHz
stepping    : 5
cpu MHz     : 1994.956
cache size  : 4096 KB
physical id : 1
siblings    : 4
core id     : 0
cpu cores   : 4
apicid      : 16
initial apicid  : 16
fpu     : yes
fpu_exception   : yes
cpuid level : 11
wp      : yes
flags       : fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good xtopology nonstop_tsc aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm dca sse4_1 sse4_2 popcnt lahf_lm dts tpr_shadow vnmi flexpriority ept vpid
bogomips    : 3989.91
clflush size    : 64
cache_alignment : 64
address sizes   : 40 bits physical, 48 bits virtual
power management:
    
por Tim 14.02.2014 / 10:09

1 resposta

1

A menos que você tenha uma necessidade premente de mirar nas arquiteturas mais antigas do core2, pentium4 ou pentium3, eu abordaria a situação dessa forma. Execute este comando:

# 64-bit system
$ getconf LONG_BIT
64

# 32-bit system
$ getconf LONG_BIT
32

Se o seu sistema retornar 64, use o -march switch i64em. Se você obtiver 32, use i32.

excerto de documentos do icc

Label      Meaning
i32        The option is available on systems using IA-32 architecture.
i64em      The option is available on systems using Intel� 64 architecture.
i64        The option is available on systems using IA-64 architecture.

Qual CPU eu tenho?

Você pode usar a ferramenta de linha de comando cpuid para obter mais detalhes sobre a CPU de um determinado sistema. Existem outras maneiras de obter essas informações também, mas este é o meu método preferido.

$ cpuid -1 | less
CPU:
   vendor_id = "GenuineIntel"
   version information (1/eax):
      processor type  = primary processor (0)
      family          = Intel Pentium Pro/II/III/Celeron/Core/Core 2/Atom, AMD Athlon/Duron, Cyrix M2, VIA C3 (6)
      model           = 0x5 (5)
      stepping id     = 0x5 (5)
      extended family = 0x0 (0)
      extended model  = 0x2 (2)
      (simple synth)  = Intel Core i3 / i5 / i7  (Clarkdale K0) / Pentium U5000 Mobile / Pentium P4505 / U3405 / Celeron Mobile P4000 / U3000 (Arrandale K0), 32nm
   miscellaneous (1/ebx):
      process local APIC physical ID = 0x5 (5)
      cpu count                      = 0x10 (16)
      CLFLUSH line size              = 0x8 (8)
      brand index                    = 0x0 (0)
...

Referências

por 14.02.2014 / 11:18

Tags