-
Кто-нибудь может поделиться простым примерчиком?
Допустим есть один большой массив. И хочется, чтобы его обрабатывали два потока каждый на своём ядре. Можно так сделать в Дельфи?
Желательно, чтобы была какая-нибудь система разделения между ядрами. То есть, если ядер, допустим, четыре, чтобы создавалось 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
-
> заставляет внутренний контроллер сбрасывать кэш памяти
Может всё-таки очищать кэш 2-го уровня ?
-
han_malign © (15.10.08 13:45) [19]
Вообще я такое о Гипертрейдинге слышал.
-
А человеку нужны были только классы TThread и TCriticalSection
-
Дайте кто-нибудь пример программы? Чтобы изучать работу на примерах.
-
\Program Files\Borland\DelphiX\Demos\Threads?
-
МемТест (16.10.08 05:43) [23]
Куда тебе его давать? e-mail хоть напиши.
Ты вобще что считать собрался? мож тебе надо изучить команды SSE и т.п. ?
-
> Skyle © (16.10.08 06:25) [24]
>
> \Program Files\Borland\DelphiX\Demos\Threads?
Спасибо. :) Хоть что-то.
А какие функции используют, чтобы получить информацию о ядрах? Их число, загрузка, может ещё что-то полезное?
> Куда тебе его давать? e-mail хоть напиши.
Е-mail так давать нельзя сразу заспамят весь.
Можно же выложить на ifolder.ru, narod.ru, rapidshare и т. д. и т. .п.
> Ты вобще что считать собрался? мож тебе надо изучить команды
> SSE и т.п. ?
Анализировать одну большую базу данных и кое-что в ней изменять.
-
Неохота возиться с ifolder.ru, narod.ru, rapidshare и т. д. и т. .п.
Напиши почту вместо собаки поставь другой значек.
А что за база (СУБД) ? или заведи на mail.ru.
-
Ну вот, переделал под потоки. То, что раньше выполнялось за 28 секунд, теперь в одном потоке выполняется за 1 м. 54 сек., и в двух потоках за 2 м. 1 сек.
Если сделать потоков 10 или 15, то результаты примерно такие же. Ощущение, что второе ядро просто не задействуется. И откуда такие тормоза вдруг - вообще не понятно.
> stas © (17.10.08 08:45) [27]
>
> Неохота возиться с ifolder.ru, narod.ru, rapidshare и т.
> д. и т. .п.
А в чём заключается возжение? На главной странице
http://ifolder.ru/ кнопка загрузить файл.
-
> откуда такие тормоза вдруг - вообще не понятно
От synchronize, наверно)
-
> Сергей М. © (20.10.08 09:48) [29]
>
> > откуда такие тормоза вдруг - вообще не понятно
>
> От synchronize, наверно)
А что с ним сделано не так и как надо исправить?
-
> что с ним сделано не так
С ним-то как раз все так.
Это с твоей программой не так)
> как надо исправить?
Надо переписать программу с полным пониманием происходящего в ней.
-
> МемТест (17.10.08 05:11) [26]
> Е-mail так давать нельзя сразу заспамят весь.
> Можно же выложить на ifolder.ru, narod.ru, rapidshare и
> т. д. и т. .п.
Я не ошибаюсь, это у нас проблема? Или, всё-таки, у нас?
-
Есть программа, которая может назначать другие программы на отдельные ядра. То есть блокнот на первое ядро, винамп на второе, а твою программу, автор, на третье ядро и второе тебе не достанется :)
-
> Ощущение, что второе ядро просто не задействуется.
Это легко проверить диспетчером задач.
мы же незнаем что ты там делаешь как мы тебе поможем?
-
> А в чём заключается возжение? На главной странице http://ifolder.
> ru/ кнопка загрузить файл.
Без анкеты, без е-майла, пишешь что-то похожее на брутфорс и хочешь чтобы тебе вот так все сделали.
-
> Сергей М. © (20.10.08 10:16) [31]
>
> > что с ним сделано не так
>
> С ним-то как раз все так.
> Это с твоей программой не так)
Сделал, чтобы обращения к нему стали реже. Помогло.
Но скорость работы в один поток или в два или в пятнадцать - почти одинаковая. В пределах погрешности.
В чём тут причина?
-
> stas © (20.10.08 13:29) [34]
>
> > Ощущение, что второе ядро просто не задействуется.
>
> Это легко проверить диспетчером задач.
Как именно? Он показывает загрузку процессора. 100 процентов. Про ядра там ничего нет.
-
> shlst (20.10.08 11:47) [33]
>
> Есть программа, которая может назначать другие программы
> на отдельные ядра. То есть блокнот на первое ядро, винамп
> на второе, а твою программу, автор, на третье ядро и второе
> тебе не достанется :)
Как называется программа? Там можно установить, чтоб потоки моей программы разводились по двум ядрам?
> stas © (20.10.08 15:44) [35]
>
> > А в чём заключается возжение? На главной странице http:
> //ifolder.
> > ru/ кнопка загрузить файл.
>
> Без анкеты, без е-майла, пишешь что-то похожее на брутфорс
> и хочешь чтобы тебе вот так все сделали.
- А чем вы докажете, что вы - кассир? Чем?
- Я - кассир! Вот деньги, билеты, окошко и надпись: "Сидоров - кассир".
- Вы не Сидоров - кассир!
- Нет, я кассир!
- Вы не кассир!
- Нет, я кассир!
- Вы пришли с улицы и сели, а кассира убили! Труп - в сейф!
- Что ты плетешь? Вот сейф пустой, ты что?
- Убрали, успели и сели вместо него. Вы не Сидоров - кассир!
- Да ты что? Вот паспорт на десять лет, дурака валяешь!
- А паспорт отняли!
- А карточка?
- Наклеили!
- А печать?
- Выкрали из милиции. Зарезали паспортистку, достали бланк, заполнили ее рукой, кровь смыли. Вы же смыли всю кровь! Зачем вы смыли кровь?
- Да ты что? Вот, все знают, все подтвердят. Ребята, кто я?
- Ничего не значит, вы сговорились!
- Да вот мой начальник!
- Это не он.
- Лаптев!
- Врет!
- Константин Петрович!
- Притворяется. Как ты сюда попал, убийца?
http://www.jvanetsky.ru/data/text/t7/u_kassy/
-
> МемТест (21.10.08 05:12) [38]
> Как называется программа? Там можно установить, чтоб потоки
> моей программы разводились по двум ядрам?
Такая программа называется "Диспетчер задач". Правой кнопкой на процессе, "Задать соответствие".
-
> МемТест (21.10.08 05:04) [37]
> > Это легко проверить диспетчером задач.
> Как именно? Он показывает загрузку процессора. 100 процентов.
> Про ядра там ничего нет.
На вкладку "Быстродействие" загляни.
Верхний ряд окошечек с графиками - это как раз загрузка ядер. Если такое окошко всего одно - значит и ядер одно :)
-
> МемТест (21.10.08 04:47) [36]
Ты код-то соизволишь показать ?)
-
> KSergey (21.10.2008 9:21:40) [40]
Не значит, данный диалог имеет возможность настраивать показ.
-
> Anatoly Podgoretsky © (21.10.08 09:43) [42]
> Не значит, данный диалог имеет возможность настраивать показ.
Блин, и правда. Вот бы не подумал. Спасибо.
Автору: Вид - Загрузка ЦП - По одному графику на каждый ЦП