2014-01-16 4 views
3

Я читал в последнее время около system architecture, а тема multi-threading не была подробно освещена с последними улучшениями в технологии. Я сделал свою часть поиска, но не смогли найти ответы на следующие:многопоточность зависит от архитектуры машины?

Вопросы есть являются

1) Является ли multi-threading зависит от system architecuture (CPU). все CPU (single core) поддержка multi-threading? Если это не то, что происходит с multi-threaded приложений при запуске на этих машинах

Он цитируемые here что

Intel CPUs support multithreading, but only two threads per CPU. 
AMD CPUs do not support multithreading and AMD often sites Microsoft's 
recommendations to turn off Hyperthreading on Intel CPUs when running applications 
like peoplesoft and Exchange. 

2), так что это означает, что говорит только two threads per CPU здесь. В любой момент времени CPU (single core) может обрабатывать только thread. а другой thread ожидает обработки корректно?

3) как он отличается от приложения, которое порождает, скажем, 10 threads и ждет их выполнения. Если процессор не может решить только two threads, не должен программировать этот факт при рассмотрении multi-threaded applications.

Даже с multi-core processors (say quad-core) максимум 8 threads can be queued, но только 4 threads может быть обработан в одно и то же время.

P.S: Я прочитанный немного о hyper-threading, но я не уверен, если это уместно здесь, и если все процессоры поддерживают hyper-threading

+0

Возможно, вы найдете мой ответ на аналогичный вопрос: http://stackoverflow.com/a/19518207/71074 –

ответ

2

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

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

3) См. 1. В основном операционная система будет выделять столько потоков, сколько может, на аппаратное обеспечение, прежде чем планирует переключение контекста между потоками, которые не удалось выделить. Этот процесс зависит от планировщика ОС, и вы можете прочитать о Linux, чтобы получить представление о том, что происходит.

Редактировать: Hypetreading - это, в основном, аппаратная функция многопоточности, о которой я упоминал.

+0

для пункта 2), на который вы ответили: процесс с двумя потоками может выполняться на одном ядре, но не в то же время правильно? – eagertoLearn

+0

Нет, они могут выполняться одновременно. Это похоже на то, как работают суперскалярные процессоры, но конвейер может быть выделен для потока. Поэтому для каждого цикла ЦП CPU может выдавать и удалять инструкции для двух разных потоков. –

+0

wow! Не знал, что одно ядро ​​может обрабатывать два потока одновременно. но это говорит, что это не так: http://stackoverflow.com/questions/10183675/can-2-threads-run-concurrently-or-just-1-given-the-possibility-of-hyperthread?rq=1 – eagertoLearn

1

В вашем вопросе ЦП означает ядро.

1) Он делает. Я считаю, что доступ к памяти на ARM - это слова, поэтому запись на char не является атомом Также memory ordering differs Современные ОС (ничего, кроме DOS) поддерживают переключение контекста: в то время как один поток выполняется, другие ждут. Общее количество потоков во всех процессах Windows составляет около 1000. Общий квант времени (время загрузки ЦП) составляет 1-10 мс. Одно ядро ​​многопоточности не улучшает вычислительную мощность, но позволяет асинхронные задачи. Например, GUI не замерзает во время сетевой активности. Один поток ждет сеть, другой отвечает на активность пользователя.

2) Да

3) Это обычная практика, чтобы породить количество потоков, равное числу (виртуальных) ядер, т.е. число ядер в системе для AMD и два раза для Intel. Это верно только для вычислительных потоков. Потоки веб-сервера обычно ждут сети и не загружают CPU много, поэтому лучше создавать тысячи потоков.

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

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