Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

Загоняемся на многоядерные процы

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [Компилируемые языки] >> Загоняемся на многоядерные процы
Имя
Сообщение << Старые топики   Новые топики >>
Загоняемся на многоядерные процы - 2007-08-14 16:11:16.020000   
Jasmin

Сообщений: 2320
Оценки: 0
Присоединился: 2007-05-03 23:08:53.390000
Вот чего нарыла

http://www.osp.ru/pcworld/2007/04/4230114/

Радуйтесь, Тирминатор и rgo, так называемый OpenMP есть только в вашем любимом C++. А вообще конечно неоптимизированные приложения это лень программистов. Главный аргумент - куда девать распарралеленный код если проц не многоядерный и операционка не поддерживает многопоточность.

Post #: 1
RE: Загоняемся на многоядерные процы - 2007-08-14 17:51:37.606666   
tt_andrey

Сообщений: 213
Оценки: 0
Присоединился: 2007-07-03 13:54:36.440000
Статья ни о чем
Post #: 2
RE: Загоняемся на многоядерные процы - 2007-08-14 22:22:04.180000   
Yashin

Сообщений: 964
Оценки: 0
Присоединился: 2007-05-09 20:18:01.153333
Если проц и операционка не многоядерные то распаралеленный код будет выполнятся в главном потоке. А для Делфи остается вариант использывать потоки.
Post #: 3
RE: Загоняемся на многоядерные процы - 2007-08-14 22:28:54.893333   
tt_andrey

Сообщений: 213
Оценки: 0
Присоединился: 2007-07-03 13:54:36.440000
quote:

rgo, так называемый OpenMP есть только в вашем любимом C++


кстати не думаю, что rgo так радеет за Си++, скорее за Си ;)
Post #: 4
RE: Загоняемся на многоядерные процы - 2007-08-16 15:55:06.476666   
Jasmin

Сообщений: 2320
Оценки: 0
Присоединился: 2007-05-03 23:08:53.390000
У нас жарко, искать лень, лучше спрошу здесь

Сегодня один умник рассказывал что прирост производительности при 2 ядрах такой маленький потому что типа одно ядро выполняет одну команду, второе следующую, если для следующей нет данных то второе ядро простаивает. ИМХО бред. Так могут работать множества АЛУ в одном ядре при всяких конвеерах/VLIW коммандах но никак не независимые ядра.

Так как всетаки работает Коре Дуо? Мое мнение - после ресета ядра устанавливают счетчики команд на разные значения. Первое ядро работает как обычно, второе крутится в цикле NOPов. Также есть какие то команды для изменения счетчика комманд на любом ядре. Кто точно знает, поправьте меня, глупую… [sm=ah.gif]
Post #: 5
RE: Загоняемся на многоядерные процы - 2007-08-16 16:59:14.910000   
tt_andrey

Сообщений: 213
Оценки: 0
Присоединился: 2007-07-03 13:54:36.440000
Два ядра полностью независимы. И они не имеют право да и не могут просто брать себе разные следующие друг за другом команды одного потока. Один поток в течение всего кванта времени выполняется полностью одним ядром, в это время на другом ядре выполняется другой поток или вообще ничего не выполняется.
Два ядра не дают никакого прироста или убытка для однопоточного приложения, но дают прирост для многопоточного. А многопоточность приложения обеспечивает уже программист
Post #: 6
RE: Загоняемся на многоядерные процы - 2007-08-16 21:41:05.500000   
rbzombie

Сообщений: 88
Оценки: 0
Присоединился: 2005-01-07 04:14:13
Я думаю что надо узучать спецификации Intel в которых все описано,а гадать что там и да как там можно до старости.Каждый думает по разному и рвет на себе волосы,что типа должно быть вот так.Личное мое мнение нужны очень мощные задачи(моделирование,расчет крутых уравнений,графика) такие задачи как известно используются учеными и прочим научным народом,а реклама раскажет что ты хочешь услышать.Пока это просто реклама и не более того.
Post #: 7
RE: Загоняемся на многоядерные процы - 2007-08-16 22:54:35.766666   
rgo

Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
quote:

ORIGINAL: rbzombie
Личное мое мнение нужны очень мощные задачи(моделирование,расчет крутых уравнений,графика) такие задачи как известно используются учеными и прочим научным народом,а реклама раскажет что ты хочешь услышать.Пока это просто реклама и не более того.

когда у тебя несколько процессов конкурируют за последние кванты времени процессора, то второе ядро не помешает.
Post #: 8
RE: Загоняемся на многоядерные процы - 2007-08-16 23:23:51.933333   
Yashin

Сообщений: 964
Оценки: 0
Присоединился: 2007-05-09 20:18:01.153333

quote:

ORIGINAL: tt_andrey

Два ядра полностью независимы. И они не имеют право да и не могут просто брать себе разные следующие друг за другом команды одного потока. Один поток в течение всего кванта времени выполняется полностью одним ядром, в это время на другом ядре выполняется другой поток или вообще ничего не выполняется.
Два ядра не дают никакого прироста или убытка для однопоточного приложения, но дают прирост для многопоточного. А многопоточность приложения обеспечивает уже программист

Так что же получается, Винда никак не разделяет потоки по процессорам? Я считал что если приложение не многопоточное, то должно выполнятся одновременно два несвязанных процесса, разве это нитак? А ведь как мало сейчас многопоточных приложений и потоки используются лишь в редких случаях, зато одновременно на компьютере запущенно множество процессов, которые как мне кажется и должны выполнятся на разных процессорах.
Post #: 9
RE: Загоняемся на многоядерные процы - 2007-08-16 23:36:51.800000   
rbzombie

Сообщений: 88
Оценки: 0
Присоединился: 2005-01-07 04:14:13
To rgo это с чем же таким надо работать что бы камня не хватило(это происходит очень редко),нужна ось которая будет управлять многоядерностью это раз(то что сейчас есть,это сырое изделие) второе это софт который будет поддерживать многоядерные технологии
А нельзя ли поставить Windows server 2003 и проверить использование ядер?
Post #: 10
RE: Загоняемся на многоядерные процы - 2007-08-17 00:53:44.740000   
Yashin

Сообщений: 964
Оценки: 0
Присоединился: 2007-05-09 20:18:01.153333
Windows Vista поставь, может и не хватить
Post #: 11
RE: Загоняемся на многоядерные процы - 2007-08-17 01:06:25.046666   
rgo

Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
quote:

ORIGINAL: rbzombie
To rgo это с чем же таким надо работать что бы камня не хватило(это происходит очень редко),

это зависит от пользователя. у тебя может и редко. у меня регулярно.
quote:

ORIGINAL: rbzombie
нужна ось которая будет управлять многоядерностью это раз(то что сейчас есть,это сырое изделие)

ты про венду? ну вообще бытует мнение что венда сырая поделка. но, на самом деле, всё не так плохо как ты разрисовываешь, поддержка многопроцессорности в венде есть уже очень давно, она появилась задолго до первого многоядерного проца. ну а добавить две сотни ассемблерных команд в ядро, научив его использовать ядра как процессоры – это не так уж и сложно. и это сделано.
quote:

ORIGINAL: rbzombie
второе это софт который будет поддерживать многоядерные технологии

если речь идёт о нескольких конкурирующих процессах, то от них не требуется никакой специальной подготовки, для того чтобы венда могла их по разным ядрам разнести.
ну а если речь о каком-нибудь софте для брутфорса/ray-tracing'а и пр, то я уверен что _этот_ софт уже давно умеет работать на многих ядрах одновременно. ведь от такого софта требуется лишь использовать, хоть иногда win32api функцию CreateThread, которая присутствует в венде _всегда_. по-крайней мере с '95-ой венды.
Post #: 12
RE: Загоняемся на многоядерные процы - 2007-08-17 16:54:13.026666   
Jasmin

Сообщений: 2320
Оценки: 0
Присоединился: 2007-05-03 23:08:53.390000
Короче, железная оптимизация мне представляется такой:

Выделить в программе части которые могут работать как сервера. Запихнуть их в отдельные процессы

Допустим пишем игру. Будут процессы

PHYSIC.EXE
AI.EXE

Вручную какой нить API функцией расставить им Affinity, т е на каком ядре исполняются
Запустить оба процесса, будут выполнятся уж точно одновременно
Подождать пока оба закончат и выводить кадр
Post #: 13
RE: Загоняемся на многоядерные процы - 2007-08-17 19:18:28.980000   
Yashin

Сообщений: 964
Оценки: 0
Присоединился: 2007-05-09 20:18:01.153333
Зачем отдельные процессы то? Лучше использывать потоки, да и все, только в играх не все так легко - там же все связано и тот же АЙ зависит от физики. Но фоновую мелодию запустить будет можно.
Post #: 14
RE: Загоняемся на многоядерные процы - 2007-08-17 23:30:41.480000   
rgo

Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
quote:

ORIGINAL: Jasmin
Короче, железная оптимизация мне представляется такой:
Выделить в программе части которые могут работать как сервера. Запихнуть их в отдельные процессы
Допустим пишем игру. Будут процессы
PHYSIC.EXE
AI.EXE
Вручную какой нить API функцией расставить им Affinity, т е на каком ядре исполняются
Запустить оба процесса, будут выполнятся уж точно одновременно
Подождать пока оба закончат и выводить кадр

в принципе – запросто. только ты слегка усложняешь. процесс physic.exe реализовывает некий сетевой протокол, по которому сторонний процесс может управлять объектом в игре. если сторонний процесс не успевает – это его проблемы. кстати, это способ уменьшить количество лагов в игре – ведь с определённой вероятностью лаг будет выражаться не в том, что картинка замрёт на долю секунды, а в том, что бот вдруг протупит.
этот подход, конечно, не всегда рулит. но довольно часто деление задачи на отдельные процессы позволяет разделить задачу на несколько практически _независимых_ частей. причём частей, которые могут использовать не только много процессоров отдного кластера, но и много кластеров. узким местом такого подхода будет сетевое соединение, и запросто может случиться так, что все бонусы использования многих ядер/процессов будут с избытком потрачены на накладные расходы по сериализации/десериализации данных, и передачу их через ядро в адресное пространство соседнего процесса.
если продолжать с предложенным примером игры, то я думаю, что скажем стратегии, типа варкрафта и ему подобных, очень даже здорово лягут в предложенную клиент-серверную архитектуру.
quote:

ORIGINAL: Jasmin
Зачем отдельные процессы то? Лучше использывать потоки, да и все, только в играх не все так легко - там же все связано и тот же АЙ зависит от физики. Но фоновую мелодию запустить будет можно.

может быть, в данной ситуации всё-таки потоки лучше – я не возьмусь утверждать, не пробовал. но чисто по ощущениям могу сказать, что потоки хуже тем, что:
1. их сложнее отлаживать,
2. у них общее адресное пространство, и, например, ошибка в ai может привести к повреждению структур физического движка.
3. придётся писать одну программу размер которой, грубо говоря равен сумме размеров физического движка, и движка интеллектуального. а это сложнее чем написать эти движки поотдельности.
на самом деле ai не так уж и сильно зависит от физики. когда бот управляет скажем самолётом, ему достаточно знать лишь показания приборов, положение и скорость объектов в пределах видимости. а это не так уж и много. в обратную же сторону, бот будет передавать лишь команды, причём команд будет не так уж и много, чтобы об этом стоило говорить.

но на самом деле я заговорил про процессы немного в другом контексте. когда я смотрю киношку, а на заднем фоне у мну висит броузер, в котором крутиться n-ное количество флешек рекламы, то у меня уже есть два процесса активно кушающих процессорное время. а если где-нибудь в бекграунде у меня музыка перекодируется из .flac в mp3, чтобы я смог её послушать завтра по пути на работу через mp3 плеер, то вообще хорошо становится. и вот тут, лишнее ядро будет не лишним. или ещё одна ситуация, уже не вендовая – пересборка системы, для неё большим бонусом является возможность запускать одновременно компиляцию двух файлов. другое дело, что всё-таки ядро – это не процессор. и запросто может случиться, что прирост скорости от того, что ось имеет возможность использовать второе ядро будет всего 10%. но в каких-то ситуациях прирост может составить и 50%.
Post #: 15
RE: Загоняемся на многоядерные процы - 2007-08-18 00:41:39.020000   
Jasmin

Сообщений: 2320
Оценки: 0
Присоединился: 2007-05-03 23:08:53.390000

quote:

ORIGINAL: rgo
другое дело, что всё-таки ядро – это не процессор.


А какая разница? Чего такого нет у ядра что есть у процессора? УУ, АЛУ, регистры, дешифратор, конвееры, даже кеш свой. Единственное что шина общая но я думаю в двухядерниках она ширее, чтоб не быть бутылочным горлышком
Post #: 16
RE: Загоняемся на многоядерные процы - 2007-08-19 21:25:46.393333   
rgo

Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
quote:

ORIGINAL: Jasmin
quote:

ORIGINAL: rgo
другое дело, что всё-таки ядро – это не процессор.

А какая разница? Чего такого нет у ядра что есть у процессора? УУ, АЛУ, регистры, дешифратор, конвееры, даже кеш свой. Единственное что шина общая но я думаю в двухядерниках она ширее, чтоб не быть бутылочным горлышком

ну фих его знает. просто из общих соображений мне так кажется. может быть я не прав.
к процессору ведь прилагается ещё внешняя логика расположенная на материнке… ну фиг знает… я, честно говоря, с многопроцессорными/двухядерными системами опыта ковыряния немного имел, чтоб судить по результатам что лучше, а даташиты на процы читать мне лень за ненадобностью ;)
хотя, с другой стороны, sun делает 64-х ядерные процы и, надо думать, оно того стоит.

но как бы там ни было, когда (если) я соберусь-таки апгрейдить свой pIII, основным критерием при выборе проца будет количество ядер :)
игрался я у знакомца с компиляцией (флаг -j у gmake который регулирует количество параллельных компилирующих процессов) – точных замеров не проводил, просто запустил с -j 1 и -j 3, просто по ощущениям быстрее. далеко не в два раза, конечно, но там оперативки было 3x128Mb, а с учётом всяких запущенных гномов/мозилл и прочих монстров надо бы побольше.
Post #: 17
Страниц:  [1]
Все форумы >> [Компилируемые языки] >> Загоняемся на многоядерные процы







Связаться:
Вопросы по сайту / xakep@glc.ru

Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.