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

Поскольку у меня есть 4 ядра, я не ожидаю ускорения, запустив больше потоков, чем ядра, поскольку одно ядро ​​может работать только в одном потоке в данный момент. Я не очень разбираюсь в аппаратных средствах, поэтому это всего лишь предположение.

Есть ли возможность запуска параллелизуемого процесса для большего количества потоков, чем ядра? Другими словами, мой процесс завершится быстрее, медленнее или примерно за такое же количество времени, если я запустил его с использованием 4000 потоков вместо 4 потоков?

13 ответов

Если ваши потоки не выполняют ввод-вывод, синхронизацию и т.д., и там ничего не работает, 1 поток на ядро ​​получит максимальную производительность. Однако это, скорее всего, не так. Добавление большего количества потоков обычно помогает, но после некоторого момента они вызывают некоторое ухудшение производительности.

Недавно я занимался тестированием производительности на двухъядерном процессоре, работающем на приложении ASP.NET на Mono, при довольно приличной нагрузке. Мы играли с минимальным и максимальным количеством потоков, и в итоге мы выяснили, что для этого конкретного приложения в этой конкретной конфигурации наилучшая пропускная способность была где-то между 36 и 40 потоками. Все, что за пределами этих границ, хуже. Урок выучен? Если бы я был вами, я бы тестировал с различным количеством потоков, пока не найду нужный номер для вашего приложения.

Одно можно сказать наверняка: потоки 4k займут больше времени. Это много контекстных переключателей.

Я согласен с ответом @Gonzalo. У меня есть процесс, который не выполняет операции ввода-вывода, и вот что я нашел:

Обратите внимание, что все потоки работают на одном массиве, но разные диапазоны (два потока не имеют доступа к одному и тому же индексу), поэтому результаты могут отличаться, если они работают на разных массивах.

Машина 1.86 - это компьютер macbook с SSD. Другой mac - это iMac с обычным жестким диском (я думаю, это 7200 об/мин). У машины Windows также есть жесткий диск емкостью 7200 об/мин.

В этом тесте оптимальное число было равно числу ядер в машине.

Я знаю, что этот вопрос довольно старый, но все сложилось с 2009 года.

Теперь нужно учитывать две вещи: количество ядер и количество потоков, которые могут выполняться в каждом ядре.

С процессорами Intel количество потоков определяется гиперпотоком, который составляет всего 2 (если доступно). Но Hyperthreading сокращает время выполнения на два, даже если не используется 2 потока! (т.е. один конвейер разделен между двумя процессами - это хорошо, когда у вас больше процессов, а не наоборот).

На других процессорах у вас может быть 2, 4 или даже 8 потока. Поэтому, если у вас есть 8 ядер, каждый из которых поддерживает 8 потоков, вы можете иметь 64 процесса, работающие параллельно без переключения контекста.

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

Из моего собственного опыта, если у вас много ввода-вывода, много потоков - это хорошо. Если у вас очень интенсивная работа с интенсивной памятью (прочитайте источник 1, прочитайте источник 2, быстро вычислите, напишите), то больше потоков не поможет. Опять же, это зависит от того, сколько данных вы читаете/записываете одновременно (т.е. Используете SSE 4.2 и читаете 256 битовых значений, что останавливает все потоки на своем шаге... другими словами, 1 поток, вероятно, намного проще реализовать и вероятно, почти так же быстро, если не на самом деле быстрее. Это будет зависеть от вашей архитектуры процесса и памяти, некоторые продвинутые серверы управляют отдельными диапазонами памяти для отдельных ядер, поэтому отдельные потоки будут быстрее, если ваши данные будут правильно поданы... вот почему, на некоторых архитектуры, 4 процесса будут работать быстрее, чем 1 процесс с 4 потоками.)

Фактическая производительность будет зависеть от того, сколько добровольного урожая каждого потока будет сделано. Например, если потоки вообще не имеют ввода/вывода NO и не используют системные службы (т.е. Они связаны на 100% cpu), то 1 поток на ядро ​​является оптимальным. Если потоки выполняют все, что требует ожидания, вам придется поэкспериментировать, чтобы определить оптимальное количество потоков. 4000 потоков будет иметь значительные накладные расходы на планирование, поэтому, вероятно, тоже не оптимально.

Ответ зависит от сложности алгоритмов, используемых в программе. Я придумал метод вычисления оптимального количества потоков, выполнив два измерения времени обработки Tn и Tm для двух произвольных чисел потоков n и m. Для линейных алгоритмов оптимальным числом потоков будет N = sqrt ((mn (Tm * (n-1) - Tn * (m-1)))/(nTn-mTm)).

Прочитайте мою статью относительно расчетов оптимального числа для различных алгоритмов: pavelkazenin.wordpress.com

Я думал, что добавлю еще одну перспективу. Ответ зависит от того, принимает ли вопрос слабое масштабирование или сильное масштабирование.

Слабое масштабирование: как время решения зависит от количества процессоров для фиксированного размера проблемы на процессор.

Сильное масштабирование: как время решения зависит от количества процессоров для фиксированного общего размера проблемы.

Если вопрос предполагает слабое масштабирование, то достаточно ответить @Gonzalo. Однако, если вопрос предполагает сильное масштабирование, нужно добавить что-то еще. При сильном масштабировании вы принимаете фиксированный размер рабочей нагрузки, поэтому, если вы увеличиваете количество потоков, размер данных, с которыми каждый поток должен работать, уменьшается. На современных процессорах доступ к памяти является дорогостоящим и предпочтительнее поддерживать локальность, сохраняя данные в кэшах. Поэтому вероятное оптимальное количество потоков может быть найдено, когда набор данных каждого потока вписывается в каждый кэш ядра (я не буду вдаваться в подробности обсуждения того, является ли это кеш (L1/L2/L3) системы L1).

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

Случай 1: выполняется с четырьмя потоками, где каждый поток должен заполнять 2AU. Каждый поток занимает 10 секунд для завершения (с большим количеством промахов в кеше ). С четырьмя ядрами общий объем времени будет составлять 10 с (10 с * 4 потока /4 ядра).

Случай 2: выполняется с восемью потоками, где каждый поток должен заполнять 1AU. Каждый поток занимает всего 2 секунды (вместо 5s из-за уменьшения количества промахов в кэше ). С восемью ядрами общий объем времени составит 4 с (2 с * 8 потоков /4 ядра).

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

4000 потоков за один раз довольно высоки.

Ответ: да и нет. Если вы делаете много блокировки ввода-вывода в каждом потоке, то да, вы можете показать значительное ускорение, делая до 3 или 4 потока на каждое логическое ядро.

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

Я бы начал наращивать количество потоков для приложения, начиная с 1, а затем переходить к чему-то вроде 100, запускать три-пять проб для каждого количества потоков и строить себе график скорости работы против. количество потоков.

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

Вы не можете знать, пока не проверите.

Вы найдете, сколько потоков вы можете запустить на вашем компьютере, запустив команду htop или ps, которая возвращает количество процессов на вашем компьютере.

Вы можете использовать man-страницу о команде "ps".

  • ps -aux| wc -l
  • ps -eLf | wc -l

Расчет количества пользовательских процессов:

  • ps --User root | wc -l

Кроме того, вы можете использовать "htop"

У многих процессоров Intel есть поддержка технологии под названием Hyper-threading. Данная технология позволяет выполнять сразу 2 потока команд на одном ядре процессора. Таким образом удается более эффективно использовать вычислительную мощность ядра. Но, технология Hyper-threading используется далеко не во всех процессорах Intel. Технология Hyper-threading присутствует в , а также в некоторых новых Pentium и мобильных Core i5.

У процессоров AMD с архитектурой Zen также есть технология, создающая по два потока вычислений на ядро. И у AMD также не все процессоры получают поддержку данной технологии.

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

Способ № 1. Диспетчер задач.

Самый простой способ узнать сколько потоков , это посмотреть в «Диспетчере задач». Для можно воспользоваться классической комбинацией клавиш CTRL-SHIFT-DELETE. Если у вас операционная система Windows 7 или более новая, то это можно сделать еще и с помощью CTRL-SHIFT-ESC.

После открытия «Диспетчера задач» нужно перейти на вкладку «Быстродействие».

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

Если у вас Windows 8 или Windows 10, то хронология нагрузки на процессор может отображаться одним графиком. В этом случае вам нужно сначала переключиться на отображение хронологии по логическим процессорам (потокам). Для этого нужно кликнуть правой кнопкой мышки и выбрать «Изменить график – Логические процессоры».

После этого в «Диспетчере задач» появятся отдельные графики для каждого потока вашего процессора. Например, на скриншоте внизу отображается 4 графика, следовательно, в используемом процессоре 4 потока.

Кроме этого, в «Диспетчере задач» Windows 8/10 прямым текстом указывается сколько потоков в процессоре. Сразу под графиками есть блок с информацией. Там в строке «Логические процессоры» указано количество потоков процессора.

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

Способ № 2. Программы.

Пожалуй, самой известной программой для получения информации о характеристиках процессора является программа CPU-Z. Данная программа является бесплатной, и вы можете . Если вы хотите узнать сколько потоков в процессоре, то вам нужно запустить CPU-Z на своем компьютере и посмотреть значение «Threads», которое находится в правом нижнем углу программы на вкладке «CPU». На скриншоте внизу видно, что у процессора 4 потока.

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

Среди прочего с ее помощью можно узнать и количество потоков процессора. Для этого нужно перейти в раздел «CPU» и посмотреть значение «Threads».

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

Ладно бы пользователи просто заблуждались и ничего не теряли. Проблема в том, что неправильное понимание сути многоядерности приводит к финансовым потерям. Пытаясь увеличить производительность, человек тратит деньги на процессор с большим количеством ядер, но не замечает разницы.

Многоядерность и многопоточность

Когда мы изучали вопрос, то обратили внимание на особенность процессоров Intel – в стандартных инструментах Windows отображается разное число ядер. Это обусловлено работой технологии Hyper-Threading, которая обеспечивает многопоточность.

Чтобы вы больше не путались в понятиях, разберемся раз и навсегда:

  • Многоядерность – чип оснащен несколькими физическими архитектурными ядрами. Их можно увидеть, потрогать руками.
  • Многопоточность – несколько одновременно обрабатываемых потоков информации.
    Ядро может быть физически одно, но программные технологии на его основе создают два потока выполнения задач; два ядра – четыре потока и т.д.

Влияние количества ядер на производительность

Увеличение производительности на многоядерном процессоре достигается за счет разбиения выполнения задач. Любая современная система делит процесс на несколько потоков даже на одноядерном процессоре – так достигается та самая многозадачность, при которой вы можете, например, слушать музыку, набирать документ и работать с браузером. Очень любят и постоянно используют многопоточность следующие приложения:

  • архиваторы;
  • медиапроигрыватели;
  • кодировщики видео;
  • дефрагментаторы;
  • антивирусы;
  • графические редакторы.

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

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

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

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

Так сколько ядер выбирать?

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

  • Если компьютер приобретается для работы с документами, серфинга в интернете, прослушивания музыки, просмотра фильмов, то хватит двух ядер. Если взять процессор с двумя ядрами из верхнего ценового сегмента с хорошей частотой и поддержкой многопоточности, то не будет проблем при работе с графическими редакторами.
  • Если вы покупаете машину с расчетом на мощную игровую производительность, то сразу ставьте фильтр на 4 ядра минимум. 8 ядер с поддержкой многопоточности – самый топ с запасом на несколько лет. 16 ядер – перспективно, но велика вероятность, что пока вы раскроете потенциал такого чипа, он устареет.

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

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

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

Ещё на сайте:

На что влияет количество ядер процессора обновлено: Январь 31, 2018 автором: admin

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

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

Таким образом, производственные способности просто нивелируются. Это явление получило название bottleneck, что в переводе значит «узкое место» или «узкая шея».

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

Сразу стоит оговориться, что количество потоков процессора всегда остается неизменным и увеличить его никак нельзя. Потоки условно принято считать теми же ядрами, только не физическими, а виртуальными. Почему так, а не иначе, подробно описано ниже.

Как узнать сколько потоков у процессора

Само ядро – это непосредственно тот элемент, который отвечает за математические вычисления, согласно принятому в нем алгоритму. Процессор можно назвать своего рода «коробкой» для ядер, он объединяет их и обеспечивает взаимодействие с остальными компонентами системы.

Коротко по сути и маленькая предыстория

Технология Hyper-threading дает возможность хранения двух потоков одновременно. Поэтому при использовании операционной системы Windows, процессор на 2 ядра имеет в своем активе 4 потока. Такие вычислители еще часто называют процессорами, поддерживающими Hyper-treading (гипертрейдинг).

Дорогие и высокопроизводительные процессоры содержат ядра и потоки. Многие считают, что это смежные понятия, однако это не до конца верно. Впервые потоки появились еще в те времена, когда на рынке технологий царствовал Pentium 4.

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

Программ, которые могли корректно использовать данное преимущество было не много, если вообще были. Эта разработка находилась на стадии, своего рода, полевых исследований.

Система сама все о себе знает

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

Чтобы узнать подробную информацию в операционной системе Windows существует «Диспетчер задач», который в том числе покажет, сколько ресурсов компьютера используется в данное время.

Этот инструмент удобен, часто бывает полезен и обладает интуитивно понятным интерфейсом. Для того, чтобы открыть это приложение, нужно одновременно зажать клавиши Ctrl+Alt+Delete .

Так это выглядит на Windows 10 . Пользователи Mac OS найдут на своем компьютере утилиту «Принудительное завершение программ», которое легко вызвать при помощи клавиш cmd alt Esc . Она также дает возможность закрыть программу, которая перестала отвечать.
Еще одна популярная операционная система с открытым исходным кодом, Linux, тоже содержит диспетчер задач, только называется он по-другому – «Системный монитор».

Добраться до него помогут 3 простых шага:

  1. Системные утилиты
  2. Системный монитор

или можно воспользоваться командой

gnome-system-monitor .

Функционал «Системного монитора» полностью соответствуют таковым в «Диспетчере задач» Windows и «Принудительному завершению программ» в операционной системе от компании Apple.

Почему так быстрее

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

Количество потоков всегда вдвое больше, нежели количество ядер (при наличии «на борту» технологии HT). 2 ядра равнозначно 4-ем потокам, 4 ядра равнозначно 8-и потокам. Алгоритм просчета не может бить иным. Авторство разработки принадлежит компании Intel, являющейся лидером в производстве процессоров на массовом потребительском рынке.

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

Пошаговое руководство для новичков

Соответственно, чтобы узнать количество потоков, необходимо выяснить количество ядер, содержащихся в процессоре. Для это есть 3 (как минимум) способа:

1. Документация устройства, в которой подробно указаны характеристики.
2. Интернет, где можно ввести модель ноутбука и посмотреть, что находится у него «под капотом».
3. Или же в этом может помочь уже упомянутый ранее «Диспетчер задач», в котором нужно выбрать пункт меню «Производительность».

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

Проанализировав скриншот выше, становится очевидно, что данная электронно-вычислительная машина, то бишь компьютер, содержит 4 ядра и 8 логических процессов (считай – потоков). Когда значения двух параметров одинаковы, это означает, что данный компьютер не поддерживает технологию HT (Hyper-threading).

Вопрос #1 - “Назначение, состав, основные характеристики микроконтроллеров”

См. вопрос #6

Вопрос #2 - “Классификация микроконтроллеров”

Все МК можно условно разделить на три основных класса:

    8-разрядные МК для встраиваемых приложений;

    16- и 32-разрядные МК;

    цифровые сигнальные процессоры (DSP).

8-разрядные МК обеспечивают реализацию алгоритмов управления в реальном масштабе времени, отличительные признаки: модульная организация (на базе одного процессорного ядра, различающийся объем и тип памяти программ, объем памяти данных, набор периферийных модулей, частота синхронизации); закрытая архитектура (отсутствие выводов шин адреса и данных на корпусе).

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

По архитектурам:

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

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

Вопрос #3 - “ Тенденции развития архитектуры

См. вопрос #24

Вопрос #5 - Обзор микропроцессоров управления потоками событий”

С точки зрения организации обмена командами между процессором и памятью все компьютеры можно разделить на четыре класса:

SISD (Single Instruction Single Data) - «один поток команд, один поток данных»»;

SIMD (Single Instruction Multiply Data) - один поток команд, много потоков данных;

MISD (Multiple Instruction Single Data) - много потоков команд, один поток данных;

MIMD (Multiple Instruction Multiple Data) - много потоков команд, много потоков данных.

Из этой классификации видно, что фон-неймановская машина является частным случаем, попадающим в категорию SISD. Возможные усовершенствования в рамках архитектуры SISD ограничиваются включением в нее конвейеров и других дополнительных функциональных узлов, а также использованием разных методов кэширования. Две другие категории архитектур (SIMD, в которую входят векторные процессоры, и конвейерные архитектуры MISD) были реализованы в нескольких проектах, но не стали массовыми. Если оставаться в рамках этой классификации, то единственной возможностью преодоления ограничений «бутылочного горла» остается развитие архитектур класса MIMD. В их рамках обнаруживается множество подходов: это могут быть и различные параллельные и кластерные архитектуры, и многопотоковые процессоры.

В самом общем виде многопотоковый процессор состоит из двух типов примитивов. Первый тип - это ресурс, поддерживающий исполнение потока, который называют mutex (от Mutual Exclusion - «взаимное исключение»), а второй - события. То, как физически реализован тот или иной mutex, зависит от выбранной схемы - SMT или CMP. В любом случае выполнение процесса сводится к тому, что очередной поток захватываает mutex на время своего исполнения, а затем освобождает его. Если mutex занят одним потоком, то второй поток не может его заполучить. Конкретная процедура передачи полномочий на обладание mutex от одного потока другому может иметь случайный характер; она зависит от реализации управления, например, в определенной операционной системе. В любом случае управление должно быть построено так, чтобы ресурсы, состоящие из mutex, распределялись корректно и подавлялся эффект неопределенности.

События - это объекты (event), сигнализирующие о об изменении во внешней среде. Они могут переводить себя в режим ожидания до наступления иного события или сообщать о своем состоянии другому событию. Таким способом события могут взаимодействовать между собой, и при этом должна обеспечиваться преемственность данных между событиями. Ожидающий исполнения агент необходимо информировать о готовности данных для него. И как в распределении mutex должен подавляться эффект неопределенности, так при работе с событиями должен подавляться эффект неизвестности. Впервые схема SMT была реализована в процессорах Compaq Alpha 21464, а также в Intel Xeon MP и Itanium

Нет достаточных оснований для однозначного утверждения о преимуществах CMP по сравнению с SMT. Опыт создания процессоров, реализующих SMT, является гораздо большим: начиная с середины 80-х годов созданы несколько десятков экспериментальных изделий и несколько серийных процессоров. История развития CPM пока короткая: если не учитывать семейство специализированных сигнальных процессоров Texas Instruments TMS 320C8x, то первым успешным проектом стал Hydra, выполненный в Стэндфордском университете. Среди университетских исследовательских проектов, нацеленных на построение CMP-процессоров, известны еще три - Wisconsin Multiscalar, Carnegie-Mellon Stampede и MIT M-machine.

Кристалл Hydra состоит из четырех процессорных ядер на основе известной RISC-архитектуры MIPS . Каждое ядро имеет кэш-память команд и кэш-память данных, а все ядра объединены в общую кэш-память второго уровня. Процессоры выполняют обычный набор команд MIPS плюс команды условного хранения (Store Conditional или SC), предназначенные для реализации синхронизационных примитивов. Процессоры и кэш-память второго уровня объединяются шинами чтения/записи, а кроме того, есть вспомогательные адресные и управляющие шины. Все эти шины являются виртуальными, то есть логически представляются проводными шинами, а физически разделены на множество сегментов, использующих повторители, и буферов, что позволяет повысить скорость работы ядер.

Niagara - «сплав» MAJC и Hydra

У процессора UltraSPARC T1, более известного как Niagara, два основных предшественника - Hydra и MAJC.

В середине 90-х годов, на волне увлечения специализированными Java-процессорами, в Sun Microsystems была предпринята попытка создания процессора «с очень длинным словом» - Very Long Instruction Word (VLIW). Эта инициатива получила название MAJC (Microprocessor Architecture for Java Computing). Как и в других проектах, стартовавших в то время (Intel IA-64 Itanium), в данном случае ставилась задача переноса некоторых из самых сложных операций в ведение компилятора. Освободившуюся транзисторную логику можно использовать для создания более производительных функциональных узлов (functional units), с тем чтобы обеспечить продуктивный обмен командами и данными между CPU, кэш-памятью и основной памятью. Таким образом, преодолевалось фон-неймановское «бутылочное горло».

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

Niagara воплощает в себе лучшее из двух альтернативных подходов к реализации многопотоковости - SMT и CMP. На первый взгляд, он очень похож на Hydra, но скорее Hydra можно назвать «макетом» Niagara. Помимо того что в последнем - вдвое больше ядер, каждое из них может обрабатывать четыре потока.

Собственный подход к созданию многоядерных процессоров предложила корпорация IBM, чей проект Cell назван «гетерогенным мультипроцессорным чипом» (heterogeneous chip multiprocessor). Архитектуру Cell именуют еще и Cell Broadband Engine Architecture (CBEA). Мультипроцессор Cell состоит из ядра IBM 64-bit Power Architecture и восьми специализированных сопроцессоров, реализующих схему «одна команда много данных». В компании IBM эту архитектуру называют Synergistic Processor Unit (SPU).

Потоковые процессоры

Потоковыми называют процессора, в основе работы кото-рых лежит принцип обработки многих данных с помощью одной команды. Согласно классификации Флинна они принадлежат к SIMD архитектуре. Технология SIMD позволяет выполнять одно и то же действие, например вычитание и сложение, над несколькими наборами чисел одновременно. SIMD-операции для чисел двойной точности с плавающей запятой ускоряют работу ресурсоемких приложений для создания контента, трехмерного рендеринга, фи-нансовых расчетов и научных задач. Кроме того, усовершенство-ваны возможности 64-разрядной технологии MMX (целочислен-ных SIMD-команд); эта технология распространена на 128-разрядные числа, что позволяет ускорить обработку видео, речи, шифрование, обработку изображений и фотографий. Потоковый процессор повышает общую производительность, что особенно важно при работе с 3D-графическими объектами.

Может быть отдельный потоковый процессор (Single-streaming processor - SSP) и многопотоковый процессор (Multi-Streaming Processor - MSP).

Ярким представителем потоковых процессоров является семейство процессоров Intel, начиная с Pentium III, в основе рабо-ты которых лежит технология Streaming SIMD Extensions (SSE, потоковая обработка по принципу "одна команда - много дан-ных"). Эта технология позволяет выполнять такие сложные и не-обходимые в век Internet задачи, как обработка речи, кодирование и декодирование видео- и аудиоданных, разработка трехмерной графики и обработка изображений.

Бесспорными представителями класса SIMD считаются матрицы процессоров: ILLIAC IV, ICL DAP, Goodyear Aerospace MPP, Connection Machine 1 и т.п. В таких системах единое управ-ляющее устройство контролирует множество процессорных эле-ментов. Каждый процессорный элемент получает от устройства управления в каждый фиксированный момент времени одинако-вую команду и выполняет ее над своими локальными данными.

Другими представителями SIMD-класса являются вектор-ные процессоры, в основе которых лежит векторная обработкаданных. Векторная обработка увеличивает производительность процессора за счет того, что обработка целого набора данных (век-тора) производится одной командой. Векторные компьютеры ма-нипулируют массивами сходных данных подобно тому, как ска-лярные машины обрабатывают отдельные элементы таких масси-вов. В этом случае каждый элемент вектора надо рассматривать как отдельный элемент потока данных. При работе в векторном режиме векторные процессоры обрабатывают данные практически параллельно, что делает их в несколько раз более быстрыми, чем при работе в скалярном режиме. Максимальная скорость передача данных в векторном формате может составлять 64 Гб/с, что на 2 порядка быстрее, чем в скалярных машинах. Примерами систем подобного типа является, например, процессоры фирм NEC и Hitachi

Вопрос #6 – “Архитектура однокристальных микро-ЭВМ семейства МС S -51”

МК i8051АН: CPU MCS-51, память программ 4096 байт, память данных 128 байт, 4 параллельных 8-x порта I/O, 2 16-x таймера, последовательный порт, внутренняя 8-x магистраль, гарвардская архитектура (см. вопрос 2), макс. размер адресного пространства каждого типа памяти – 64К, открытая архитектура.

Процессор.

Устройство управления (УУ) вырабатывает управляющие сигналы, поступающие по шинам инструкций во все блоки машины.

Арифметико-логическое устройство (АЛУ) предназначено для выполнения арифметических и логических операций преобразования информации.АЛУ обычно состоит из двух регистров, сумматора и схем управления. Сумматор - выполняет сложение поступающих на вход двоичных кодов. Регистры - быстродействующие ячейки памяти различной длины. Схемы управления принимают по шине инструкций управляющие сигналы от УУ и преобразуют их в сигналы для управления работой регистров и сумматора. АЛУ выполняет арифметические операции (+, -, *,:) только над целыми двоичными числами.

Интерфейсная часть микропроцессора.

Узел формирования адреса - устройство, вычисляющее полный адрес ячейки памяти.

Шины данных, адреса и инструкций . УУ формирует управляющие сигналы для:

    выбора из регистра-счетчика адреса команды ячейки ОЗУ очередной команды программы;

    выбора из ячеек ОЗУ очередной команды и приема в регистр команд;

    расшифровки кода операции;

    считывания из ячеек ПЗУ микропрограмм управляющих сигналов, определяющих процедуры выполнения заданной операции, и пересылки управляющих сигналов в эти блоки;

    считывания из регистров адресов операндов, выборки операндов и выполнения операции обработки;

    записи результатов в память.

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

Схема управления шиной и портами выполняет следующие функции:

    формирование адреса порта и управляющей информации;

    прием от порта информации: управляющей, о готовности порта, о состоянии;

    организацию канала для передачи данных между портом и МП.

Вопрос #7 – “ Организация внутренней и внешней памяти МС8-51”

В архитектуре семейства 8051 память программ и память данных разделены (гарвардская архитектура). Каждая из них имеет размер 64 Кбайта, вы* бор одной из двух матриц памяти осуществляется сигналами PSEN, RD#, WR#. Организация памяти в микроконтроллерах семейства 8051 иллюстрируется рис. 2.3. Память программ может быть целиком внешней (сигнал ЕА = 0), либо при обращении по младшим 4К адресов код извлекается из ячеек внутренней памяти микроконтроллера, а содержимое старших 60К берется из внешней памяти системы (сигнал ЕА =1). Микроконтроллеры 8751Ы имеют бит секретности, предназначенный для защиты внутренней памяти программ от доступа извне. Значение этого бита программируется один раз, очищен он может быть только при полном стирании всей внутренней памяти программ. При установленном бите секретности запрещается не только чтение внутренней памяти извне, но и ее допрограммирование, а также ступают на внешние адресные выводы. В режиме 64К содержимое (ЕРС) принимает фиксированное значение 0FFH, поэтому все команды выбираются со страницы 0FH. Внутреннее ПЗУ программ в модели 83C196NP, размещенное на странице 0FH (адреса 0F2080H..0F2FFFH), выбирается при значении внешнего сигнала ЕА = 1. Это же ПЗУ может выбираться со страницы ООН (адреса 2080H..2FFFH), если в регистре реконфигурации CCR1 установлено значение бита REMAP = 1.

О
бращение к внешней памяти программ. Механизм программирования и верификации внутренней памяти программ здесь рассматриваться не будет, поскольку в продаже имеются программаторы различных типов и стоимости. Это позволяет разработчику сосредоточиться на решении основной задачи. Универсальный профессиональный программатор KROM описан в гл. 4.

Память данных делится на внешнюю и внутреннюю, каждая из них имеет свое пространство адресов. В архитектуре MCS-51 пространство адресов внутренней -памяти данных объединяет все внутренние программно доступные i ресурсы. Это пространство размером 256 байт в свою очередь делится на пространство адресов внутреннего ОЗУ (размером 128 байт) и пространство адресов регистров специальных функций. Область внутреннего ОЗУ изображена на рис. 2.4, ячейки области занимают младшие адреса внутренней памяти данных с ООН по 7FH. В этой области памяти выделяются два фрагмента:

♦ младшие 32 адреса занимают четыре регистровых банка, каждый из кото-рых содержит по восемь регистров общего назначения R0..R7. Текущий банк определяется значением битов RSO, RS1 регистра PSW. Таким образом, младшие 32 ячейки ОЗУ, кроме адресов, имеют имена;

♦ ячейки с адресами в диапазоне 32..48 имеют прямо адресуемые биты, адреса битов этой части ОЗУ находятся в диапазоне 00H..7FH.

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

Эта область формально занимает старшие 128 байт внутренней памяти данных, но обращение должно осуществляться по определенным адресам ячеек или отдельных битов. Обращение по промежуточным адресам приведет к ошибочному результату. Все регистры имеют как символические имена, так и адреса в качестве ячеек внутренней памяти. Часть регистров содержит прямо адресуемые биты. Адреса битов находятся в диапазоне 80H..F7H. Назначение регистров специальных функций следующее:

Формат всех регистров специальных функций будет рассмотрен в разделах, посвященных описанию системы прерываний и функций отдельных блоков ввода-вывода. Здесь приведен формат регистра PSW, хранящего слово состояния процессора. Этот регистр вместе с аккумулятором содержит результат выполнения команд.


Вопрос #8 Порты ввода-вывода МС8-51. Особенности работы, программирование .