Ядра, нити и мультиобработка

Я знаю, что вся эта терминология - запутанное поле, но я пытаюсь понять, как они используются по адресу: http://www.cpu-world.com/CPUs/Xeon/Intel-Xeon%20E7-8870.html

У меня есть контекст, что у меня есть старая программа, написанная на VB6, которую я могу запустить много раз. И мне интересно, сколько экземпляров я смогу запустить до того, как обработка значительно замедлится? Например. для Xeon E7-8870 меня будут душить 10 ядер, 20 потоков или 8 мультипроцессоров?

(Я знаю, что программа нуждается в переписывании на C#, другие приоритеты, хотя...)

Очень ценится

2 ответа

Решение

После насыщения физических ядер каждый экземпляр будет значительно замедляться. Это особенно верно, если все потоки работают по существу с одинаковым набором команд. Если у вас есть 10 физических ядер, вы, вероятно, начнете видеть снижение общей производительности, если вы запустите больше экземпляров.

Вы действительно не будете знать, пока не попробуешь. Если задачи выполняют много операций ввода-вывода, вы можете обнаружить, что большее количество экземпляров позволяет центральному процессору работать даже во время ввода-вывода. Однако, если задачи используют много памяти, вы можете обнаружить, что большее давление на кэши и контроллер памяти приводит к тому, что общая пропускная способность фактически падает, возможно, радикально.

Даже в самых лучших условиях гиперпоточность увеличивает пропускную способность примерно на 15%. Это означало бы, что два потока работают на 57% быстрее, чем один поток.

Там действительно нет путаницы.

Ядро - это процессор на кристалле. Вы можете иметь процессор, который представляет собой одно ядро ​​в одном пакете. Вы также можете иметь двухъядерный процессор, который представляет собой 1 пакет с несколькими процессорами. То же самое касается любого многоядерного. Вы могли бы иметь 1000-ядерный процессор, его еще один пакет с 1000 процессоров.

Мультипроцессор представляет собой несколько сокетов и физических пакетов ЦП. Вы можете иметь 2 одноядерных процессора или более. Вы также можете иметь несколько многоядерных процессоров, предполагая, что процессор поддерживает это. Четырехъядерные процессоры - это почти то же самое, что 16 процессоров в отдельных пакетах или 1 16-ядерный пакет в плане мощности и производительности. Это просто 4 пакета и 4 ядра для каждого пакета.

Потоки - это количество отдельных процессов, которые могут быть запущены одновременно. Проще говоря, большинство процессоров могут обрабатывать 1 поток одновременно, а Hyperthreading может выполнять 2 потока одновременно. HTT (Hyperthreading) means each core (Doesn't matter if its 2 on 1, or 1 by 2) can do 2 threads. So a quad core HTT processor can in theory do 8 threads. This is not always correct, and some software handles going through HTT very poorly.

As for your process, it is hard to say. If you had 10 cores with Hyper threading, and the application can only run on a single thread, then you could likely have 20 separate instances assuming: You have enough RAM You disk drives can keep up with the IOs Nothing else interrupts or takes over

If the process cannot fill the entire CPU on its own (Say it caps at 50% usage) you might be able to add some extra threads / jobs to the pool too.

Другие вопросы по тегам