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

Вниз

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

 
МемТест   (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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.55 MB
Время: 0.049 c
4-1202586871
AntiDot
2008-02-09 22:54
2008.12.21
контрол, для отображения карты диска


2-1226476773
leonidus
2008-11-12 10:59
2008.12.21
Непонятки с TStringGrid


3-1212133591
MV
2008-05-30 11:46
2008.12.21
TcxDBLoockupComboBox


4-1202133749
Andrewtitoff
2008-02-04 17:02
2008.12.21
Как узнать размер файла


2-1226472613
Alex7
2008-11-12 09:50
2008.12.21
TShiftState из какого модуля?





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