2014-06-03 3 views
2

Являются ли современные многоядерные процессоры действительно параллельной обработкой?
Как, например, возьмите, к примеру, процессоры Intel i7. некоторые из них имеют #of Cores: 4 и #of Threads: 8 (взято со страниц спецификаций Intel). Если я напишу программу (скажем, на Java или C), которая имеет несколько потоков выполнения, будут ли они действительно обрабатываться одновременно? Мой преподаватель сказал, что «это не всегда относится к многоядерным процессорам», но не дает слишком много деталей.Многопоточность - многоядерные процессоры действительно выполняют параллельную обработку?

И почему Intel должна указывать как #of Core, так и # Threads? Не является ли поток просто термином, описывающим программу -связанной абстракцией, в отличие от «ядер», которые являются реальным оборудованием? («Каждый поток работает на разных ядрах»).

+2

Вы путаетесь между аппаратной резьбой (SMT) и потоками программного обеспечения. –

+1

Ответ на ваш вопрос: «Да». Расширенный ответ не является точно программированием и слишком широким, потому что он должен будет охватывать все параллельное программирование и аппаратное обеспечение. –

+1

У Intel есть то, что они называют «гиперпотоком», что позволяет каждому ядру запускать несколько потоков одновременно. Вот почему они говорят 4 ядра/8 потоков. Одновременно может выполняться до 8 потоков, но с использованием ресурсов из 4 ядер. – Adam

ответ

3

Да, современные многоядерные процессоры действительно выполняют параллельную обработку на соответствующих задачах и при условии, что программное обеспечение правильно написано для его разрешения. Я лично тестировал многопоточное программное обеспечение с настраиваемым количеством потоков и наблюдал увеличение пропускной способности, пропорциональное количеству потоков, до тех пор, пока это число не будет равным количеству ядер: на четырехъядерном процессоре один поток выполнил одну задачу в определенной сумме времени и четыре потока выполнили четыре задачи за один и тот же промежуток времени, увеличив пропускную способность в четыре раза. С дополнительными потоками, превышающими количество ядер, больше не увеличивалось, а на самом деле небольшое уменьшение: восемь задач на восьми потоках заняли более двух раз больше времени, чем четыре задачи по четырем потокам. Это было быстрее, просто использовать четыре потока и каждый из них обрабатывать две задачи подряд.

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

И, наконец, номера «число потоков» и «количество ядер» отличаются друг от друга из-за «гиперпотоковой» архитектуры Intel, которая, предположительно, позволяет каждому ядру запускать по два потока одновременно. По моему опыту, гиперпоточность не очень полезна в реальном мире: например, в тесте, который я описал выше, ядра были гиперпрочитанными ядрами Intel, но максимальная пропускная способность по-прежнему возникала, когда я запускал несколько потоков, равных числу физических ядрах и удалены, когда я запускал несколько потоков, равных заявленной потребляемой мощности Intel. Я считаю, что лучше всего обратить внимание на количество ядер и игнорировать требование Intel «количество потоков».

+2

«hyperthreads» - это аппаратная поддержка для эффективного переключения контекста и наиболее выгодна для рабочих нагрузок, где высокоприоритетные неинтуитивно-интенсивные потоки должны прерывать более низкие приоритеты. Это делает графические пользовательские интерфейсы более отзывчивыми. –

+1

@OllieJones Так что гиперпоточность на самом деле не много потоков выполнения, а несколько контекстов потоков? Это имеет смысл и согласуется с тем, что я видел, поскольку мое приложение было таким, в котором это не было бы полезно. Спасибо за информацию. –

Смежные вопросы