Модераторы: feodorv, GremlinProg, xvr, Fixin

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Выполнение многопоточного приложения, Количество ипользуемых ядер 
:(
    Опции темы
Owen
Дата 23.12.2008, 16:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 5.7.2006
Где: Русь

Репутация: нет
Всего: нет



Вопрос простой: потоки многопотокового приложения выполняются параллельно на нескольких ядрах процессора? или же этим свойством обладают только многопроцессовые приложения?
PM ICQ   Вверх
GremlinProg
Дата 23.12.2008, 17:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 99
Всего: 106



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


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
GremlinProg
Дата 23.12.2008, 18:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 99
Всего: 106



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

Это сообщение отредактировал(а) GremlinProg - 23.12.2008, 18:13


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
Lazin
Дата 23.12.2008, 21:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 8
Всего: 154



Цитата(Owen @  23.12.2008,  16:47 Найти цитируемый пост)
Вопрос простой: потоки многопотокового приложения выполняются параллельно на нескольких ядрах процессора? или же этим свойством обладают только многопроцессовые приложения? 

На N ядерном процессоре могут выполняться в любой момент времени N потоков, одновременно, на каждом из ядер выполняется один из потоков, в следующий момент времени этот-же поток может продолжить выполнение на другом ядре. Как уже написал GremlinProg для потока(или для всех потоков процесса) можно запретить использование части ядер.
В принципе, если у нас есть N ядер, то мы можем выполнить в N раз больше вычислений. Но, не всегда скорость выполнения кода зависит от процессора, например, если в один прекрасный момент программе потребуется записать файл с жесткого диска, скорость ее работы будет ограничена скоростью работы подсистемы ввода-вывода. Тоже самое касается любого синхронного ввода-вывода. Что-бы это обойти, используют асинхронный ввод-вывод. Так-же нескольким потокам может потребоваться синхронизировать доступ к общей памяти, в этом случае они не будут выполняться параллельно абсолютно всегда, но можно свести подобные простои к минимуму при правильном дизайне приложения. 
PM MAIL Skype GTalk   Вверх
Owen
Дата 24.12.2008, 14:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 5.7.2006
Где: Русь

Репутация: нет
Всего: нет



Всем спасибо за ответы
PM ICQ   Вверх
GremlinProg
Дата 24.12.2008, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 99
Всего: 106



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

тут вариантов-то всего 2:

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

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

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

вопрос еще далеко не решен, тут надо разбираться, желательно подтверждая утверждения ссылками в тематике устройства мультиядерных процессоров

Owen, не спеши с закрытием вопроса, здесь народ бывает довольно грамотный в этих вопросах, обязательно что-нибудь да найдется


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
Lazin
Дата 24.12.2008, 15:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 8
Всего: 154



Цитата(GremlinProg @  24.12.2008,  15:20 Найти цитируемый пост)
ты уверен, что ядра работают именно параллельно в аппаратном плане?

да, можно считать что это независимые процессоры, только размещенные на одном кристалле. У них разные конвейеры, так-же можно считать что кэши второго уровня то-же независимы(у процессоров AMD это действительно так, у Intel  кэш делится динамически). Взаимодействуют они с помощью аппаратных прерываний, например когда вызывается ф-я InterlockedIncrement(&value) происходит прерывание, заставляющее другое ядро обновить значение переменной value размещенной в кэше(если конечно эту переменную используют оба ядра).
PM MAIL Skype GTalk   Вверх
GremlinProg
Дата 24.12.2008, 16:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 99
Всего: 106



Lazin, а ссылки есть читабельные по теме?
Цитата(Lazin @  24.12.2008,  17:50 Найти цитируемый пост)
У них разные конвейеры

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

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

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


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
Earnest
Дата 24.12.2008, 17:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 33
Всего: 183



Цитата(GremlinProg @  24.12.2008,  16:20 Найти цитируемый пост)
что ядра работают именно параллельно в аппаратном плане? 

Мы  как-то проверяли: длительный процесс обсчета распараллеливался, если есть на что (2 процессора или 2 ядра).  Сокращение времени обсчета, конечно, не в два раза было, а поменьше (за счет затрат на разделение). Но оно было примерно одинаковое, что в случае 2 ядер, что в случае 2 процессоров (на разных машинах пускали).
В общем, с внешней точки зрения получается, что вполне параллельно.



--------------------
...
PM   Вверх
GremlinProg
Дата 24.12.2008, 17:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 99
Всего: 106



в подтверждение своих слов, я просто привожу первую попавшуюся статью, в которой речь идет именно о параллельности многоядерных процессоров: http://www.osp.ru/os/2007/04/4219910/
и чтобы особо не искать:
Цитата

Однако в последние годы ситуация меняется; пути развития массовых компьютеров и суперкомпьютеров снова сближаются. Причиной тому явление, получившее название Concurrency Revolution. Что можно перевести как «параллельная революция», хотя английское понятие concurrency сложнее, чем «параллельность», поскольку выражает не тривиальный «геометрический» параллелизм, а одновременное существование во времени и пространстве, взаимную совместимость.

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


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
GremlinProg
Дата 24.12.2008, 17:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 99
Всего: 106



Earnest, порвала мой монолог )

Цитата(Earnest @  24.12.2008,  19:18 Найти цитируемый пост)
Но оно было примерно одинаковое

в этом плане поправка Lazin'а, была очень кстати:
Цитата(Lazin @  23.12.2008,  23:28 Найти цитируемый пост)
...не всегда скорость выполнения кода зависит от процессора, например, если в один прекрасный момент программе потребуется записать файл с жесткого диска, скорость ее работы будет ограничена скоростью работы подсистемы ввода-вывода...

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

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


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
Earnest
Дата 24.12.2008, 19:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 33
Всего: 183



Цитата(GremlinProg @  24.12.2008,  18:48 Найти цитируемый пост)
Earnest, порвала мой монолог )

Неужели ты 30 минут это писал? smile  smile  smile 

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



--------------------
...
PM   Вверх
GremlinProg
Дата 24.12.2008, 19:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 99
Всего: 106



Цитата(Earnest @  24.12.2008,  21:11 Найти цитируемый пост)
Неужели ты 30 минут это писал?

я просто не обновлял топик с первого поста ), минут 10 прошло (AJAX'у на вас мало))

ну да, увлеклись малость, я просто сам хотел удостовериться, ну, и заодно развеяли миф параллельности,

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


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
Earnest
Дата 24.12.2008, 19:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 33
Всего: 183



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

Добавлено через 5 минут и 40 секунд
На наши результаты наверняка существенно влиял доступ к диску: данные большие (растры) и в память целиком не лезли, так что параллельность не очень чистая получилась, конечно. Но выигрыш был заметный. 


--------------------
...
PM   Вверх
xvr
Дата 24.12.2008, 20:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 40
Всего: 223



Цитата(GremlinProg @ 24.12.2008,  16:44)
Lazin, а ссылки есть читабельные по теме?
Цитата(Lazin @  24.12.2008,  17:50 Найти цитируемый пост)
У них разные конвейеры

распиновка-то процессора одна,

А что, каждый процессор должен отдельно выходить наружу?  smile 
Цитата

выходит, что на мульмиядерном процессоре каждое ядро должно либо делить время при передаче управляющих сигналов, либо запрашивать усовно-зависимую платформу(мать) под специализированную, "узкую" инфраструктуру
'Управляющие сигналы' - это что? Если доступ к внешней памяти и шине (например PCI), то они конечно разделяются, более того, они будут разделяться, даже если будет несколько ФИЗИЧЕСКИХ процессоров (в разных корпусах).
Если речь идет о внутренней машинерии коров, то они полностью раздельные. Разные коры работают на своих (раздельных) кэшах, так что тут полная паралельность. Тут надо правда различать коры и HT процессоры, последние хотя и выглядят как отдельные процессоры, таковыми не являются
Цитата

даже если у них конвейеры разные, исходящие сигналы от разных ядер все равно ходят по пересекающимся физическим узлам
Нет, пересекаются они уже почти на выходе из кристала (на кэшэ 1го уровня и мосте к PCI (или др) шине)
Цитата

меня, пока, все таки более устраивает термин "в реальном времени", а не "параллельно", 
Все таки именно 'паралельно'
Цитата

конечно, если инфраструктура, таки, не специализирована
Специализация начинается на комутации памяти между разными процессорами, и начинается это в кластерных системах
Цитата

лучшим доказательством параллельности ядер будет приведение четкой статьи, где определено решение этого вопроса, 
Вообще то таких статьей до фига и более
Цитата

потому что рассуждать-то мы можем, а конкретно утверждать могут только производители
Микроархитектуру вам конечно не раскажут, но по поводу 'паралельности/перпендикулярности' данные производителей вполне доступны (developer.intel.com) Вот например: Nehalem
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0649 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.