Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2008.07.27;
Скачать: [xml.tar.bz2];

Вниз

Подскажите главу   Найти похожие ветки 

 
vrem   (2008-06-08 10:20) [0]

Задача решается в два этапа - на первом этапе получаются данные для работы второго этапа(По времени всё разное) Вопрос - как правильно распараллелить такую задачу на два процессорных ядра?
Что то вроде - первый этап создаёт данные, кладёт их в массив, второй этап если видит, что в массиве есть для него работа, и начинает работать.
Потоки и т.д. - всё очень объёмно читать, может есть глава как раз про вот такой случай?


 
TUser ©   (2008-06-08 10:32) [1]

Первый генерит нечто (например, освобождает мьютекс), если появились новые данные. Или просто сообщение шлет второму.


 
Zeqfreed ©   (2008-06-08 10:47) [2]

Все зависит исключительно от того, что второй этап делает с данными.


 
Юрий Зотов ©   (2008-06-09 09:03) [3]

Если два этапа должны выполняться строго последовательно, то зачем их вообще распараллеливать?


 
Mystic ©   (2008-06-09 11:37) [4]

Либо изучай потоки, либо пиши на всяких языках типа Haskell (медленно работает, зато не надо усилий для распараллеливания).


 
shlst   (2008-06-09 11:54) [5]

Юрий Зотов ©   (09.06.08 09:03) [3]
Что бы первый этап мог выполняться параллельно с работой второго
1)выкапывать картошку
2)складывать в ящики
пока новую картошку выкапывают уже выкопанную складывают в ящики(а не ждут, пока вся картошка будет выкопана что бы приступить к складыванию)


 
clickmaker ©   (2008-06-09 12:48) [6]

Поток для выкапывания:

while ...
Накопали
Event.Set;
end;

Поток для складывания:

while ...
 Event.Wait;
 Складываем
end;


 
KSergey ©   (2008-06-09 12:53) [7]

Ну откройте книжку и почитайте главу про потоки.
Или указать книжку и страницу?
Я не понимаю вопроса, если честно.

Боюсь только с таким подходом все будет идти в русле "о, сколько нам открытий чудных..."


 
Юрий Зотов ©   (2008-06-09 15:51) [8]

> shlst   (09.06.08 11:54) [5]

Выкапывание НОВОЙ картошки - это НОВЫЙ этап, а не продолжение старого.

1. Главный поток ждет.
2. Ему поступает запрос - "хочу порцию картошки".
3. Главный поток запускает рабочий поток и снова ждет.
4. Рабочий поток выкапывает порцию картошки, складывает ее в ящики и завершается. Все.

И поскольку складыванию ОБЯЗАТЕЛЬНО предшествует выкапывание (иначе и складывать нечего), то распараллеливание ЭТИХ операций не имеет никакого смысла.


 
Тын-Дын ©   (2008-06-09 15:56) [9]

Единственный смысл в распараллеливании может быть, если процессы выкапывания и складывания чередуются очень быстрою В этом случае имеет смысл 2 потока держать всегда наготове (в том случае, если один из потоков, кроме выкапывания или складывания ещё и другим делом занимается).


 
MBo ©   (2008-06-09 16:11) [10]

>1)выкапывать картошку
>2)складывать в ящики
>пока новую картошку выкапывают уже выкопанную складывают в ящики(а не ждут, пока вся картошка будет выкопана что бы приступить к складыванию)

В простейшем случае, например, при использовании массива с неизменной длиной,  достаточно сообщать (PostMessage, например) 2 потоку о том, какие ячейки можно использовать, и более синхронизации, связанной с данными, более не требуется.

Для некоторых более сложных задач подойдет TMultiReadExclisiveWriteSynchronizer из Дельфи, или, например, такая техника :
http://mbo88.narod.ru/ToC.html
10 глава



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

Форум: "Прочее";
Текущий архив: 2008.07.27;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.007 c
15-1213375788
-koha
2008-06-13 20:49
2008.07.27
Всем смотреть!


2-1213914116
dev
2008-06-20 02:21
2008.07.27
IdPOP3


2-1214300224
qwert
2008-06-24 13:37
2008.07.27
Запуск *,exe


2-1214562652
kazar
2008-06-27 14:30
2008.07.27
помогите алгоритмом


2-1214305065
Jimmy
2008-06-24 14:57
2008.07.27
Сочетания без повторений





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский