Вопрос или проблема
Я потратил некоторое время на изучение таксономии Флинна, но есть один аспект, который я до сих пор не могу понять. Я изучал следующие аспекты аппаратной многопоточности: мелкозернистая, крупнозернистая и одновременная многопоточность. Последняя используется Intel и называется гиперпоточностью.
По крайней мере для одновременной многопоточности, я знаю, что реализация гиперпоточности от Intel создает иллюзию наличия большего количества ядер, чем есть на самом деле. Я знаю, что одновременная многопоточность достигается с использованием динамической модели выполнения с множественной выдачей. Теперь одновременная многопоточность может обрабатывать несколько потоков в один и тот же момент времени. Но означает ли это, что она имеет несколько потоков инструкций и, следовательно, является MIMD? Я задаюсь тем же вопросом относительно других видов многопоточности (крупнозернистой и мелкозернистой). Особенно потому, что Википедия пишет следующее о MIMD: “Машины, использующие MIMD, имеют несколько процессорных ядер, которые функционируют асинхронно и независимо”
Спасибо за помощь в разборе этого вопроса!
Ни то, ни другое.
SIMD и MIMD работают на уровне инструкций внутри процессора, в отличие от многопоточности, которая охватывает вокруг ядра процессора и представляет два процессорных ядра системе.
MIMD внутри ядра представлено как наличие нескольких блоков выполнения, способных выполнять инструкции одновременно. Хотя несколько процессоров могут выглядеть как MIMD в концептуальном смысле, это не совсем то, что подразумевается.
Как пример из Википедии Изменения архитектуры Skylake по сравнению с архитектурой Broadwell, вы можете увидеть ядро одного процессора. В этом ядре инструкции декодируются в одну или несколько uOPs (микроопераций, специфичных для микропроцессорной архитектуры) и оттуда попадают в планировщик:
Единицы выполнения – это Execution Units, которые могут работать одновременно, принимая данные и инструкции. Это область, где используется MIMD. Несколько инструкций и данных направляются в несколько устройств в ядре.
Гиперпоточность работает вне ядра процессора. Она находится вне переднего конца, планировщика и блоков выполнения и представляет отдельное сохраненное состояние процессора внешнему миру. Когда один поток в процессоре задерживается или не может эффективно использовать EUs, она может подавать инструкции из второго потока, чтобы заполнить пробелы.
SIMD/MIMD являются различными и отдельными от многопоточности или гиперпоточности.
По крайней мере для одновременной многопоточности, я знаю, что реализация гиперпоточности от Intel создает иллюзию наличия большего количества ядер, чем есть на самом деле
Если каждый HT “поток” выглядит как отдельный логический ЦП, то он также ведет себя как отдельный логический ЦП – он имеет свои собственные регистры и свой собственный указатель инструкций, а значит, и свой собственный поток инструкций. Следовательно, это была бы форма MIMD по вашей классификации.
Гиперпоточность на x86 была разработана таким образом, чтобы когда ЦП с HT впервые были введены, операционные системы того времени не знали, что это такое, но все равно могли работать с ЦП с HT, как если бы они просто работали на многопроцессорной (или многопроцессорной) системе, распределяя различные процессы по каждому HT-потоку так, как они делали бы это с независимыми процессорными ядрами.
(Хотя, поскольку аппаратные потоки разделяют определенные компоненты ядра, на котором они находятся, планировщик, осведомленный о HT, может принимать более обоснованные решения, например, избегая размещения процессов на потоках-сиблингах, если можно использовать отдельное ядро… но суть в том, что HT спроектирована так, что даже ОС, не осведомленная о HT, все равно может их использовать.)
Ответ или решение
Когда речь заходит о аппаратном многопоточности и ее связи с категорийной системой Флинна, важно понимать, что мы говорим о разных уровнях архитектуры. Ваша путаница, вероятно, связана с тем, что понятия SIMD (Single Instruction, Multiple Data) и MIMD (Multiple Instruction, Multiple Data) относятся к внутренней архитектуре процессора, а многопоточность касается того, как процессор взаимодействует с операционной системой и программным обеспечением.
Многопоточность и архитектура процессора
Под многопоточностью понимается методология, которая позволяет процессору выполнять несколько потоков одновременно, не обязательно увеличивая количество физических ядер. В вашей термологии "тонкая", "грубая" и "одновременная" многопоточность отличаются в основном временным распределением и параллельным выполнением инструкций.
-
Тонкая многопоточность (Fine-grained multithreading): переключение между потоками происходит на каждом цикле машинного такта, что помогает скрыть задержки связанные с ожиданием ресурсов.
-
Грубая многопоточность (Coarse-grained multithreading): здесь поток переключается только при наступлении больших задержек или блокировок, что позволяет снизить частоту переключений, но при этом не скрывает все возможные задержки.
-
Одновременная многопоточность (Simultaneous multithreading, SMT), более известная как Hyper-threading от Intel, позволяет исполнению инструкций из разных потоков происходит в одном и том же такте.
Симметрия с MIMD и гипертехнология
Теперь, говоря о SMT или Hyper-threading, можно утверждать, что система выглядит как MIMD с точки зрения логики. Это связано с тем, что каждая логическая единица (или поток) имеет собственное состояние, включая регистры и указатель команд, поэтому выполняется как независимый поток инструкций, что позволяет рассматривать его как реализацию MIMD на логическом уровне.
Тем не менее, фактически Hyper-threading и MIMD разнородны: MIMD действует на более глубоком уровне, разделяя ресурсы внутри архитектуры, тогда как многопоточность оборачивает это и говорит с внешней операционной системой.
Заключение
Подводя итог, можно сказать, что многопоточность, и в частности SMT, не является ни SIMD, ни MIMD в чистом виде. Она функционирует как MIMD на логическом уровне, создавая иллюзию дополнительных ядер, но не изменяет фактическое распределение и параллельность инструкций на уровне исполнения, что является отличительной чертой SIMD/MIMD.
Этот анализ подчеркивает, что подходы к многопоточности и архитектурные техники Не следует путать, так как каждое из них служит своей специфической цели в модернизации вычислительных систем.