Форум: "Прочее";
Текущий архив: 2012.01.22;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.55 MB
Время: 0.004 c