Что такое поток ЦП и как он связан с логическими потоками в коде?

На мой взгляд, нет. Я изучил это давным-давно, так что вам не придется!

Я думаю, это здорово, что вы сначала изучили C, и я бы продолжал писать программы на C время от времени, но я не вижу почему было бы полезно разобраться с Win32 API. Честно говоря, это был большой беспорядок.

7
задан MikeJ 27 May 2009 в 14:33
поделиться

5 ответов

Да, процессоры на базе Nehalem реализуют Hyper-threading .

Новый Nehalem-EX, о котором вы говорите, имеет 8 физических ядер, на которых каждое ядро ​​можно рассматривать как 2 логических ядра, всего 16 логических ядер, что позволяет выполнять 16 потоков приложений на одном процессоре.

Это та же технология, которая используется в процессорах Pentium 4 с поддержкой Hyper-threading, а совсем недавно на процессорах Atom. Мой Eee PC оснащен одноядерным процессором Atom с двумя логическими ядрами - диспетчер задач Windows покажет два графика ЦП; по одному для каждого логического ядра.

Sun UltraSPARC T2 (и T1) также позволяют одновременную многопоточность (из которых Intel s реализация называется Hyper-Threading (торговая марка Intel), которая позволяет одному ядру выступать в качестве нескольких логических ядер для выполнения нескольких потоков на одном ядре.

Грубая идея одновременной многопоточности состоит в том, чтобы иметь несколько регистров для хранения состояние процессора, поэтому кажется, что на самом деле в одном ядре есть несколько ядер, потому что оно имеет несколько полных наборов аппаратных регистров.

Хотя физические возможности, такие как ALU и FPU, могут не увеличиваться, имея больше наборов регистры для запуска большего количества потоков на физическом ядре могут привести к лучшему использованию доступных ресурсов процессора. Ядро могло не быть насыщенным при выполнении одного потока, но выполнение нескольких может полностью заполнить все блоки.

Итак, что это значит для программистов?

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

Даже при одновременной многопоточности код выполняется в одном потоке на каждое логическое ядро.

10
ответ дан 6 December 2019 в 10:53
поделиться

Крайней частью многопоточного процессора является процессор цилиндрической формы. Это форма SMT, при которой процессор равномерно распределяет слоты между несколькими потоками циклически. Для этого ему нужны только копии различных регистров при использовании одного и того же набора исполнительных модулей. Таким образом, за 4 такта он поместит в конвейер код из потоков 0–3.

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

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

4
ответ дан 6 December 2019 в 10:53
поделиться

Это не переименование гиперпоточности - это гиперпоточность (это написано на этой веб-странице, на которую вы указали ссылку).

Проще говоря, процессор сообщает ОС, что у него 16 ядер , поэтому он может балансировать задачи на удвоенном количестве ядер. Технология Hyper-threading дает некоторые преимущества, поскольку в некоторых случаях две разные инструкции из двух разных программ / потоков могут выполняться на одном ядре одновременно. Но прироста на 200% точно не даст. Я не работал с таким процессором, но думаю, вы можете получить примерно 10% -20% дополнительного времени процессора.

2
ответ дан 6 December 2019 в 10:53
поделиться

Каждая модель потоковой системы операционной системы должна отображать потоки уровня ОС в потоки аппаратного уровня, такие как те, которые описаны в вопросе.

Логические потоки, порожденные высокоуровневым программированием. языки, используемые программистами приложений, по-прежнему находятся на уровне ОС, удаленном от оборудования, если, конечно, вы не говорите о коде ОС, который выполняет отображение.

1
ответ дан 6 December 2019 в 10:53
поделиться

Гиперпоточность (кстати, торговая марка INTEL) позволяет каждому потоку работать одновременно. Таким образом, в этом случае вы можете одновременно запускать 8X2 потоков приложений.

Из брошюры ...

Архитектура Intel Nehalem построена на уникальном 45-нанометровом технологическом процессе Intel с технологией high-k metal gate

 Up to **8 cores** per processor
 Up to **16 threads per processor** with Intel® Hyper-threading
 2.3 billion transistors

Сравните это с однократным ЦП, одноядерные системы, в которых каждый поток должен быть запланирован, и будет активным не более одного потока - это одна запущенная задача, связанная с ЦП, а остальные ожидают передачи ввода-вывода.

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

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

Chris

1
ответ дан 6 December 2019 в 10:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: