O desempenho rápido de thread único e a alta taxa de transferência de threads múltiplos são exatamente o que você obtém com uma CPU como o Xeon E5-2699v4 da Intel .
É um Broadwell de 22 núcleos. A velocidade de clock sustentada é de 2,2 GHz com todos os núcleos ativos (por exemplo, codificação de vídeo), mas o turbo máximo de núcleo único é de 3,6 GHz .
Portanto, ao executar uma tarefa paralela, ele usa seu orçamento de energia de 145W como 22 núcleos de 6,6W. Porém, ao executar uma tarefa com apenas alguns threads, esse mesmo orçamento de energia permite que alguns núcleos turbinem até 3,6 GHz. ( Porém, a menor memória de núcleo único e a largura de banda do cache L3 em um Xeon grande significa que ele pode não funcionar tão rápido quanto um quad-core de desktop a 3,6 GHz. Um único núcleo em uma CPU Intel de desktop pode usar muito mais largura de banda total da memória.)
A velocidade do relógio nominal de 2,2 GHz é tão baixa por causa dos limites térmicos. Quanto mais núcleos uma CPU tiver, mais lento eles terão que executar quando estiverem todos ativos. Esse efeito não é muito grande nas CPUs de 4 e 8 núcleos mencionados na pergunta, porque 8 não são muitos núcleos e possuem orçamentos de energia muito altos. Até as CPUs de desktops entusiastas mostram esse efeito: o Skylake-X i9-7900X da Intel é uma peça de 10c20t com base de 3,3 GHz, turbo máximo de 4,5 GHz . Isso é muito mais espaço para turbo de núcleo único do que o i7-6700k (4.0GHz sustentado / 4.2GHz turbo sem overclock).
O escalonamento de frequência / tensão (DVFS) permite que o mesmo núcleo opere em uma ampla faixa da curva de desempenho / eficiência. Veja também esta apresentação da IDF2015 sobre o gerenciamento de energia da Skylake , com muitos detalhes interessantes sobre o que as CPUs podem fazer de maneira eficiente e negociando desempenho versus eficiência, tanto estaticamente no momento do design quanto em tempo real com o DVFS.
No outro extremo do espectro, as CPUs Intel Core-M têm frequência sustentada muito baixa, como 1,2 GHz a 4,5 W , mas podem turbo até 2,9 GHz. Com vários núcleos ativos, eles executam seus núcleos a uma velocidade de clock mais eficiente, assim como os gigantes Xeons.
Você não precisa de uma arquitetura de estilo big.LITTLE heterogênea para obter a maior parte dos benefícios. Os pequenos núcleos no ARM big.LITTLE são núcleos de ordem bastante ruins que não são bons para o trabalho de computação. O objetivo é apenas executar uma interface do usuário com energia muito baixa. Muitos deles não seriam ótimos para codificação de vídeo ou outro processamento sério de números. ( @ Lưu Vĩnh Phúc encontrou algumas discussões sobre o porquê do x86 não ter grande.LITTLE . Basicamente, gastar silício extra em um núcleo extremamente lento e de baixa potência não valeria a pena para o uso típico de desktop / laptop.)
enquanto aplicativos como edição de vídeo são determinados pelo número de núcleos. [2x 4.0 GHz + 4x 2.0 GHz não seriam melhores em cargas de trabalho multithread do que 4x 4GHz?]
Este é o seu principal mal-entendido. Você parece estar pensando que o mesmo número total de tiques do relógio por segundo é mais útil se espalhado por mais núcleos. Esse nunca é o caso. É mais como
cores * perf_per_core * (scaling efficiency)^cores
( perf_per_core
não é a mesma coisa que a velocidade do relógio, porque um Pentium4 de 3GHz recebe muito menos trabalho por ciclo de clock que um Skylake de 3GHz.)
Mais importante, é muito raro que a eficiência seja 1.0. Algumas tarefas paralelas embaraçosas são dimensionadas quase linearmente (por exemplo, compilando vários arquivos de origem). Mas a codificação de vídeo não é assim. Para x264, a escala é muito boa até alguns núcleos, mas piora com mais núcleos. por exemplo, passar de 1 a 2 núcleos quase dobrará a velocidade, mas passar de 32 a 64 núcleos ajudará muito menos a uma codificação típica de 1080p. O ponto em que os platôs de velocidade depende das configurações. ( -preset veryslow
faz mais análises em cada quadro e pode manter mais núcleos ocupados que -preset fast
).
Com muitos núcleos muito lentos, as partes de rosca única do x264 se tornariam gargalos. (por exemplo, a codificação final do fluxo de bits do CABAC. É o equivalente a hz64 do gzip e não se paralela.) Ter alguns núcleos rápidos resolveria isso, se o SO soubesse agendá-lo (ou se x264 fixasse os threads apropriados núcleos rápidos).
O x265 pode tirar proveito de mais núcleos do que o x264, uma vez que possui mais análises a serem feitas, e o design WPP do h.265 permite mais paralelismo de codificação e decodificação. Mas mesmo para 1080p, você fica sem paralelismo para explorar em algum momento.
Se você tiver vários vídeos para codificar, a execução de vários vídeos em paralelo será bem dimensionada, exceto pela competição por recursos compartilhados, como capacidade e largura de banda L3 de cache e largura de banda de memória. Menos núcleos mais rápidos poderiam se beneficiar mais da mesma quantidade de cache L3, pois não precisariam trabalhar em tantas partes diferentes do problema ao mesmo tempo.