Несколько ядер...
От: maxcool  
Дата: 23.08.07 18:38
Оценка:
В последнее время развитие железа пошло в сторону многоядерности процессоров. Передо мной стала задача разработки приложения, которое могло бы использовать приемущества многоядености. Облазил много источников, где упонинаються различные среды разработки и библиотеки, но все они направлены на создание вычислительного кластера (сети), е. е. несколько ядер под управлением нескольких операционных систем. Мне же нужна среда или либа для создания приложения для многоядерной архитектуры под управлением одной ОС. Подозреваю что подобная задача не из легких, поскольку винда например сама менеджит несколько ядер, создавая для каждого по пулу потоков и разпределяя потоки между ядрами. Но возможно это можно как-то обойти...
Re: Несколько ядер...
От: adontz Грузия http://adontz.wordpress.com/
Дата: 23.08.07 19:15
Оценка:
Здравствуйте, maxcool, Вы писали:

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

А вообще где именно чешется?
A journey of a thousand miles must begin with a single step © Lau Tsu
Re: Несколько ядер...
От: ilnar Россия  
Дата: 23.08.07 19:35
Оценка:
Здравствуйте, maxcool, Вы писали:

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


во первых надо алгоритм распараллелить, логику. и кинуть задачи разным потокам, например, в пулы (QueueUserWorkItem в винде)
а если же у тебя в алгоритме много долгоиграющих циклов, можешь смело взяться за OpenMP, ищи у интела на сайте
Re[2]: Несколько ядер...
От: maxcool  
Дата: 25.08.07 14:39
Оценка:
Здравствуйте, ilnar, Вы писали:

I>во первых надо алгоритм распараллелить, логику. и кинуть задачи разным потокам, например, в пулы (QueueUserWorkItem в винде)

I>а если же у тебя в алгоритме много долгоиграющих циклов, можешь смело взяться за OpenMP, ищи у интела на сайте

А каким образом гарантировать, что потоки попадут в пулы к РАЗНЫМ ядрам, и будут выполняться буквально одновременно?
Re[2]: Несколько ядер...
От: maxcool  
Дата: 25.08.07 14:47
Оценка:
Здравствуйте, adontz, Вы писали:

A>Никакого принципиального различия между многоядерными процессорами и многопроцессорными системами на одноядерных процессорах нет.


Разница заключается в том, находятся ли эти ядра под управлением одной ОС или нескольких (по одной ОС на ядро). Если мы имеем вычислительную сеть (одно-два ядра на ОС) то для организации и распаралелливания вычислений в такой сети необходима специальная платформа (MPI или MC#).

A>Разница проявляется когда у вас несколько многоядерных процессоров (получается уже не SMP), но это вообще такие дебри, что до них ещё добраться надо...


A>А вообще где именно чешется?


Мне же чешется не вычислительная сеть, а обычный многоядерный компьютер с одной ОС. Меня интересует с использованием каких библиотек и сред разработки (желательно С/С++/С#) можно написать приложние, которое в полной мере использует для своих вычислений многоядерность архитектуры.
Re[3]: Несколько ядер...
От: adontz Грузия http://adontz.wordpress.com/
Дата: 25.08.07 15:01
Оценка:
Здравствуйте, maxcool, Вы писали:

M>Разница заключается в том, находятся ли эти ядра под управлением одной ОС или нескольких (по одной ОС на ядро). Если мы имеем вычислительную сеть (одно-два ядра на ОС) то для организации и распаралелливания вычислений в такой сети необходима специальная платформа (MPI или MC#).


Я так понял речь об одной машине, разве нет?

M>Мне же чешется не вычислительная сеть, а обычный многоядерный компьютер с одной ОС. Меня интересует с использованием каких библиотек и сред разработки (желательно С/С++/С#) можно написать приложние, которое в полной мере использует для своих вычислений многоядерность архитектуры.


Чтобы примерно равномерно загрузить все ядра ничего особенного кроме возможности разделить задачу на независимые подзадачи по количеству ядер не требуется. Обычной библиотеки по управлению потоками и объектами синхронизации хватит.
A journey of a thousand miles must begin with a single step © Lau Tsu
Re[3]: Несколько ядер...
От: ilnar Россия  
Дата: 25.08.07 15:43
Оценка:
Здравствуйте, maxcool, Вы писали:

M>Здравствуйте, ilnar, Вы писали:


I>>во первых надо алгоритм распараллелить, логику. и кинуть задачи разным потокам, например, в пулы (QueueUserWorkItem в винде)

I>>а если же у тебя в алгоритме много долгоиграющих циклов, можешь смело взяться за OpenMP, ищи у интела на сайте

M>А каким образом гарантировать, что потоки попадут в пулы к РАЗНЫМ ядрам, и будут выполняться буквально одновременно?


это винапи функция QueueUserWorkItem гарантирует. там реализован умный алгоритм, который создает по крайней мере по потоку на ядро, и это пул потоков обрабатывают пул твоих мелких задач. не знаю, если система загружена, уменьшает ли количество потоков. а вот если задачи простые и менеджер пула потоков видит что процы мало заняты, добавит еще потоков.
Re[3]: Несколько ядер...
От: George Saveliev Украина  
Дата: 25.08.07 19:22
Оценка:
Здравствуйте, maxcool, Вы писали:
M>...Меня интересует с использованием каких библиотек и сред разработки (желательно С/С++/С#) можно написать приложние, которое в полной мере использует для своих вычислений многоядерность архитектуры.
Для .Net от Microsoft: CCR — Concurrency and Coordination Runtime (является частью <b>Microsoft Robotics Studio</b>, для коммерческого использования надо платить )
<b>Статья от Jeffrey Richter</b>
<b>Channel9</b>
<b>video</b> (В главной роли Jeffrey Richter )
RSDN@Home 1.2.0 alpha rev. 725
Re[3]: Несколько ядер...
От: GarryIV  
Дата: 25.08.07 19:36
Оценка: +1
Здравствуйте, maxcool, Вы писали:

I>>во первых надо алгоритм распараллелить, логику. и кинуть задачи разным потокам, например, в пулы (QueueUserWorkItem в винде)

I>>а если же у тебя в алгоритме много долгоиграющих циклов, можешь смело взяться за OpenMP, ищи у интела на сайте

M>А каким образом гарантировать, что потоки попадут в пулы к РАЗНЫМ ядрам, и будут выполняться буквально одновременно?


Оставь это ОС. Она сама разберется какой поток на каком ядре выполнять. Планировщик потоков не дураки писали...
Но все же если СИЛЬНО хочется то читай про affinity mask.
WBR, Igor Evgrafov
Re[3]: Несколько ядер...
От: Стэн http://stanonwork.blogspot.com/
Дата: 08.09.07 14:17
Оценка: 15 (1)
Здравствуйте, maxcool, Вы писали:

M>Мне же чешется не вычислительная сеть, а обычный многоядерный компьютер с одной ОС. Меня интересует с использованием каких библиотек и сред разработки (желательно С/С++/С#) можно написать приложние, которое в полной мере использует для своих вычислений многоядерность архитектуры.


Посмотри на мой проект act-o. Еще есть блог, где я, в том числе, пишу о вопросах, связанных с параллельностью. Если будут вопросы, пиши. Мои контакты можно найти в профиле блога.
Re: Несколько ядер...
От: Аноним  
Дата: 10.09.07 11:43
Оценка:
Здравствуйте, maxcool, Вы писали:

Мне же нужна среда или либа для создания приложения для многоядерной архитектуры под управлением одной ОС.

Воспользуйся языком MC# (www.mcsharp.net).
В этой системе программирования имеется автоматический балансировщик
нагрузки (потоков) на процессоры/ядра системы.
При порождении нового потока он помещается на наименее загруженное ядро
в данный момент.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.