Comparando um i7 (3.2Ghz) com um i5 (2.5Ghz) usando linpack mostra o i7 sendo pior

1

Estou tentando comparar o desempenho do processamento de números de um i5-3210M a 2.5GHz com um ram de 6GB e um i7 de 970 a 3.2GHz com um ram de 24GB. Os resultados são tão inesperados que presumo que estou fazendo algo muito errado ou há algo muito errado com o i7.

Como pano de fundo, as informações no site a seguir mostram que o i7 é melhor em todos os aspectos (além de ser um modelo de cpu mais antigo por cerca de 2 anos).

link

Os sistemas operacionais nos dois computadores são idênticos (Arch Linux x86_64). Ambos os computadores são igualmente estáveis e nunca travam.

Estou usando o xlinpack_xeon64, que obtive aqui link

Este teste "... faz uso do paralelismo SMP e por padrão gera quantos threads de execução como o número dos processadores do sistema SMP. "Eu posso verificar isso está fazendo isso assistindo top / htop. Além disso, quando eu definir explicitamente a variável de ambiente OMP_NUM_THREADS para números variáveis de threads, eu posso observar por top / htop que os números especificados estão sendo usados.

Usando isso, eu descobri que o i5 é mais rápido que o i7 algumas vezes por um fator de 1,2. Eu colei os resultados para ambos completamente abaixo.

Eu estava inicialmente esperando que, nesses testes muito paralelizáveis, o i7 superasse o i5 talvez por um fator de três (o i7 tem 6 núcleos físicos e o i5 tem 2).

Eu usei o benchmark da systester para ver se havia algo peculiar sobre o linpack aqui, e isso forneceu resultados quase idênticos (mais rápido em torno de um fator de 1.2).

Por fim, verifiquei os gflops registrados para as duas CPUs relatadas neste site link

Aqui, os gflops especificados para o i5 são 40. Então, mais de menos exatamente o que os resultados do linpack mostram. Por outro lado, os gflops especificados para o i7 estão em torno de 79. E estou obtendo cerca de metade disso.

Estou perplexo, mas eu presumo que o i7 (se o processador em si ou o ram ou o mb) está com defeito. De fato, a variabilidade dos resultados para o i7 e também a completa falta de variabilidade para o i5 também é indicativa de algo errado com o i7.

Qualquer ideia seria muito útil.

-m

======= Resultados =================

============================================================================
========== i7 linpack test =================================================
============================================================================

 Input data or print help ? Type [data]/help :

Number of equations to solve (problem size): 20000
Leading dimension of array: 20000
Number of trials to run: 4
Data alignment value (in Kbytes): 4
Current date/time: Wed May 21 23:51:14 2014

CPU frequency:    3.206 GHz
Number of CPUs: 1
Number of cores: 6
Number of threads: 12

Parameters are set to:

Number of tests: 1
Number of equations to solve (problem size) : 20000
Leading dimension of array                  : 20000
Number of trials to run                     : 4    
Data alignment value (in Kbytes)            : 4    

Maximum memory requested that can be used=3200404096, at the size=20000

=================== Timing linear equation system solver ===================

Size   LDA    Align. Time(s)    GFlops   Residual     Residual(norm) Check
20000  20000  4      149.874    35.5909  3.288586e-10 2.911119e-02   pass
20000  20000  4      135.832    39.2701  3.288586e-10 2.911119e-02   pass
20000  20000  4      142.117    37.5334  3.288586e-10 2.911119e-02   pass
20000  20000  4      121.434    43.9262  3.288586e-10 2.911119e-02   pass

Performance Summary (GFlops)

Size   LDA    Align.  Average  Maximal
20000  20000  4       39.0801  43.9262 

Residual checks PASSED

End of tests

============================================================================
========== i5 linpack test =================================================
============================================================================

Input data or print help ? Type [data]/help :

Number of equations to solve (problem size): 20000
Leading dimension of array: 20000
Number of trials to run: 4
Data alignment value (in Kbytes): 4
Current date/time: Wed May 21 23:54:15 2014

CPU frequency:    3.092 GHz
Number of CPUs: 1
Number of cores: 2
Number of threads: 4

Parameters are set to:

Number of tests: 1
Number of equations to solve (problem size) : 20000
Leading dimension of array                  : 20000
Number of trials to run                     : 4    
Data alignment value (in Kbytes)            : 4    

Maximum memory requested that can be used=3200404096, at the size=20000

=================== Timing linear equation system solver ===================

Size   LDA    Align. Time(s)    GFlops   Residual     Residual(norm) Check
20000  20000  4      125.668    42.4461  4.097986e-10 3.627616e-02   pass
20000  20000  4      125.602    42.4686  4.097986e-10 3.627616e-02   pass
20000  20000  4      125.551    42.4856  4.097986e-10 3.627616e-02   pass
20000  20000  4      125.550    42.4861  4.097986e-10 3.627616e-02   pass

Performance Summary (GFlops)

Size   LDA    Align.  Average  Maximal
20000  20000  4       42.4716  42.4861 

Residual checks PASSED

End of tests
    
por mjandrews 22.05.2014 / 01:18

1 resposta

1

Minha resposta está chegando um pouco atrasada, mas como fiz o benchmark HPL (high performance linpack), posso escrever minha resposta.

Para entender o resultado do seu experimento, você precisa saber o que a Linpack está calculando e visando o benchmarking. A Linpack usa cálculos de álgebra linear de matriz densa para medir o desempenho de cálculos de ponto flutuante de alta densidade. Os resultados são um pouco reflexivos do pico da capacidade teórica de CPU FLOPS por causa das operações dominantes de multiplicação de matriz. (É claro que existem outros fatores - memória, operações extras de memória, etc.) que não permitem a realização de FLOPS teóricos de CPU completos, mas tradicionalmente 70-80% dos FLOPS completos são bastante viáveis, se você olhar para as listas TOP500 .)

Aposto que o seu executável do Linpack está alavancando o Intel MKL (Math Kernel Library). Na arquitetura mais antiga (antes do Sandy Bridge, ao qual o seu i7 pertence), a única unidade de processamento de ponto flutuante "rápida" disponível é a unidade SSE, que processa 2 números de ponto flutuante de cada vez. Seu processador i5 mais novo é da arquitetura Ivy Bridge, que possui uma unidade AVX, que pode processar 4 números de ponto flutuante de cada vez. (Na verdade, se você observar mais de perto a capacidade do hardware, o número de operações de ponto flutuante dobra, porque elas podem executar simultaneamente adição e multiplicação, assim 4 FLOP / ciclo e 8 FLOP / cycle para cada unidade SSE e AVX, respectivamente).

Assim, a relação teórica do desempenho de CPU de um núcleo de seus processadores i7 (3,2 GHz) para i5 (2,5 GHz) seria:

(2.5) * 2 / (3.2) = 1.56

(Fator 2 contando diferença SSE-AVX.) Mas se você utilizar todos os núcleos sem hyperthreading, você deve obter:

(2.5) * 2 * 2 / (3.2 * 6) = 0.52

Agora, não posso explicar totalmente sua observação, então! A menos que, se o cálculo de 6 núcleos realmente anula a CPU de dados para computar? O fato de o i5 ser mais rápido pode indicar outras melhorias que não são provenientes da velocidade da CPU & capacidades de computação sozinho.

Wirawan

PS: O uso dos termos "i7" e "i5" pela Intel é sempre confuso para mim; enquanto "i7" é melhor do que "i5", não está claro qual a vantagem de desempenho que o primeiro oferece, e quanto.

    
por 22.08.2016 / 22:52