Des performances rapides pour un seul thread et un débit très élevé pour plusieurs threads, c'est exactement ce que vous obtenez avec un processeur tel que le Xeon E5-2699v4 d'Intel .
C'est un 22-core Broadwell. La vitesse d'horloge soutenue est de 2,2 GHz avec tous les cœurs actifs (par exemple l'encodage vidéo), mais la single-core max turbo est de 3.6GHz.
Ainsi, lors de l'exécution d'une tâche parallèle, il utilise son budget d'énergie de 145W pour 22 cœurs de 6,6W. Mais lors de l'exécution d'une tâche avec seulement quelques threads, ce même budget d'énergie permet à quelques cœurs de monter en puissance jusqu'à 3,6 GHz. la bande passante de la mémoire monocœur et du cache L3 dans un gros Xeon. Cela signifie qu'il ne fonctionnera peut-être pas aussi vite qu'un quadricœur de bureau à 3,6 GHz. Un seul cœur dans un processeur Intel de bureau peut utiliser beaucoup plus de la bande passante totale de la mémoire).
La vitesse d'horloge nominale de 2,2 GHz est aussi basse en raison des limites thermiques. Plus le nombre de cœurs d'un processeur est élevé, plus ils doivent fonctionner lentement lorsqu'ils sont tous actifs. Cet effet n'est pas très important dans les processeurs à 4 et 8 cœurs que vous mentionnez dans la question, car 8 cœurs ne sont pas si nombreux et leur budget énergétique est très élevé. Cet effet est perceptible même sur les processeurs des ordinateurs de bureau les plus performants : L'i9-7900X Skylake-X d'Intel est une pièce 10c20t avec une base de 3.3GHz, un turbo max de 4.5GHz. . C'est beaucoup plus que l'i7-6700k (4.0GHz soutenu / 4.2GHz turbo sans overclocking).
La mise à l'échelle de la fréquence et de la tension (DVFS) permet à un même cœur de fonctionner sur une large plage de la courbe performance/efficacité. Voir aussi cette présentation de l'IDF2015 sur la gestion de l'alimentation de Skylake Il y a beaucoup de détails intéressants sur ce que les processeurs peuvent faire efficacement, et sur le compromis entre performance et efficacité, à la fois de manière statique au moment de la conception et à la volée avec DVFS.
À l'autre extrémité du spectre, les processeurs Intel Core-M ont une fréquence soutenue très basse, comme 1.2GHz à 4.5W mais peuvent être turbo jusqu'à 2.9GHz. Avec plusieurs cœurs actifs, ils feront tourner leurs cœurs à une vitesse d'horloge plus efficace, tout comme les Xeons géants.
Vous n'avez pas besoin d'une architecture hétérogène de type big.LITTLE pour bénéficier de la plupart des avantages. Les petits cœurs de l'architecture ARM big.LITTLE sont des cœurs d'ordre plutôt médiocres qui ne conviennent pas au travail de calcul. Le but est simplement de faire fonctionner une interface utilisateur avec une puissance très faible. Un grand nombre d'entre eux ne serait pas idéal pour l'encodage vidéo ou d'autres calculs sérieux. ( @Luu Vinh Phúc a trouvé des discussions sur la raison pour laquelle x86 n'a pas de big.LITTLE. . En gros, dépenser du silicium supplémentaire pour un cœur très lent et à très faible puissance ne vaudrait pas la peine pour une utilisation typique d'un ordinateur de bureau/portable).
alors que des applications comme le montage vidéo sont déterminées par le nombre de cœurs. [Est-ce que 2x 4.0 GHz + 4x 2.0 GHz ne seraient pas meilleurs pour les charges de travail multithread que 4x 4GHz ?]
C'est là votre principal malentendu. Vous semblez penser que le même nombre total de ticks d'horloge par seconde est plus utile s'il est réparti sur plusieurs cœurs. Ce n'est jamais le cas. Il s'agit plutôt de
cores * perf_per_core * (scaling efficiency)^cores
( perf_per_core
n'est pas la même chose que la vitesse d'horloge, car un Pentium4 à 3 GHz aura beaucoup moins de travail par cycle d'horloge qu'un Skylake à 3 GHz).
Plus important encore, il est très rare que l'efficacité soit de 1,0. Quelques terriblement parallèle Les tâches s'échelonnent de façon presque linéaire (par exemple, la compilation de plusieurs fichiers sources). Mais l'encodage vidéo est no comme ça. Pour x264, la mise à l'échelle est très bonne jusqu'à quelques cœurs, mais se dégrade avec l'augmentation du nombre de cœurs. Par exemple, passer de 1 à 2 cœurs doublera presque la vitesse, mais passer de 32 à 64 cœurs sera beaucoup moins utile pour un encodage 1080p typique. Le point auquel la vitesse plafonne dépend des paramètres. ( -preset veryslow
fait plus d'analyse sur chaque trame, et peut occuper plus de cœurs que les -preset fast
).
Avec un grand nombre de cœurs très lents, les parties monofilaires de x264 deviendraient des goulots d'étranglement. (par exemple, l'encodage final du flux binaire CABAC. C'est l'équivalent de gzip pour h.264, et ne se parallélise pas). Le fait d'avoir quelques cœurs rapides résoudrait ce problème, si le système d'exploitation savait comment le planifier (ou si x264 affectait les threads appropriés aux cœurs rapides).
x265 peut tirer parti de plus de cœurs que x264, car il a plus d'analyses à effectuer, et la conception WPP de h.265 permet plus de parallélisme au niveau du codage et du décodage. Mais même pour le 1080p, il n'y a plus de parallélisme à exploiter à un moment donné.
Si vous avez plusieurs vidéos à encoder, faire plusieurs vidéos en parallèle est une bonne solution, à l'exception de la concurrence pour les ressources partagées comme la capacité et la bande passante du cache L3 et la bande passante de la mémoire. Des cœurs moins rapides pourraient tirer davantage de bénéfices de la même quantité de cache L3, puisqu'ils n'auraient pas besoin de travailler sur autant de parties différentes du problème à la fois.