Como determinar a quantidade de FLOPs que meu computador é capaz

15

Eu gostaria de determinar o número teórico de FLOPs (operações de ponto flutuante) que meu computador pode executar. Alguém por favor pode me ajudar com isso. (Gostaria de comparar meu computador a alguns supercomputadores apenas para ter uma idéia da diferença entre eles)

Ol 'Confiável
fonte

Respostas:

9

O máximo teórico FLOP / s é dado por: do número de núcleos é fácil. A frequência média deve, em teoria, levar em consideração alguma quantidade de Turbo Boost (Intel) ou Turbo Core (AMD), mas a frequência operacional é um bom limite inferior. As operações por ciclo dependem da arquitetura e podem ser difíceis de encontrar (8 para SandyBridge e IvyBridge, consulte o slide 26 ). É o assunto desta questão de estouro de pilha , que inclui números para várias arquiteturas modernas.

Número de núcleosFreqüência médiaOperações por ciclo
Max Hutchinson
fonte
11
Ok, tenho 2 núcleos, Frequência de operação: 1,8 GHz, Tecnologia Intel Turbo Boost: 3,00 Ghz, não consigo encontrar as operações por ciclo, aqui está o site: ark.intel.com/products/75460/… obrigado
Ol 'Confiável
Haswell pode fazer 16 DP / ciclo. Acabei de adicionar um link no corpo da resposta a uma resposta SO.
Max Hutchinson
Isso significa que meu computador pode fazer: 2 x 3.000.000.000 Hz x 16 = 96 Giga FLOPs?
Ol' Confiável
Isso significa que ele poderia funcionar entre 2 * 1,8 GHz * 16 DP = 57,6 GFLOP / se 96 GFLOP / s, dependendo da frequência média real. Se você precisar usar um número único, 57,6 é o mais justo, IMO.
Max Hutchinson
2
As taxas de FLOP geralmente são uma medida ruim da 'bondade' de um processador. Consulte scicomp.stackexchange.com/questions/114/… por exemplo. Você pode pensar nos custos limitadores de sua tarefa (por exemplo, limite de computação vs limite de memória vs limite de disco) e se concentrar no hardware relevante (sistema de computação, sistema de memória, E / S).
Max Hutchinson
4

Você precisará conhecer o modelo e o fornecedor das CPUs em sua máquina. Depois disso, você pode procurar no site do fornecedor (ou talvez na Wikipedia) a taxa de clock, número de chips / soquetes, número de núcleos por chip, número de operações de ponto flutuante por ciclo e a largura do vetor dessas operações . Então, você simplesmente se multiplica.

Tomemos, por exemplo, os processadores Intel Xeon E5-2680 "Sandy Bridge" em Stampede, onde trabalho. As especificações são:

  • 2.7GHz
  • 2 chips / nó, 8 núcleos / chip
  • 2 instruções / ciclo de vetores
  • Instruções AVX de 256 bits de largura (4 operandos simultâneos de precisão dupla)

Multiplicando esses, obtém 345,6 GF / nó ou 2,2 PF para a parte não acelerada do sistema.

Geralmente pensamos em termos de operações de precisão dupla (64 bits), porque essa é a precisão necessária para a grande maioria de nossos usuários, mas você pode refazer o cálculo em termos de precisão única, se quiser. Isso geralmente muda apenas o último fator, digamos, 8 Flops SP / instrução em vez de 4 Flops DP / inst, mas pode ser muito diferente disso. GPUs mais antigas, por exemplo, só fizeram DP em cerca de 1/8 da taxa de SP. Se você citar um número para o seu sistema, deve ser explícito sobre o que usou, se não for de precisão dupla, porque as pessoas assumirão que sim.

Além disso, se o seu chip suportar instruções FMA (Multiply Add) fundidas, e puder executá-las na velocidade máxima, a maioria das pessoas considerará isso como duas operações de ponto flutuante, embora um contador de desempenho de hardware possa contar isso como apenas uma instrução.

Finalmente, você também pode fazer isso para quaisquer aceleradores que possam existir em seu sistema (como uma GPU ou Xeon Phi) e adicionar esse desempenho ao desempenho da CPU para obter um total teórico.

Bill Barth
fonte
Não é o suficiente para saber o modelo de CPU, é preciso descobrir as frequências de funcionamento reais
Aksakal
@ Aksakal, para uma análise teórica, provavelmente não há problema em escolher a frequência nominal. É difícil saber em que frequência seus chips realmente serão executados, pois isso depende da carga de trabalho e da qualidade do seu ar-condicionado.
Bill Barth
2

Entendo que você pediu o valor teórico, mas como isso é quase sempre inacessível por qualquer código real, mesmo o LINPACK, você pode executar o DGEMM (otimizado) apenas para matrizes muito grandes. A razão de eu preferir esse método é que ele expõe algumas das deficiências de certos processadores que os impedem de atingir seu valor teórico de pico de flop.

Por exemplo, atualmente, as GPUs da NVIDIA realizam operações com números inteiros e de ponto flutuante no mesmo pipeline. Isso significa que você só pode atingir o pico de flop / s teórico se não fizer nenhum cálculo inteiro . Como a indexação de array e qualquer outra forma de acesso a dados exigem aritmética inteira em algum lugar, nenhum código pode atingir o pico / flop teórico de uma GPU NVIDIA. Na maioria dos casos, vê-se ~ 80% como o limite superior. Para CPUs que emitem operações inteiras e de ponto flutuante simultaneamente, isso não é problema.

Em alguns processadores multicore do tipo GPU, como Intel Knights Corner e Blue Gene / Q, é mais difícil atingir o pico de flop / s do que nos processadores tradicionais para problemas de pipeline semelhantes (embora ambos possam atingir ~ 90% do pico no DGEMM grande, pelo menos )

Jeff
fonte
Por que nenhum código pode atingir o pico / flop teórico em uma GPU NVIDIA?
skytree
Consulte o parágrafo 2. No entanto, tudo isso foi relevante para arquiteturas mais antigas. As arquiteturas mais recentes da NVIDIA podem executar números inteiros e de ponto flutuante simultaneamente e atingir> 90% do pico no DGEMM grande.
Jeff