@undefined_title

Может ли одноядерный процессор выполнять несколько команд одновременно?

Может ли одноядерный процессор выполнять несколько команд одновременно, иметь нессколько потоков? если да, то каким образом может это происходить?
  • Вопрос задан
  • 4089 просмотров
Пригласить эксперта
Ответы на вопрос 2
saboteur_kiev
@saboteur_kiev
software engineer
1) Может ли одноядерный процессор выполнять несколько команд одновременно
Нет, одно ядро может выполнять только одну команту за такт.

2), иметь нессколько потоков? если да, то каким образом может это происходить?
Да, например в такой технологии как hyper-threading. Реализовано тем, что в процессоре есть два набора регистров для двух потоков, ОС видит процессор с двумя логическими ядрами.
Если один поток что-то ожидает, то процессор может переключиться и выполнить команду другого потока.
Понятно, что это не так быстро, как реальные два ядра - просто процессор просто не будет простаивать, если один поток чего-то ожидает, и не будет затрачивать время для переключения с одного потока на другой, так как необходимые для работы данные - во втором наборе регистров.
Ответ написан
15432
@15432
Системный программист ^_^
Современные x86 процессоры устроены очень сложно. Они имеют внутри себя микропрограмму для декомпозиции и преобразования поступающих машинных слов на ещё более низкоуровневые опкоды (микроопкоды). Они включают в себя конвейерную архитектуру, когда независимые друг от друга команды исполняются частично параллельно. Есть специализированные SSE, MMX, AVX команды (да и Floating-point тоже сюда), их исполнение производится на сопроцессорах и также может быть произведено одновременно с исполнением основных команд (а ещё могут одновременно исполняться на частях сопроцессора, так возможно одновременное исполнение сразу двух MMX команд). Медленная работа с памятью ускоряется кэшированием, но все равно может быть отложена "в фон" в угоду более быстрым командам. Предикция переходов "угадывает", куда пойдёт исполнение логического ветвления, процессор может вычислить часть команд ещё до того, как туда дойдёт исполнение... Всё ради того, чтобы вы посидели вконтактике без тормозов.

Сейчас сложно сказать, сколько команд выполняет процессор за такт. В зависимости от самой исполняемой программы, некоторые Intel или AMD x86 процесоры способны выполнять до 32 floating-point инструкций за один такт и до 6 "стандартных" микроопкодов за такт.

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

Войдите, чтобы написать ответ

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