многопроцессорность и многоядерность: что к чему

Тема в разделе "WASM.ZEN", создана пользователем varnie, 10 янв 2008.

  1. varnie

    varnie New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2005
    Сообщения:
    1.785
    hell-o!

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

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

    спасибо! :)
     
  2. Ultrin Faern

    Ultrin Faern New Member

    Публикаций:
    0
    Регистрация:
    25 июн 2006
    Сообщения:
    170
    Если у вас многоядерный процессор, то именно так и есть - ОДНОВРЕМЕННО (никаких микропереключений) выполняется столько приложений, сколько я дер у процессора.

    Может преподаватель имел ввиду что -либо другое, например, вроде запуск САМИХ ОС, каждая на своем ядре - тогда ответ нет - так аппаратное обеспечение одно, и им нужно делиться :)
     
  3. T800

    T800 Member

    Публикаций:
    0
    Регистрация:
    7 дек 2006
    Сообщения:
    293
    Адрес:
    Moscow
    varnie, было бы корректнее задать такой вопрос: а как влияют N-процессоров на реализацию/работу "многозадачности" в опер. системе (например в WinXP).
     
  4. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    varnie
    Пускай препод почитает Рихтера, уже Win2000 была сделана так, чтобы использовалась многопроцессорность. Она может каждой задаче выделять отдельный проц, а можно програмно привязать такой-то проц такой то задаче. Пускай ещё почитает про UMA например, которая используется в ядре линуха 2.6, которая поддерживает очень большое кол-во процов. Так что в осях это уже давно.
     
  5. varnie

    varnie New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2005
    Сообщения:
    1.785
    Ultrin Faern
    возьмем 1 проц с 2 ядрами - пусть в данный момент суммарно работает 40 программ. в этом случае можно сказать со 100% уверенностью, что 2 программы из этих 40 работают ОДНОВРЕМЕННО, будучи исполняемыми на разных ядрах? имеется ввиду, что мы работаем под мега-сувременной операционкой, поддерживающей все эти фичи, допустим на висте-дристе.

    теперь возьмем 2 проца на одном компутере, та же виста-дриста -- здесь в корне ситуация меняется, я правильно понял? как здесь будет обстоять дело тогда, поясните, плиз.

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

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

    Ultrin Faern
    хы, а если у нас 2 отдельных процессора на борту и компутер работает под сувременной операционкой. как здесь дело будет обстоять?

    благодарю за разъяснения, потихоньку пролевается свет:))
     
  6. flankerx

    flankerx New Member

    Публикаций:
    0
    Регистрация:
    2 июл 2004
    Сообщения:
    423
    Адрес:
    Moscow, Russia
    С точки зрения ОС нет разницы между одним двухъядерным ЦП и двумя одноядерными. И в том и в другом случае ОС "видит" два ЦП и раскидывает контексты между ними в соответствии с логикой шедуллера.

    При программировании под несколько ядер/ЦП (т.н. многопточные приложения) есть нюансы. Можно распараллеливать руками, Win32 API, и т.п., а можно взять что-нибудь типа Intel Threading Building Blocks и оно "почти само" распараллелится. Современные компиляторы также иногда умеют автоматом распаралелливать программу.
     
  7. varnie

    varnie New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2005
    Сообщения:
    1.785
    flankerx
    да, это именно то, что я и хотел узнать. теперь картина прояснилась.

    осталось выяснить, как с позиции пользователя увидеть, на каком проце программа работает, если это возможно увидеть, ессно. В венде Task Manager, в частности, не отображает этой инфы.
     
  8. nester7

    nester7 New Member

    Публикаций:
    0
    Регистрация:
    5 дек 2003
    Сообщения:
    720
    Адрес:
    Russia
    Запусти несколько виндраров на запаковку фильмов и посмотри как будет
    распределяться время разных цп, а потом аффинити-маску поменяй винрарам и сравни.
     
  9. SII

    SII Воин против дзена

    Публикаций:
    0
    Регистрация:
    31 окт 2007
    Сообщения:
    1.483
    Адрес:
    Подмосковье
    В истинном смысле параллельно может выполняться столько потоков, сколько логических процессоров имеется в системе. Например, мой основной рабочий компутер -- старый двухпроцессорный Xeon. Физически у меня есть два процессора (две отдельных микросхемы), у каждой по одному ядру, но каждое ядро поддерживает Hyper Threading. В результате с точки зрения ОС у меня четырёхпроцессорная машина, и параллельно поэтому может выполняться четыре потока. Если бы вместо моих древних Ксеонов стояли бы новейшие четырёхъядерные, у меня в результате было бы 16 логических процессоров (2 физических процессора * 4 ядра в каждом * 2 логических процессора в каждом ядре за счёт Hyper Threading).
     
  10. rei3er

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    ну не совсем параллельно ;)
    у HT ядра 2 состояния (каждое включает в себя уникальный набор регистров общего назначения, MSR регистров и т. д) но одно устройство выполнения (Execution Engine)
     
  11. asmlamo

    asmlamo Well-Known Member

    Публикаций:
    0
    Регистрация:
    18 май 2004
    Сообщения:
    1.734
    Да возможно.
    Есть даже такое понятие как аффинитет (сродство) процесса к какому либо ядру.

    В теории можно прописать для одной проги афинитет на 1 ядро а для другой на 2 ядро.
    И каждая из прог будет работать на своем ядре.
     
  12. asmlamo

    asmlamo Well-Known Member

    Публикаций:
    0
    Регистрация:
    18 май 2004
    Сообщения:
    1.734
    Если не указан аффинитет то ОС вольна в выборе ядра для любого из процессов.

    Более того она может "перебрасывать" работающий процесс с одного ядра на другой.
    Т.е. фактически ОС может балансировать загрузку ядер в зависимости от условий.
     
  13. SII

    SII Воин против дзена

    Публикаций:
    0
    Регистрация:
    31 окт 2007
    Сообщения:
    1.483
    Адрес:
    Подмосковье
    rei3er
    С точки зрения ОС -- полностью параллельно. Кроме того, у процессорного ядра не одно, а несколько исполнительных устройств, и сильно подозреваю, что оба потока, выполняемых за счёт HT, будут действительно работать параллельно, если им нужны разные исполнительные устройства. Вот если обоим потребуется обратиться к одному и тому же -- тогда один из потоков пропустит энное количество тактов. Хотя утверждать не буду: в интеловскую документацию по ентому поводу не вникал, тестировать не тестировал :)
     
  14. k3internal

    k3internal New Member

    Публикаций:
    0
    Регистрация:
    11 янв 2007
    Сообщения:
    607
    Нет, нельзя так сказать. ЧТо есть программа? Практически это процесс. Что такоепроцесс? прроцесс - это несколько потоков, которые уживаются в одном виртуальном адресном пространстве. Так вот, винда квантует потоки, но никак не процессы. Процесс это нечто полуабстрактное. Соответственно получается, что теоретически одновременно могут исполняться 2 потока на одном проце с двумя ядрами. Эти потоки могут принадлежать как одному процессу, так и 2м различным процесссам. Кроме того, Оба ядра проца используют одно физическое адресное пространство, в котором могут размещаться необходимые обеим потокам ресурсы. Но эти ресурсы могут быть закрыты для одновременного доступа. Естессно в работу включаются взаимные блокировки(префикс lock). Отседова вывод, что одновременное исполнение может быть только у хорошо подготовленных потоков.
     
  15. varnie

    varnie New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2005
    Сообщения:
    1.785
    угу, сейчас нашел статью Криса про все это дело. многое прояснилось.
     
  16. r90

    r90 New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2005
    Сообщения:
    898
    разве "* 2 логических процессора в каждом ядре за счёт Hyper Threading)."? В детали не вникал, но венда в соседней комнате на Core 2 Quad видит ровно четыре процессора. Я, конечно, попробую воткнуть линь и посмотреть что он скажет, но всё-таки не думаю, что "процессоров" в системе станет больше четырёх.
     
  17. rei3er

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    SII
    скажем так, в общем случае физически не параллельно
    под Execution Engine я подразумевал комплекс исполнительных устройств (компоненты АЛУ, MMU, ...)
    r90
    а что, ядра C2Q поддерживают HT?
     
  18. infern0

    infern0 New Member

    Публикаций:
    0
    Регистрация:
    7 окт 2003
    Сообщения:
    811
    Адрес:
    Russia
    нет, интел отказался от HT в новой архитектуре core2 ибо были серьезные проблемы с перезагрузкой конвеера. Проще сделать два полноценных ядра чем возится с псевдомногоядерностью.
     
  19. rei3er

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    ну вот
    значит r90 никак не получит > 4 ядер
     
  20. asmlamo

    asmlamo Well-Known Member

    Публикаций:
    0
    Регистрация:
    18 май 2004
    Сообщения:
    1.734
    ... тем более что толку от нее не много !