Mesmo Código, Diferentes Computadores - Diferenças Contraintuitivas e Enormes no Desempenho

0

TL: DR: Estou fazendo um pouco de computação de desempenho e descobri que a máquina ostensivamente "mais fraca" está superando a máquina "mais forte" em ordens de grandeza. Por quê?

Eu escrevi algum código em C para um projeto. Ele envolve 10.000 iterações de um processo demorado que gera dados pseudo-aleatórios e, após cada iteração, grava os dados em um arquivo. Eu costumava #pragma omp parallel formulti-thread a tarefa.

Eu posso correr o meu programa em duas máquinas: vamos chamá-los s e d . Aqui estão as especificações relevantes (por favor, pergunte para quaisquer outras especificações que possam interessar):

  • s : Linux Mint 15, SSD Samsung 840 EVO, 8gB RAM, CPU Intel i3 quad-core a 2,40 gHz
  • d : Linux Mint 16, Intel SSD, 8 gB de RAM, CPU AMD FX-8320 de oito núcleos a 3,5 gHZ

Aqui está a grande surpresa: s conclui a tarefa uma ordem de grandeza mais rápida que d . Eu executar o programa algumas vezes em ambas as máquinas, e s completa a tarefa em cerca de 3-4 minutos, enquanto d leva de 12 a mais de 30 minutos (eu perdi a noção do tempo). Ambos esgotam totalmente seus núcleos (ou seja, todos os núcleos a 100%) durante a computação. Este fenômeno é mesmo com programas auxiliares (Firefox, etc.) abertos em s , e nada mais rodando em d .

Mas o código é o mesmo. Os sinalizadores do compilador são os mesmos. Até a saída é a mesma. Eu mesmo removi as unidades de s e d , e as troquei e, em seguida, executei o programa novamente, apenas para testar se não era de algum modo relacionado ao Sistema Operacional. O resultado foi que o fenômeno persistiu: o processador quad-core de 2,4 gHZ superou o desempenho do processador de oito núcleos de 3,5 gHZ.

Isto é, naturalmente, muito intrigante e totalmente contra-intuitivo. Alguém pode me dizer o que está acontecendo?

Newb
fonte
Obter um profiler e medir.
Dour High Arch
A lei de Amdahl e que sistemas diferentes farão a fração seqüencial em uma velocidade diferente, além da porção paralela.
Brian
Tem certeza de que o processador Intel é um i3 e quatro núcleos ? Mesmo para a 4ª geração i3, a arca mostra apenas versões de 2 núcleos; talvez você quis dizer Xeon E3 ? (Se forem apenas 4 threads , isso tornaria a comparação ainda mais distorcida.) Uma diferença de desempenho de 4x parece estranha. Resulta SPEC CPU2006 FP Preço por maior desempenho, mas sistemas "semelhantes" (AMD FX-8150 vs. Intel Xeon E3-1220--34% de vantagem Intel) parece implicar que o sistema Intel deve ser mais ou menos "apenas" 10-15% mais rápido .
Paul A. Clayton
Além disso, você tem certeza de que eles estão executando o mesmo código? Um binário portátil pode incluir vários caminhos de código para suportar diferentes sistemas e a seleção pode ser abaixo do ideal para o sistema AMD (o compilador Intel C costumava ter esse tipo de problema).
Paul A. Clayton
@ PaulA.Clayton de acordo com o diagnóstico do meu sistema, o processador Intel tem quatro núcleos. Aqui está uma imagem: imgur.com/fYKceHe Você tem um bom ponto no que diz respeito à execução do código: talvez a seleção seja abaixo do ideal para o processador AMD. O que é que eu posso fazer sobre isto? Como posso testar isso? Existe um compilador diferente que eu possa usar? (Estou usando o GCC no momento.)
Newb

Respostas:

1

O que você está falando é o mito do Megahertz, um número maior nem sempre significa melhor, porque a velocidade computacional real depende da arquitetura e dos fatores de design. Aqui está uma boa página sobre o assunto.


fonte
O processador AMD também tem um design entre multithreading simultâneo e multicore tradicional. Dois "núcleos" formam um módulo que compartilha um front-end (e a funcionalidade FP / SIMD), mas com execuções de números inteiros separados e caches de dados L1. Ou seja, há também um efeito "mito central".
Paul A. Clayton