Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 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
15-1316410098
wl
2011-09-19 09:28
2012.01.22
HTC 7 Mozart


4-1253815783
uinor
2009-09-24 22:09
2012.01.22
GUI & Console


2-1318357787
Очень злой
2011-10-11 22:29
2012.01.22
Что такое object и как с ним работать?


2-1318323559
i2e
2011-10-11 12:59
2012.01.22
Как искать ошибки AccessViolation?


3-1270028409
ocean
2010-03-31 13:40
2012.01.22
Как затащить tab-delimited текстовый файл в БД?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский