![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| and_master |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 30 Регистрация: 26.2.2007 Репутация: нет Всего: нет |
Всем привет! Ребят, к вам пара дурацких вопросов... Я пишу программу очень ресурсоемкую и решил распараллелить вычисления на двухядерном компе... Много чего почитал, но не совсем разобрался вот в чем. 1. Как лучше реализовывать многопоточность - через MPI, API-функции, либо еще какие-либо функции... Во многих примерах совершенно различный код. Как вообще ситуация разворачивается с этим? И что из всего этого барахлишка лучше использовать? И еще вопросик очень важный для меня... Всем откликнувшимся заранее огромнейшее спасибо...
У меня программа следующего вида... void main() { //// ... ... slau(....); } void slau(....) { /////// 1а -ый кусочек кода---------- /////// 2а -ый кусочек кода---------- /////// 3 -ый кусочек кода---------- /////// 1b -ый кусочек кода---------- /////// 2b -ый кусочек кода---------- } Мне необходимо сделать следующее.... Идея распараллелить функцию... 1а и 1b полностью независимы и должны запускаться одновременно... Далее, когда они оба закончат первую часть работы должен произойти обмен данными в кусочке 3. И только после того, как 1а и 1b дождались друг друга и обменялись информацией необходимо продолжить их работу, также независимыми кусочками 2а и 2b.... То есть.... 1-ый поток..... (1а+ 3 +2а) .....2-ой - (1b+ 3 +2b).......3 - результат совместной работы... И еще... если в функции создать два потока, то суммарно в программе будет 3 чтоли (+ поток основной программы) |
|||
|
||||
| chaos |
|
|||
![]() Серийный программист ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2979 Регистрация: 7.7.2004 Где: Екатеринбург Репутация: 6 Всего: 44 |
если очень кратко то читай про
|
|||
|
||||
| threef |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 375 Регистрация: 27.10.2005 Где: Запорожье Репутация: 9 Всего: 10 |
main :
Создаешь массив для хранения хендлов потоков 1. handle[A] = createthread(1a... 2. handle[B] = createthread(1b... 3.WaitForMultipleObject( массив хендлов, ждать все... 4.Обмен параметрами 5. handle[A] = createthread(2a... 6. handle[B] = createthread(2b... 7.WaitForMultipleObject( массив хендлов, ждать все... тут сколько угодно A,B,C... если же ты хочешь, чтобы "кусочки" A и B работали и обменивались в процессе работы, то лучше использовать критические секции: func: 1.выполняется часть 1. 2. EnterCriticalSection(... 3.Обмен 4. LeaveCriticalSection(... 5. Выполняется часть 2 В принципе, тоже сколько угодно кусочков... |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |