-
Кто-нибудь может поделиться простым примерчиком?
Допустим есть один большой массив. И хочется, чтобы его обрабатывали два потока каждый на своём ядре. Можно так сделать в Дельфи?
Желательно, чтобы была какая-нибудь система разделения между ядрами. То есть, если ядер, допустим, четыре, чтобы создавалось 4 потока, и каждый обрабатывал общий массив со своего места.
-
Делай разные потоки и оно само может получиться. А может и не получиться. Если хочешь жёстко привязать потоки к ядрам, читай про SetAffinityMask.
А уж как они будут обрабатывать массив и каким местом - сугубо вопрос твоей реализации.
-
> Skyle © (15.10.08 07:10) [1]
> читай про SetAffinityMask
Уточнение - SetProcessAffinityMask
-
> Skyle © (15.10.08 07:12) [2]
Хотя для задачи больше подходит SetThreadAffinityMask. :(
-
Кто-нибудь может поделиться примером работающей программы?
-
А в чём именно сложность-то?
-
Вставить куда есть, а вот скопировать неоткуда :) вот и просит...
-
> МемТест (15.10.08 07:05)
Понятие обрабатывались неопределено.
Является ли обработка каждого элемента зависимой от другого элемента?
-
> oxffff © (15.10.08 09:16) [7]
>
> > МемТест (15.10.08 07:05)
>
> Понятие обрабатывались неопределено.
> Является ли обработка каждого элемента зависимой от другого
> элемента?
Частично.
-
> Частично.
Тогда можно задействовать частично два потока каждый на своём ядре.
Пока ты полностью не сформулируешь условие тебе никто наталкивать на решение не будет, а уж тем более решать его за тебя.
-
> МемТест (15.10.08 09:40) [8]
Разбей массив на несколько независимых частей и обрабатывай их параллельно. Возможно параллельно обрабатывать зависимые друг от друга элементы внутри независимой от других групп группы.
Но тогда нужно разбивать группу на подгруппы независимых элементов с разделением по времени.
-
Сделайте потоки, и система сама распараллелит наилучшим образом по всем процессорам.
-
> система сама распараллелит наилучшим образом по всем процессорам.
Не уверен. Например как она будет данные по процессорам раскидывать ? А в случае "плохого" распределения локи будут на чтение/ запись.
-
Вы уверены, что знаете как работает планировщик WIN?
А если не уверен, то не обгоняй. Только мешать будете...
-
> Как использовать второе ядро двухъядерного процессора?
Как и первое - для вычислений :)
-
> БарЛог © (15.10.08 10:30) [14]
+18
-
-
МемТест (15.10.08 07:05)
Только раз уж решил делать многопоточное приложение, надо не второе ядро грузить, а все т.е. для начала определить количество ядер в системе и расчет разбить на столько же потоков.
-
Одно ядро для прикладной программы, другое для трояна, чтобы ничего не тормозило.
-
> А в случае "плохого" распределения локи будут на чтение/запись.
- есть еще нюансы:
"одновременный доступ двух процессоров к близким участкам памяти заставляет внутренний контроллер сбрасывать кэш памяти"(c)Роман Лут
http://www.dtf.ru/articles/print.php?id=39888