Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2012.01.22;
Скачать: CL | DM;

Вниз

Delphi - Параллельные вычисления в многоядерных машинах   Найти похожие ветки 

 
Alik   (2011-09-28 20:32) [0]

Добрый день,

Меня интересует программирование в Дельфи для многоядерных процессоров с целью ускорения вычиления задач математической физики (теплофизика, диффузия).

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


 
Rouse_ ©   (2011-09-28 20:37) [1]

Распараллеливаешь и вешаешь каждый из потоков на ядро через это: http://msdn.microsoft.com/en-us/library/ms686247%28VS.85%29.aspx
Но более эффективной будет вот эта технология: NVIDIA CUDA: http://www.nvidia.com/object/cuda_home_new.html


 
картман ©   (2011-09-28 20:37) [2]

http://www.intuit.ru/video/59/


 
Dennis I. Komarov ©   (2011-09-28 20:55) [3]


>  ускорения вычиления задач математической физики

Уверен, что надо принудительно раскидывать потоки? Может пусть ось занимается своим делом?
З.Ы. Хотя на сколько спецефичная задача...


 
Pavia ©   (2011-09-28 21:01) [4]


> Dennis I. Komarov ©   (28.09.11 20:55) [3]
> >  ускорения вычиления задач математической физики Уверен,
>  что надо принудительно раскидывать потоки? Может пусть
> ось занимается своим делом?З.Ы. Хотя на сколько спецефичная
> задача...

Если у тебя один поток то что будет ОС раскидывать?
А вот если у тебя несколько потоков. То с целью предотвращения кочевания кода с ядра на ядро надо привязывать к ядрам, так как виндоус это делает плохо.
Кочевания кода с одного ядра на другое грозит тем, что кэш перестанет работать должным образом.


 
Pavia ©   (2011-09-28 21:14) [5]

По поводу распараллеливания. Выделяют 3 стадии.
1. Распараллеливания по ячейкам кластера.
2. Распараллеливание между ядрами и процессорами (CPU GPU).
3. Векторизация данных и команд (SIMD).

Для каждой стадии существуют свои средства и свои методы.
Правда на дельфи я бы не останавливался. OpenMP для дельфи не существует. Придётся всё делать ручками.

Векторизацию по любому ручками делать так как компиляторы толком её не делают. Если говорить о дельфи, то он совсем не делает. То intel в своем компиляторе C++ пытается  что-то сделать, но в основном тоже ручками надо было.
CUDA пожалуй хороша в том плане тем, что есть много готовых алгоритмов.

А да CUDA на определённых задачах может давать очень большой прирост. И думаю что это именно ваш случай.


 
Игорь Шевченко ©   (2011-09-28 21:18) [6]


> так как виндоус это делает плохо


prove it!


 
Dennis I. Komarov ©   (2011-09-28 21:20) [7]


> Если у тебя один поток то что будет ОС раскидывать?

Дык, при [0] какой смысл в одном потоке? Сие сразу было откинуто...


 
oxffff ©   (2011-09-28 21:33) [8]

Open CL.

http://habrahabr.ru/tag/OpenCL/


 
Rouse_ ©   (2011-09-28 21:38) [9]


> Pavia ©   (28.09.11 21:01) [4]
> так как виндоус это делает плохо.

По всей видимости говориться о том, что после привязки не факт что нить будет выполняться на привязанном ядре (проверить можно через cpuid)


 
Pavia ©   (2011-09-28 21:39) [10]

Розыч. Я имел ввиду что если не делать привязку, то код будет скокать.


 
oxffff ©   (2011-09-28 21:41) [11]

Уже были предположения
http://www.amdzone.com/phpbb3/viewtopic.php?f=532&t=138771


 
Rouse_ ©   (2011-09-28 21:42) [12]


> Pavia ©   (28.09.11 21:39) [10]
>
> Розыч. Я имел ввиду что если не делать привязку, то код
> будет скокать.

Он будет скакать в любом случае, с привязкой и без оной по ядрам, пруф на скорую руку не найду, но в районе интеловкосго мануала было :)


 
Pavia ©   (2011-09-28 21:44) [13]


> Open CL.

Лет через 5 да будет актуально, сейчас ещё мало железо которые его поддерживают. Отстаёт от CUDA. А во вторых AMD уже сейчас пишет что собирается отказываться от OpenCL в пользу ANSI C++ для GPU.


 
oxffff ©   (2011-09-28 21:44) [14]


> Rouse_ ©   (28.09.11 21:42) [12]


Это видимо связано с Intel HT.
Действительно предпочтительнее грузить свободное физическое ядро.


 
Rouse_ ©   (2011-09-28 21:54) [15]


> oxffff ©   (28.09.11 21:44) [14]

А шут ее знает, но тестилку очень просто написать, выводящую на каком ядре работает нить с привязкой и нет... Сам в свое время очень сильно обнадежился что нить можно вывести на параллельное ядро полностью, но не получилось... Собственно на MSDN-овском форуме можно поискать, там кто-то из MVP почти диссертацию о многоядерном режиме написал отвечая на вопрос, что за?...


 
SegeyIT   (2011-09-28 22:46) [16]

А каким боком дельфи относится к цифромолотильным продуктам?


 
картман ©   (2011-09-28 22:49) [17]


> А каким боком дельфи относится к цифромолотильным продуктам?

действительно, здесь принято обсуждать исключительно профильные вопросы:
http://delphimaster.net/view/15-1316779880/
http://delphimaster.net/view/15-1316779880/
http://delphimaster.net/view/15-1316779880/
и прочие 95%

ЗЫ. а почему бы и не дельфи?


 
SegeyIT   (2011-09-28 22:55) [18]

Неразумно - много наработок есть на других языках...


 
картман ©   (2011-09-29 00:06) [19]

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


 
SegeyIT   (2011-09-29 00:11) [20]

И какое отношение, к примеру,  GSL имеет к батонокидательству?


 
картман ©   (2011-09-29 00:17) [21]

не знаю. Но "что внутри", пользуясь уже готовым, узнаёшь, в общем случае, не ахти.


 
Inovet ©   (2011-09-29 00:42) [22]

> [7] Dennis I. Komarov ©   (28.09.11 21:20)
> > Если у тебя один поток то что будет ОС раскидывать?
>
> Дык, при [0] какой смысл в одном потоке? Сие сразу было откинуто...

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


 
Alik   (2011-09-29 09:16) [23]


> Inovet ©   (29.09.11 00:42) [22]
> > [7] Dennis I. Komarov ©   (28.09.11 21:20)
> > > Если у тебя один поток то что будет ОС раскидывать?
> >
> > Дык, при [0] какой смысл в одном потоке? Сие сразу было
> откинуто...
>
> У меня не сложилось уверенности о знании автором о существования
> потоков, хотя вопрос подразумевает.


С потоками в смысле TThreads я постоянно имею дело, если вы это имеете ввиду!?


 
QAZ   (2011-09-29 10:32) [24]

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


 
oxffff ©   (2011-09-29 10:40) [25]


> ибо интеллект инженеров выше програмистского
>
>


Насколько?


 
QAZ   (2011-09-29 10:44) [26]


> Насколько?

катастрафически


 
Inovet ©   (2011-09-29 11:00) [27]

> [23] Alik   (29.09.11 09:16)
> С потоками в смысле TThreads я постоянно имею дело, если
> вы это имеете ввиду!?

Значит просто показалось.


 
Inovet ©   (2011-09-29 11:03) [28]

> [24] QAZ   (29.09.11 10:32)
> интеллект инженеров выше програмистского

Программист не инженер, не математик, следовательно программиста не существует.


 
Омлет ©   (2011-09-29 11:12) [29]

> QAZ   (29.09.11 10:32) [24]
> ибо интеллект инженеров выше програмистского


У меня в трудовой написано "инженер-программист".
Теперь не знаю, что делать )


 
_oxffff   (2011-09-29 11:14) [30]


> Теперь не знаю, что делать )


Главное не употребляй

(2S)-N-метил-1-фенилпропан-2-амин


 
Омлет ©   (2011-09-29 11:19) [31]

> _oxffff   (29.09.11 11:14) [30]

Ага. Тут недавно в Ижевске кондуктора автобуса повязали, мет прямо на рабочем месте толкала. Во все тяжкие по-русски.


 
QAZ   (2011-09-29 12:06) [32]


> Омлет ©   (29.09.11 11:12) [29]

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


 
Омлет ©   (2011-09-29 12:19) [33]

> QAZ   (29.09.11 12:06) [32]
> итак понятно о чем реч


Понятно, что это бред.


 
oxffff ©   (2011-09-29 12:28) [34]

Кто как учился и что употреблял.


 
Alik   (2011-09-29 22:09) [35]


> QAZ   (29.09.11 10:32) [24]
> никуда, никакие потоки не надо привязывать ни к каким ядрам
> современные процессоры сами распределяют нагрузку туда где
> меньше нагрузка
> ибо интеллект инженеров выше програмистского


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


 
SegeyIT   (2011-09-29 23:37) [36]

http://www.google.ru/#sclient=psy-ab&hl=ru&newwindow=1&source=hp&q=%D0%BE%D0%BF%D1%82%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8+%D0%B2%D1%8B%D1%87%D0%B8%D1%81%D0%BB%D0%B5%D0%BD%D0%B8%D0%B9+yf+%D0%BC%D0%BD%D0%BE%D0%B3%D0%BE%D1%8F%D0%B4%D0%B5%D1%80%D0%BD%D1%8B%D1%85+%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D1%81%D1%81%D0%BE%D1%80%D0%B0%D1%85&pbx=1&oq=%D0%BE%D0%BF%D1%82%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8+%D0%B2%D1%8B%D1%87%D0%B8%D1%81%D0%BB%D0%B5%D0%BD%D0%B8%D0%B9+yf+%D0%BC%D0%BD%D0%BE%D0%B3%D0%BE%D1%8F%D0%B4%D0%B5%D1%80%D0%BD%D1%8B%D1%85+%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D1%81%D1%81%D0%BE%D1%80%D0%B0%D1%85&aq=f&aqi=&aql=&gs_sm=e&gs_upl=1509l5154l0l5660l4l4l0l0l0l1l260l803l0.2.2l4l0& bav=on.2,or.r_gc.r_pw.&fp=c8f110557a62714f&biw=1015&bih=442


 
Dennis I. Komarov ©   (2011-09-29 23:47) [37]


> Alik   (29.09.11 22:09) [35]

Разложи на потоки, потом собери результат с каждого...
Машина ничего распределять не будет, этим будет заведовать ось. На сколько ось будет это делать оптимально и какие подводные камни не знаю, но не думаю что самостоятельно распределяя потоки по ядрам получится лучше :) Да, если послушать гуру, там всеравно все "скачет"


 
картман ©   (2011-09-30 02:31) [38]


>  каждый процесс положить в свой поток

надо тока узнать, скока создавать/запускать потоков одновременно


 
Alik   (2011-10-01 13:09) [39]


> картман ©   (30.09.11 02:31) [38]
>
> >  каждый процесс положить в свой поток
>
> надо тока узнать, скока создавать/запускать потоков одновременно


Конкретно моя задача состоит из 6 процессов на каждом временном слое, следовательно можно создать 6 потоков, результат вычислений всех процессов сливается в одно в конце каждого временного слоя.

Вижу проблему еще и в том, что все 6 процессов имеют разное количество арифметических действий, примерно от 1 до 100 раз.

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

Может как то на более примитивном уровне разделять задачу !?!?


 
Pavia ©   (2011-10-01 13:20) [40]


> Может как то на более примитивном уровне разделять задачу
> !?!?

"Есть ли жизнь на Марсе, нет ли жизни на Марсе - науке неизвестно"
Описывай конкретно задачу тогда можно будет сказать.

А вообще на intuit есть лекции про параллельные вычисления.



Страницы: 1 2 вся ветка

Текущий архив: 2012.01.22;
Скачать: CL | DM;

Наверх




Память: 0.57 MB
Время: 0.011 c
15-1317747213
TComponent
2011-10-04 20:53
2012.01.22
Почему при запуске программа долго проверяется Каспером?


15-1317904579
handle
2011-10-06 16:36
2012.01.22
нужно корректно перевести на англ. фразу


15-1317710577
TUser
2011-10-04 10:42
2012.01.22
Фестиваль науки


2-1318309519
vivaldi
2011-10-11 09:05
2012.01.22
Преобразование цвета оттенки серого в черно-белый


15-1317760202
Юрий
2011-10-05 00:30
2012.01.22
С днем рождения ! 5 октября 2011 среда