Конференция "Прочее" » Как использовать второе ядро двухъядерного процессора?
 
  • МемТест (15.10.08 07:05) [0]
    Кто-нибудь может поделиться простым примерчиком?

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

    Желательно, чтобы была какая-нибудь система разделения между ядрами. То есть, если ядер, допустим, четыре, чтобы создавалось 4 потока, и каждый обрабатывал общий массив со своего места.
  • Skyle © (15.10.08 07:10) [1]
    Делай разные потоки и оно само может получиться. А может и не получиться. Если хочешь жёстко привязать потоки к ядрам, читай про SetAffinityMask.

    А уж как они будут обрабатывать массив и каким местом - сугубо вопрос твоей реализации.
  • Skyle © (15.10.08 07:12) [2]

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

    Уточнение - SetProcessAffinityMask
  • Skyle © (15.10.08 07:14) [3]

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

    Хотя для задачи больше подходит SetThreadAffinityMask. :(
  • МемТест (15.10.08 07:45) [4]
    Кто-нибудь может поделиться примером работающей программы?
  • Skyle © (15.10.08 07:59) [5]
    А в чём именно сложность-то?
  • Palladin © (15.10.08 08:40) [6]
    Вставить куда есть, а вот скопировать неоткуда :) вот и просит...
  • oxffff © (15.10.08 09:16) [7]

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


    Понятие обрабатывались неопределено.
    Является ли обработка каждого элемента зависимой от другого элемента?
  • МемТест (15.10.08 09:40) [8]

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


    Частично.
  • oxffff © (15.10.08 09:42) [9]

    > Частично.


    Тогда можно задействовать частично два потока каждый на своём ядре.
    Пока ты полностью не сформулируешь условие тебе никто наталкивать на решение не будет, а уж тем более решать его за тебя.
  • oxffff © (15.10.08 09:48) [10]

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


    Разбей массив на несколько независимых частей и обрабатывай их параллельно. Возможно параллельно обрабатывать зависимые друг от друга элементы внутри независимой от других групп группы.
    Но тогда нужно разбивать группу на подгруппы независимых элементов с разделением по времени.
  • blackman © (15.10.08 09:52) [11]
    Сделайте потоки, и система сама распараллелит наилучшим образом по всем процессорам.
  • tesseract © (15.10.08 10:05) [12]

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


    Не уверен. Например как она будет данные по процессорам раскидывать ? А в случае "плохого" распределения локи будут на чтение/ запись.
  • blackman © (15.10.08 10:09) [13]
    Вы уверены, что знаете как работает планировщик WIN?
    А если не уверен, то не обгоняй. Только мешать будете...
  • БарЛог © (15.10.08 10:30) [14]
    > Как использовать второе ядро двухъядерного процессора?

    Как и первое - для вычислений :)
  • oxffff © (15.10.08 10:33) [15]

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


    +18
  • tesseract © (15.10.08 10:38) [16]

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


    Что-то читал у Руссиновича. Но про "наилучшим образом" не уверен, и кстати это не только Windows касаеться. intel вот свою библиотеку предлагает для многопоточности : http://www.intel.com/cd/software/products/asmo-na/eng/threading/294797.htm
  • stas © (15.10.08 11:44) [17]
    МемТест   (15.10.08 07:05)
    Только раз уж решил делать многопоточное приложение, надо не второе ядро грузить, а все т.е. для начала определить количество ядер в системе и расчет разбить на столько же потоков.
  • guav © (15.10.08 13:12) [18]
    Одно ядро для прикладной программы, другое для трояна, чтобы ничего не тормозило.
  • han_malign © (15.10.08 13:45) [19]

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

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

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


    Может всё-таки очищать кэш  2-го уровня ?
  • stas © (15.10.08 15:28) [21]
    han_malign ©   (15.10.08 13:45) [19]

    Вообще я такое о Гипертрейдинге слышал.
  • Городской Шаман (15.10.08 16:42) [22]
    А человеку нужны были только классы TThread и TCriticalSection
  • МемТест (16.10.08 05:43) [23]
    Дайте кто-нибудь пример программы? Чтобы изучать работу на примерах.
  • Skyle © (16.10.08 06:25) [24]
    \Program Files\Borland\DelphiX\Demos\Threads?
  • stas © (16.10.08 08:56) [25]
    МемТест   (16.10.08 05:43) [23]
    Куда тебе его давать? e-mail хоть напиши.
    Ты вобще что считать собрался? мож тебе надо изучить команды SSE  и т.п. ?
  • МемТест (17.10.08 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 © (17.10.08 08:45) [27]
    Неохота возиться с ifolder.ru, narod.ru, rapidshare и т. д. и т. .п.
    Напиши почту вместо собаки поставь другой значек.
    А что за база (СУБД) ? или заведи на mail.ru.
  • МемТест (20.10.08 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/ кнопка загрузить файл.
  • Сергей М. © (20.10.08 09:48) [29]

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


    От synchronize, наверно)
  • МемТест (20.10.08 10:13) [30]

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


    А что с ним сделано не так и как надо исправить?
  • Сергей М. © (20.10.08 10:16) [31]

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


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


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


    Надо переписать программу с полным пониманием происходящего в ней.
  • Плохиш © (20.10.08 10:53) [32]

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

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

    Я не ошибаюсь, это у нас проблема? Или, всё-таки, у нас?
  • shlst (20.10.08 11:47) [33]
    Есть программа, которая может назначать другие программы на отдельные ядра. То есть блокнот на первое ядро, винамп на второе, а твою программу, автор, на третье ядро и второе тебе не достанется :)
  • stas © (20.10.08 13:29) [34]

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

    Это легко проверить диспетчером задач.
    мы же незнаем что ты там делаешь как мы тебе поможем?
  • stas © (20.10.08 15:44) [35]

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

    Без анкеты, без е-майла, пишешь что-то похожее на брутфорс и хочешь чтобы тебе вот так все сделали.
  • МемТест (21.10.08 04:47) [36]

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


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

    В чём тут причина?
  • МемТест (21.10.08 05:04) [37]

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


    Как именно? Он показывает загрузку процессора. 100 процентов. Про ядра там ничего нет.
  • МемТест (21.10.08 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 © (21.10.08 06:31) [39]

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

    Такая программа называется "Диспетчер задач". Правой кнопкой на процессе, "Задать соответствие".
  • KSergey © (21.10.08 09:21) [40]
    > МемТест   (21.10.08 05:04) [37]
    > > Это легко проверить диспетчером задач.
    > Как именно? Он показывает загрузку процессора. 100 процентов.
    >  Про ядра там ничего нет.

    На вкладку "Быстродействие" загляни.
    Верхний ряд окошечек с графиками - это как раз загрузка ядер. Если такое окошко всего одно - значит и ядер одно :)
  • Сергей М. © (21.10.08 09:25) [41]

    > МемТест   (21.10.08 04:47) [36]


    Ты код-то соизволишь показать ?)
  • Anatoly Podgoretsky © (21.10.08 09:43) [42]
    > KSergey  (21.10.2008 9:21:40)  [40]

    Не значит, данный диалог имеет возможность настраивать показ.
  • KSergey © (21.10.08 09:56) [43]
    > Anatoly Podgoretsky ©   (21.10.08 09:43) [42]
    > Не значит, данный диалог имеет возможность настраивать показ.

    Блин, и правда. Вот бы не подумал. Спасибо.

    Автору: Вид - Загрузка ЦП - По одному графику на каждый ЦП
 
Конференция "Прочее" » Как использовать второе ядро двухъядерного процессора?
Есть новые Нет новых   [134444   +21][b:0.001][p:0.001]