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 for
multi-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?