Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.12.21;
Скачать: CL | DM;

Вниз

Как использовать второе ядро двухъядерного процессора?   Найти похожие ветки 

 
МемТест   (2008-10-15 07:05) [0]

Кто-нибудь может поделиться простым примерчиком?

Допустим есть один большой массив. И хочется, чтобы его обрабатывали два потока каждый на своём ядре. Можно так сделать в Дельфи?

Желательно, чтобы была какая-нибудь система разделения между ядрами. То есть, если ядер, допустим, четыре, чтобы создавалось 4 потока, и каждый обрабатывал общий массив со своего места.


 
Skyle ©   (2008-10-15 07:10) [1]

Делай разные потоки и оно само может получиться. А может и не получиться. Если хочешь жёстко привязать потоки к ядрам, читай про SetAffinityMask.

А уж как они будут обрабатывать массив и каким местом - сугубо вопрос твоей реализации.


 
Skyle ©   (2008-10-15 07:12) [2]


> Skyle ©   (15.10.08 07:10) [1]
> читай про SetAffinityMask

Уточнение - SetProcessAffinityMask


 
Skyle ©   (2008-10-15 07:14) [3]


> Skyle ©   (15.10.08 07:12) [2]

Хотя для задачи больше подходит SetThreadAffinityMask. :(


 
МемТест   (2008-10-15 07:45) [4]

Кто-нибудь может поделиться примером работающей программы?


 
Skyle ©   (2008-10-15 07:59) [5]

А в чём именно сложность-то?


 
Palladin ©   (2008-10-15 08:40) [6]

Вставить куда есть, а вот скопировать неоткуда :) вот и просит...


 
oxffff ©   (2008-10-15 09:16) [7]


> МемТест   (15.10.08 07:05)


Понятие обрабатывались неопределено.
Является ли обработка каждого элемента зависимой от другого элемента?


 
МемТест   (2008-10-15 09:40) [8]


> oxffff ©   (15.10.08 09:16) [7]
>
> > МемТест   (15.10.08 07:05)
>
> Понятие обрабатывались неопределено.
> Является ли обработка каждого элемента зависимой от другого
> элемента?


Частично.


 
oxffff ©   (2008-10-15 09:42) [9]


> Частично.


Тогда можно задействовать частично два потока каждый на своём ядре.
Пока ты полностью не сформулируешь условие тебе никто наталкивать на решение не будет, а уж тем более решать его за тебя.


 
oxffff ©   (2008-10-15 09:48) [10]


> МемТест   (15.10.08 09:40) [8]


Разбей массив на несколько независимых частей и обрабатывай их параллельно. Возможно параллельно обрабатывать зависимые друг от друга элементы внутри независимой от других групп группы.
Но тогда нужно разбивать группу на подгруппы независимых элементов с разделением по времени.


 
blackman ©   (2008-10-15 09:52) [11]

Сделайте потоки, и система сама распараллелит наилучшим образом по всем процессорам.


 
tesseract ©   (2008-10-15 10:05) [12]


> система сама распараллелит наилучшим образом по всем процессорам.


Не уверен. Например как она будет данные по процессорам раскидывать ? А в случае "плохого" распределения локи будут на чтение/ запись.


 
blackman ©   (2008-10-15 10:09) [13]

Вы уверены, что знаете как работает планировщик WIN?
А если не уверен, то не обгоняй. Только мешать будете...


 
БарЛог ©   (2008-10-15 10:30) [14]

> Как использовать второе ядро двухъядерного процессора?

Как и первое - для вычислений :)


 
oxffff ©   (2008-10-15 10:33) [15]


> БарЛог ©   (15.10.08 10:30) [14]


+18


 
tesseract ©   (2008-10-15 10:38) [16]


> что знаете как работает планировщик WIN?


Что-то читал у Руссиновича. Но про "наилучшим образом" не уверен, и кстати это не только Windows касаеться. intel вот свою библиотеку предлагает для многопоточности : http://www.intel.com/cd/software/products/asmo-na/eng/threading/294797.htm


 
stas ©   (2008-10-15 11:44) [17]

МемТест   (15.10.08 07:05)
Только раз уж решил делать многопоточное приложение, надо не второе ядро грузить, а все т.е. для начала определить количество ядер в системе и расчет разбить на столько же потоков.


 
guav ©   (2008-10-15 13:12) [18]

Одно ядро для прикладной программы, другое для трояна, чтобы ничего не тормозило.


 
han_malign ©   (2008-10-15 13:45) [19]


> А в случае "плохого" распределения локи будут на чтение/запись.

- есть еще нюансы:
"одновременный доступ двух процессоров к близким участкам памяти заставляет внутренний контроллер сбрасывать кэш памяти"(c)Роман Лут
http://www.dtf.ru/articles/print.php?id=39888


 
tesseract ©   (2008-10-15 15:24) [20]


> заставляет внутренний контроллер сбрасывать кэш памяти


Может всё-таки очищать кэш  2-го уровня ?


 
stas ©   (2008-10-15 15:28) [21]

han_malign ©   (15.10.08 13:45) [19]

Вообще я такое о Гипертрейдинге слышал.


 
Городской Шаман   (2008-10-15 16:42) [22]

А человеку нужны были только классы TThread и TCriticalSection


 
МемТест   (2008-10-16 05:43) [23]

Дайте кто-нибудь пример программы? Чтобы изучать работу на примерах.


 
Skyle ©   (2008-10-16 06:25) [24]

\Program Files\Borland\DelphiX\Demos\Threads?


 
stas ©   (2008-10-16 08:56) [25]

МемТест   (16.10.08 05:43) [23]
Куда тебе его давать? e-mail хоть напиши.
Ты вобще что считать собрался? мож тебе надо изучить команды SSE  и т.п. ?


 
МемТест   (2008-10-17 05:11) [26]


> Skyle ©   (16.10.08 06:25) [24]
>
> \Program Files\Borland\DelphiX\Demos\Threads?


Спасибо. :) Хоть что-то.

А какие функции используют, чтобы получить информацию о ядрах? Их число, загрузка, может ещё что-то полезное?


> Куда тебе его давать? e-mail хоть напиши.


Е-mail так давать нельзя сразу заспамят весь.
Можно же выложить на ifolder.ru, narod.ru, rapidshare и т. д. и т. .п.


> Ты вобще что считать собрался? мож тебе надо изучить команды
> SSE  и т.п. ?


Анализировать одну большую базу данных и кое-что в ней изменять.


 
stas ©   (2008-10-17 08:45) [27]

Неохота возиться с ifolder.ru, narod.ru, rapidshare и т. д. и т. .п.
Напиши почту вместо собаки поставь другой значек.
А что за база (СУБД) ? или заведи на mail.ru.


 
МемТест   (2008-10-20 09:05) [28]

Ну вот, переделал под потоки. То, что раньше выполнялось за 28 секунд, теперь в одном потоке выполняется за 1 м. 54 сек., и в двух потоках за 2 м. 1 сек.

Если сделать потоков 10 или 15, то результаты примерно такие же. Ощущение, что второе ядро просто не задействуется. И откуда такие тормоза вдруг - вообще не понятно.


> stas ©   (17.10.08 08:45) [27]
>
> Неохота возиться с ifolder.ru, narod.ru, rapidshare и т.
>  д. и т. .п.

А в чём заключается возжение? На главной странице http://ifolder.ru/ кнопка загрузить файл.


 
Сергей М. ©   (2008-10-20 09:48) [29]


> откуда такие тормоза вдруг - вообще не понятно


От synchronize, наверно)


 
МемТест   (2008-10-20 10:13) [30]


> Сергей М. ©   (20.10.08 09:48) [29]
>
> > откуда такие тормоза вдруг - вообще не понятно
>
> От synchronize, наверно)


А что с ним сделано не так и как надо исправить?


 
Сергей М. ©   (2008-10-20 10:16) [31]


> что с ним сделано не так


С ним-то как раз все так.
Это с твоей программой не так)


> как надо исправить?


Надо переписать программу с полным пониманием происходящего в ней.


 
Плохиш ©   (2008-10-20 10:53) [32]


> МемТест   (17.10.08 05:11) [26]

> Е-mail так давать нельзя сразу заспамят весь.
> Можно же выложить на ifolder.ru, narod.ru, rapidshare и
> т. д. и т. .п.

Я не ошибаюсь, это у нас проблема? Или, всё-таки, у нас?


 
shlst   (2008-10-20 11:47) [33]

Есть программа, которая может назначать другие программы на отдельные ядра. То есть блокнот на первое ядро, винамп на второе, а твою программу, автор, на третье ядро и второе тебе не достанется :)


 
stas ©   (2008-10-20 13:29) [34]


> Ощущение, что второе ядро просто не задействуется.

Это легко проверить диспетчером задач.
мы же незнаем что ты там делаешь как мы тебе поможем?


 
stas ©   (2008-10-20 15:44) [35]


> А в чём заключается возжение? На главной странице http://ifolder.
> ru/ кнопка загрузить файл.

Без анкеты, без е-майла, пишешь что-то похожее на брутфорс и хочешь чтобы тебе вот так все сделали.


 
МемТест   (2008-10-21 04:47) [36]


> Сергей М. ©   (20.10.08 10:16) [31]
>
> > что с ним сделано не так
>
> С ним-то как раз все так.
> Это с твоей программой не так)


Сделал, чтобы обращения к нему стали реже. Помогло.
Но скорость работы в один поток или в два или в пятнадцать - почти одинаковая. В пределах погрешности.

В чём тут причина?


 
МемТест   (2008-10-21 05:04) [37]


> stas ©   (20.10.08 13:29) [34]
>
> > Ощущение, что второе ядро просто не задействуется.
>
> Это легко проверить диспетчером задач.


Как именно? Он показывает загрузку процессора. 100 процентов. Про ядра там ничего нет.


 
МемТест   (2008-10-21 05:12) [38]


> 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/


 
Skyle ©   (2008-10-21 06:31) [39]


> МемТест   (21.10.08 05:12) [38]
> Как называется программа? Там можно установить, чтоб потоки
> моей программы разводились по двум ядрам?

Такая программа называется "Диспетчер задач". Правой кнопкой на процессе, "Задать соответствие".


 
KSergey ©   (2008-10-21 09:21) [40]

> МемТест   (21.10.08 05:04) [37]
> > Это легко проверить диспетчером задач.
> Как именно? Он показывает загрузку процессора. 100 процентов.
>  Про ядра там ничего нет.

На вкладку "Быстродействие" загляни.
Верхний ряд окошечек с графиками - это как раз загрузка ядер. Если такое окошко всего одно - значит и ядер одно :)



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

Текущий архив: 2008.12.21;
Скачать: CL | DM;

Наверх




Память: 0.57 MB
Время: 0.019 c
3-1211617055
Саша
2008-05-24 12:17
2008.12.21
Нужен пример запроса типа "рейтинг"...


15-1223578886
@!!ex
2008-10-09 23:01
2008.12.21
Подскажите карисвых научных вещей


1-1204908815
Воронтсов
2008-03-07 19:53
2008.12.21
работа с TOpenDialog


15-1224537298
Германн
2008-10-21 01:14
2008.12.21
Поддержим отечественных производителей - 3


3-1211885281
Vlad Oshin
2008-05-27 14:48
2008.12.21
Транзакции осуществляются в соединении или как? ADO