На главную страницу сайта
· Наш магазин · Объявления · Рейтинг · Статьи · Частоты · Копилка · Аэродромы · Live!
· Файлы · Диапазоны · Сигналы · Музей · Mods · LPD-форум · Клуб · Радиостанции
На сайте: гостей - 51,
участников - 2 [ UA3-155-550, Slavik]
 · Начало · Опросы · События · Статистика · Поиск · Регистрация · Правила · FAQ · Галерея ·
 Форум —› Программное обеспечение —› Использование ресурсов Core 2 Duo 
Новая линейка радиостанций Hytera в нашем магазине


Hytera TC-320
руб.

Hytera TC-508
руб.

Hytera TC-580
руб.

Hytera PD-355
руб.

Hytera X1E
руб.
Автор Сообщение
Valx
Участник
Offline1.2
с дек 2008
Вологда
Сообщений: 23

Дата: 19 Янв 2010 17:09:33 #  

Всем доброго времени суток! недавно столкнулся с такой проблемой:

При написании очередной программы-декодера, требующей большого количества математических вычислений, заметил, что на полную загружается только одно ядро (на подопытной машине установлен Intel Xeon - 4 ядра+4 виртуальных!!!!). В результате с обработкой данная машина не справляется. Попытки сделать многопоточную обработку внутри данного приложения результатов не дали. Так же испытывал на ноутбуке с Core 2 Duo, результат абсолютно такой же, скрин прилагаю:)))

Увеличить

использовалась делфи 2009.

Товарищи! Если кто-нибудь сталкивался с такой проблемой, очень прошу помощи. Сам занимаюсь декодированием помехоустойчивых кодов, если кому нужно - окажу посильную помощь.
Sashman
Участник
Offline4.6
с фев 2007
р'Льех
Сообщений: 2029

Дата: 19 Янв 2010 17:30:59 #  

Раскидываете выполнение алгоритма по потокам (threads), и раскидываете треды по ядрам с помощью вызова SetThreadAffinityMask().
Реклама
Google
mf21
Участник
Offline3.0
с апр 2007
Москва
Сообщений: 3137

Дата: 19 Янв 2010 17:57:37 #  

у интела есть библиотека распараллеливания алгоритмов, она бесплатная, по моему для мах. 4-х ядер, ссылку поищу позжее
Sergey4565
Участник
Offline5.0
с сен 2007
Москва
Сообщений: 8305

Дата: 19 Янв 2010 18:10:08 #  

Паралельный вопрос: а можно-ли заставить уже готовую прогу (из их бесчисленного множества) корректно работать на многоядерных системах, при условии что модифицировать код невозможно и нет исходников?
rn9aaa
Участник
Offline3.7
с авг 2005
ХМАО-Югра
Сообщений: 1383

Дата: 19 Янв 2010 18:21:21 · Поправил: rn9aaa (19 Янв 2010 18:22:18) #  

Думаю что нет. Ну разве что принудительно прописать процесс к "свободному" ядру, и дать приоритет по больше хотя явного прироста "не сильно" будет.
mf21
Участник
Offline3.0
с апр 2007
Москва
Сообщений: 3137

Дата: 19 Янв 2010 18:37:51 #  

нет, нельзя... алгоритм распараллеливания должен быть объявлен и откомпилирован вместе с кодом, таковы реалии декларативного программирования фон неймановских машин.
rn9aaa
Участник
Offline3.7
с авг 2005
ХМАО-Югра
Сообщений: 1383

Дата: 19 Янв 2010 18:44:38 · Поправил: rn9aaa (19 Янв 2010 18:46:44) #  

К стати в догонку. Только что прикинул на ноуте как поведет мманагал при переброске на 1 ядро руками
и задание приоретета реал тайм, на файле mirror.mma прирост производительности составляет ~2 % вот пожалуй и всё для не оптимизированых приложений.
Antisanitar
Участник
Offline3.0
с апр 2008
Одесса
Сообщений: 550

Дата: 19 Янв 2010 20:45:37 #  

На сайте майкрософта есть патч как раз по вашему вопросу.
Первое, что нашел - форум на касперском, но Вам он будет интересен.
Клик
rn9aaa
Участник
Offline3.7
с авг 2005
ХМАО-Югра
Сообщений: 1383

Дата: 19 Янв 2010 21:07:44 #  

На сайте майкрософта есть патч как раз по вашему вопросу.
К сожалению это не из той темы хотя и звучит близко.
Sashman
Участник
Offline4.6
с фев 2007
р'Льех
Сообщений: 2029

Дата: 19 Янв 2010 23:12:50 #  

фон неймановских машин
А у Гарвардской архитектуры этой проблемы нету? ;)
ua0lgc
Участник
Offline2.1
с сен 2006
Владивосток
Сообщений: 164

Дата: 20 Янв 2010 06:45:07 #  

Воспользуйтесь этой утилиткой.
она мне помогла в своё время раскидать на два ядра приложение заточеное под одно.
RA9YTJ
Участник
Offline1.1
с мар 2007
Рубцовск
Сообщений: 53

Дата: 20 Янв 2010 11:08:42 #  

Все эти утилитки и патчи приказывают ядру ОС как в пин-понг перекидывать поток между ядрами, выглядит как загрузка 2х ядер, но реально все равно скорость как на 1 ядре. Немного до 5% можно получить только за счет запрета использования одного ядра другими потоками. Вопросы написания многопоточных программ стоит сейчас очень остро.
john_qkk
Участник
Offline4.0
с авг 2003
Санкт-Петербург
Сообщений: 4341

Дата: 20 Янв 2010 11:18:09 · Поправил: john_qkk (20 Янв 2010 11:18:51) #  

Во тебе, бабушка, и "два ядра лучше одного". Пока напишут программы под два ядра, все это современное железо, за которое денежки заплачены, можно будет уже нести на помойку :)
Но в серверах, как я понимаю, несколько ядер уже используются?
Зачем только эти лишние я... в ноутбуках?
ua0lgc
Участник
Offline2.1
с сен 2006
Владивосток
Сообщений: 164

Дата: 20 Янв 2010 11:32:57 #  

ПО использующего два и более ядра хватает. вопрос лени программистов.
Допустим игра СТАЛКЕР Тени Чернобыля написана для одного ядра.
У меня корик 4300 по 1.8ГГЦ на ядро. Для нормального геймплея этого в общем то маловато.
и при использовании утильки НАМНОГО веселее стало играть.Вот в следующих версиях рассчет физики и геймплей раскидали по ядрам.
И я не отрицаю того что все же приложение должно быть заточена на многоядерность, а не юзать их через.. простите.. задницу.
sea
Участник
Offline3.3
с авг 2006
Ярославль
Сообщений: 832

Дата: 20 Янв 2010 11:44:51 · Поправил: sea (20 Янв 2010 11:46:41) #  

Недавно менял свою старую ЭВМ. И тоже встал перед выбором количества ядер. Сам программированием занимаюсь давно, но не распараллеливал вычисления обычно. Советовался с коллегами, немного почитал. Коллега пробовал распараллеливать, но потом все обратно возвращал на один процесс, т.к. распаралелено получалось медленнее (видимо такая задача попалась).

В общем из двух процессоров AMD 2.6 X4 и AMD 3.0 X2 выбрал второй.
Производители процессоров рекомендуют для простых легковесных задач отдавать предпочтение к частоте. А при обработке, например, видео или графики - многоядерности.

Тут я думаю, что как раз Ваш случай - надо решить как правильно разделить задачу между двумя процессорами (если задача это позволяет). Сам пишу на Дельфи 7 и на qt4. Но думаю, что в обоих средах такое возможно.
milstd
Участник
Offline1.2
с окт 2008
Москва
Сообщений: 85

Дата: 20 Янв 2010 11:49:20 #  

Valx
А какой смысл "писать математику" с нуля и мучиться с распараллеливанием, если существуют готовые мат. пакеты, в которых уже всё сделано. Профессионально.

Из личного опыта: как-то писал библиотеку линейной алгебры в C++ для приложения проекта Builder C++, так несмотря на все ухищрения, Matlab "делал меня" процентов на 20..25.
ChoosenOne
Участник
Offline2.4
с дек 2004
Москва
Сообщений: 273

Дата: 20 Янв 2010 11:51:11 #  

Не забывайте про то, что в современных ОС работает обычно далеко не только 1 программа, и наличие нескольких процессоров или ядер реально улучшает "время отклика" системы и общую производительность.

Кроме того, если одновременно работают несколько программ, понятия не имеющих про многоядерность, на уровне ОС они будут раскидываться по разным ядрам.

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

Ну а волшебные утилиты, "распараллеливающие" уже написанное однопоточное ПО, имхо, из области программ, которые не имеет смысла применять без крайней в этом нужды, понимая их плюсы и минусы. Это "ускорители интернета" (прокси с компрессией трафика), программы сжатия данных на лету при записи на HDD, и прочий подобный софт.
sea
Участник
Offline3.3
с авг 2006
Ярославль
Сообщений: 832

Дата: 20 Янв 2010 13:19:43 #  

Ну а волшебные утилиты, "распараллеливающие" уже написанное однопоточное ПО, имхо, из области программ, которые не имеет смысла применять

...из области научной фантастики. Были так же спец программы для чтения на CD приводах DVD диски. Хотя уплотняющие программы имеют место.


Совсем забыл заострить внимание еще на одном моменте. Например в том же никсе есть рейтинг процессоров. Рейтинг строится по результатом нескольких программ. НО как правило все они могут разделять свои вычисления на несколько ядер. Однако большинство программ так не умеют...

ChoosenOne правы. В ОС работает много программ, и замечено, что когда ядро не одно, то при ресурсоемких задачах вся система под клиентом шевелится по-живее.
Valx
Участник
Offline1.2
с дек 2008
Вологда
Сообщений: 23

Дата: 20 Янв 2010 19:52:36 #  

milstd

я просто не считаю матлаб полноценной средой, моделировать можно, не спорю, а вот с файлами там будет посложнее, да и результатом данной работы(если конечно с ядрами разобраться) будет библиотека:)
Sergey4565
Участник
Offline5.0
с сен 2007
Москва
Сообщений: 8305

Дата: 20 Янв 2010 20:00:21 #  

Что-то я не слыхал про чтение ДВД на сидироме, это развод, т.к. он физически не может сфокусировать луч на таком диске.
Valx
Участник
Offline1.2
с дек 2008
Вологда
Сообщений: 23

Дата: 20 Янв 2010 20:11:44 #  

Sashman спасибо за совет, сегодня пробовал процедуру SetThreadAffinityMask(), а так же SetThreadIdealProcessor, которые вроде бы и делают все верно, но результатом явилась загрузка двух ядер на 50%:)))
Исходники проекта с использованием SetThreadAffinityMask():
http://www.radioscanner.ru/uploader/2010/for_core_duo_.zip
Valx
Участник
Offline1.2
с дек 2008
Вологда
Сообщений: 23

Дата: 20 Янв 2010 20:17:16 #  

да....файл пректа под делфи 2009
metrolog
Участник
Offline3.9
с авг 2006
Дубна
Сообщений: 1614

Дата: 20 Янв 2010 20:27:10 #  

ChoosenOne +1/ Достаточно запустить Диспетчер и посмотреть сколько там всего крутиться. Виндовз вполне грамотно раскидывает потоки по ядрам без всяких дополнительных утилит. Кстати, в последних версиях ОС появилось множество новых полезных функций для работы с планировщиком, что не может не радовать.

Кроме непосредственно распараллеливания существует еще серьезная проблема синхронизации потоков, когда различные части алгоритма причинно-следственно связанны. В результате максимальной производительности даже при параллельных вычислениях достичь не всегда удается. И это все касается непосредственно вычислений, в то время как основная масса времени работы среднестатистической программы вообще уходит на обработку запросов ввода-вывода, в которых процессор не участвует.

К слову о культуре программирования, многие программисты пишут программы "в лоб", не утруждая себя вопросами высвобождения процессорного времени ожидания выполнения чего-либо. Например, пока один поток ждет от другого результата промежуточных вычислений он крутится в глухом цикле, что приводит к тому, что другие потоки фактически не совершают никаких операций.. Поэтому мало просто распараллелить вычисления, это все еще нужно правильно оформить.
metrolog
Участник
Offline3.9
с авг 2006
Дубна
Сообщений: 1614

Дата: 20 Янв 2010 20:31:57 #  

Valx, если ядра загружены в цикле не на 100%, то это означает, что выполняются функции ожидания. Всякие Sleep..., WaitFor... и т.п. Они могут быть внутри функций чтения/записи, вывода на экран, различных блокировок и т.п. Если таковые найдутся, то их можно отправить в третий поток и задействовать из потока вычислений при помощи всяких Event.
Valx
Участник
Offline1.2
с дек 2008
Вологда
Сообщений: 23

Дата: 20 Янв 2010 20:48:07 #  

ChoosenOne я не согласен, что идея распарралелить неудачна, все было проверено опытным путем:

допустим exe-программа выполняет довольно длинный цикл и подсчитывает время его выполнения, так вот 8 локальный копий этой программы, которые были запущены одновременно на 8-ми ядерной машине, обработали свои циклы за то же самое время(+5%:))),а ведь это в 8 раз больше. при этом для каждой программы система выделила ресурсы 1 ядра, так что рано, я думаю, хвалить распределение ресурсов на уровне ОС, особенно для одного приложения:)
Sergey4565
Участник
Offline5.0
с сен 2007
Москва
Сообщений: 8305

Дата: 20 Янв 2010 21:07:34 #  

Кстати, многопроцессорные компы существуют чуть-ли не с середины 90-х, по крайней мере на работе был П-1 ММХ 2-х процессорный, есть П-2, но в нём второй проц не установлен, П-про один ещё в эксплуатации и пару уже давно списали. Сейчас всё идёт по пути дальнейшего увеличения числа ядер при некотором пороге частоты - выше 4ГГц так и не залезли, а уже в 2005г. вроде были 3.8 одноядерные, хотя я свой Е8600 могу выставить на 4100МГц (а с водяным или азотным охлаждением теоретически 6ГГц, но такими извращениями не занимаюсь), но заводских процов таких нет. А вот программисты в деле многопоточности отстают, ну разве что игрушки и прочая трёхмерная графика, графические процессоры сейчас имеют уже сотни потоков обработки, сюда-же "прилепились" переборщики паролей, которые способны использовать ресурсы видеокарты.
mikasa76
Участник
Offline1.8
с сен 2008
USSR
Сообщений: 305

Дата: 21 Янв 2010 21:00:00 #  

Valx

тоже занимаюсь разработкой программных демодуляторов/декодеров и проблема оптимизации поэтому стоит остро. в свое время тоже мучал этот вопрос. но ничего сделать не получилось. на 2 ядра так и не удалось раскидать. единственным выходом явилось использование IPP. это интеловые библиотеки плюс к этому есть еще и компилятор (последний по-моему Intel C++ compiler v.11.0.066). Вещь стоящая, после того как переписал демодулятор с использованием этих функций и компилятора (+ оптимизация под Core2Duo) производительность увеличилась в разы.

по вопросам декодирования. есть толковое описание по алгоритмам декодирования LDPC кодов для жестких и мягких схем декодирования? если да, то просьба поделиться. спасибо.
Valx
Участник
Offline1.2
с дек 2008
Вологда
Сообщений: 23

Дата: 01 Фев 2010 21:52:50 #  

mikasa76

Прикольно! А есть ли что под делфи такое? Насчет я LDPC посмотрю.
mikasa76
Участник
Offline1.8
с сен 2008
USSR
Сообщений: 305

Дата: 03 Фев 2010 01:04:56 #  

Valx
честно говоря не знаю под делфи существует что-либо подобное или нет. завтра спрошу.
Реклама
Google
 

Создавать сообщения могут только зарегистрированные участники форума.
Войти в форум :: » Логин » Пароль
Начало
Средства связи, рации. Купить радиостанции Motorola, Yaesu, Vertex, приемники, антенны.
Время загрузки страницы (сек.): 0.051; miniBB ®