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.
Quantidade de fios * A frequência média * As operações por ciclo
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:
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.
fonte
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 )
fonte