двух ядерники в генту
vit.ok 10 ноября, 2008 - 02:41
а как в генту обстоят дела с 2-х ядерными процами? всмысле можно собирать проги чтоб они ложиль на оба ядра? или таких флагов нет? т.е. как везе в линуксе, один процесс одно ядро?
»
- Для комментирования войдите или зарегистрируйтесь
Это всё сильно зависит от
Это всё сильно зависит от решаемой программой задачи и необходимости работать с несколькими потоками. Многопоточное программирование не совсем тривиальная задача и далеко не везде себя оправдывает/требуется.
Нужно включить в ядре SMP и SMT и/или Multi-core scheduler (в зависимости от проца). USE="nptl" включает поддержку в glibc, а значит в большей (почти всей) части софта. Ещё у некоторых пакетов есть USE="threads".
Вопрос
Вопрос несколько не в тему. Но стоит ли использовать данные флаги для одноядерной системы?
Я ♥ Gentoo & Funtoo
Вообще нет, так как в таком
Вообще нет, так как в таком случае получим скорее падение производительности из за роста числа процессов и потребления памяти. И это очень сильно зависит от конкретного софта (кто его знает как там чего реализовали). Но nptl включён по умолчанию и выключать его, я думаю (и вроде так рекомендуют), не следует (а, возможно, и не получится) в силу довольно хитрой реализации данного механизма.
жесть какой бред
жесть какой бред
Аргументы?
Аргументы?
Я ♥ Gentoo & Funtoo
Покажи мне то место где это
Покажи мне то место где это рекомендуют вырубать для одноядерной системы?
Сцылки Ыкпыртов с лора не принимаются. Для справки nptl в либц начиная с 2.5 включен по дефолту
___________________________________________
Working on Gentoo for iPAQ hx4700 and Openmoko Neo Freerunner :-)
Если у вас компьютер с Windows, есть два выхода: выбросить компьютер в форточку или выбросить форточки с компьютера
Ваше мнение по поводу
Ваше мнение по поводу использования флагов nptl, threads на одноядерных системах?
Я ♥ Gentoo & Funtoo
не рекомендуют
Я говорю, что не рекомендуют! Читал в какой-то "умной" книжке по программированию под *nix. Забыл название :(. Найду отпишусь.
Так я, собственно, об этом и сказал.
Вообще, если порыться в
Вообще, если порыться в глубинах памяти, потоки были и остаются включены всегда. Просто раньше там было Linux Threads а теперь стало Native Posix Treads Library, и USE-флаг отвечал за переключение реализации. Теперь только NPTL.
Или ту книжку писал слишком заумный дятел, или кто-то его недопонял. Поидее программа запускающая некие действия в отдельных потоках всёравно будет быстрее, и почему она должна сожрать больше памяти мне не ясно - ведь эти потоки это не всегда запуск 2х 3х 4х процессов обсчитывающих одно и тоже, можно некие "действия" делать в отдельном потоке и мирно ждать результата в основном.
Да, верно, был не прав :-[,
Да, верно, был не прав :-[, памяти при этом в самом деле больше потреблять не должно. Возможно я в самом деле недопонял автора.
Но вот с производительностью всё ж меня сомнения одолевают, т.к. ещё требуется процессорное время на переключение контекста, синхронизацию потоков. (Речь именно об однопроцессорной системе) Хотя время отклика программы на внешние раздражители должно быть весьма мало (если считать, что есть поток, к-й ждёт результата/сигнала ОС). Т.е. "интерактивность" моногопоточного софта должна быть выше.
В общем, резюмирую мои "туманные" рассуждения: ИМХО nptl (да и вообще многопоточность/многопроцессность) на однопроцессорной системе не должно испортить впечатления от системы в целом. Да и производительность думаю не уменьшит. Разработчики, судя по качеству софта, люди весьма грамотные, и учитывают нюансы, к-е мы здесь обсуждаем. По крайней мере это можно проверить (благо исходники почти всегда под рукой) :-).
PS Вот нашёл одну книжку: Андрей Александреску. Современное проектирование на С++. Изд. дом "Вильямс", 2002 г. Там в приложении довольно подробно про многопоточность. Но это не та, т.к. в ней не конкретно про *nix. Будем искать ((С) "Бриллиантовая рука")
>>как везе в линуксе, один
>>как везе в линуксе, один процесс одно ядро?
Не только в линуксе. Архитектуре железа, однако. У каждого процесса своя область памяти, свой счетчик команд и тд.и тп. Ежели программе нужен отдельный процесс, он создается. Под линем либо форком основного в простых случаях, либо тредом. На каком из ядер его исполнять решает ось. А так чтоб единый процесс сразу на двух камнях работал - имхо невозможно, по крайней мере на современных интелях и иже с ними.
вопрос несколько сбивает с
вопрос несколько сбивает с толку. если имеется в виду практическая часть - много чего использует 2(4,8...) ядер, сборка таже, пережимание видео и прочее. а если про "вообще" - есть процессы легко распараллеливающиеся и не распараллеливающиеся в принципе - и это к ОС никакого отношения не имеет.
фраза "весде в linux" настораживает - вы гдето откопали что многопоточность в других ОС организована лучше?
DragonFly BSD на это дело
DragonFly BSD на это дело упирает вроде как
Текстовый редактор vi имеет два режима работы: в первом он пищит, а во втором — всё портит.
насчет других ос
ну в хп на третем сервис паке опера на 2 ядра ложиться, а в лине нет. что это значит? что разробы оперы забили на линь? gcc с двумя ядрами работает, это я заметил. больше не нашел приложений которые 2 ядра использовали.
Протрите глаза, там разве что
Протрите глаза, там разве что разные дочерние процессы могут это делать
Текстовый редактор vi имеет два режима работы: в первом он пищит, а во втором — всё портит.
я б протер, вот только тогда
я б протер, вот только тогда не одному мне нужно этим заняться.
и вобще давайте без оскорблений.
вызываем диспетчер задач, запускаем оперу идем на эту страниц http://stalker-portal.ru/forums.php?m=posts&q=8665&d=0 и скролим до посинения, по графику виндо что 2 ядра подчти равномерно нагружаются. в лине только одно ядро грузит опера. я так понял что получаеться что разробы оперы забили на линь. правда я слышал что в SP3 негрософт нахемечил и в результате один процесс может равномерно грузить 2 ядра.
да и под оффтопиком прога есть кпу-контрол которой можно один процесс на 2 ядра разрулить, к примеру игры. сталкера так разруливал. еще раз глаза протирать не намерен.
Прошу прощения за резкость,
Прошу прощения за резкость, неправ.
Тем не менее, сомнения остаются.
С чего бы им это делать? С их политикой это очень маловероятно, такую интересную возможность добавлять в старую ОС: наоборот, надо бы склонять пользователей этой возможностью на сВисту. Не говоря уже о том, что наверняка это требует значительных изменений в самом ядре. Что при наличии новой приоритетной ветки делать как минимум неразумно.
В случае с Оперой надо проверять (возможности чего я не имею). Весьма вероятно, что грузит флэш, например.
Я же неоднократно видел сообщения типа "Опера грузит проц на 50%, то есть ядро целиком!" и не от линуксоидов.
Ну а с программой... В принципе, нагрузку-то распределить можно, только выигрыша во времени не будет (мне кажется). Я немного знаком с многопоточным программированием, и как-то смутно себе это представляю.
Текстовый редактор vi имеет два режима работы: в первом он пищит, а во втором — всё портит.
Пост потерся, лениво
Пост потерся, лениво перепечатывать.
Ты глубоко неправ, протирай галаза дальше. Я не поленился, пошел на родительский компьютер, где есть винда и пероверил, она правда грузит два процессора одновременно. Опера работает только на одном процессоре одновременно и постоянно переключаясь грузит два.
То что ты хочешь нормально не реализуется. Если ты готов купить 4х ядерник и полчить прирост в 1.2 раза то пожалйста. Остальным дешевле нанять программистов и получить прирост в 3 раза.
Quote:Если ты готов купить 4х
Я б себе и двух ядерник не покупал бы, просто одноядерные проци уже не выпускают.
вобщем ясно, если софт поддерживате многопроцессорность, тогда будет все ядра грузить, если нет, то не стоит париться.
Не выпускают, но в Питере, во
Не выпускают, но в Питере, во всяком случае, купить Athlon64 не представляет никакой трудности даже в "крутых" магазинах.
Хотя лично я считаю, что сейчас идеал для человека, не стремящегося к "производительности любой ценой", но планирующего подольше не обновляться — четырёхъядерный Phenom. Ибо задачи, сильно жрущие процессорное время (так, чтоб ядра не хватало), обычно хорошо распараллеливаются.
Текстовый редактор vi имеет два режима работы: в первом он пищит, а во втором — всё портит.
Во-первых на компьютере
Во-первых на компьютере одновременно работает много приложений, как минимум ядро ОС и пользовательское приложение, а как правило несколько десятков приложений. Они замечательно раскидываются по ядрам. Поэтому рост производительности будет.
Во-вторых там, где распаралеливание действительно нужно, его уже реализовали.
Так что покупка многоядерного процессора вполне оправдана. И я бы рекомендовал сейчас брать intel, сейчас они дают лучшую производительность.
Ставь нестабильный gcc с
Ставь нестабильный gcc с поддержкой omp и прописывай в cflags автоматическое распаралеливание. Но автоматическое распаралеливание никогда нормально не работает с более-менее сложными программами. Так что лучше забить и смириться, что если программист написал однопоточную программу, то и выполняться она будет в один поток.
P.S. Установка двух унитозов не означает, что процесс дефекации будет происходить в два раза быстрее.
Ламерочки, ламерочки...
Ламерочки, ламерочки...
> P.S. Установка двух унитfзов не означает, что процесс дефекации будет происходить в два раза быстрее.
+1
В WinXP работа с процессами настолько кривая, что однопоточный софт грузит 2 ядра :) Да, достижение! Microsoft рулит.
Секта Черных Пингвинов
http://blackpenguins.ru
Про унитазы..
+1
Скорее всего равномерно нагружает оба процессора, Я думаю это положительно скажется на температуре процессора (ядер). Имхо :)
Про унитазы..
Секта Черных Пингвинов
http://blackpenguins.ru
вообще я собираю все на
вообще я собираю все на анстейбл gcc
там реализована многоядреность интереснее.
в давние времена был такой стишок
если к жопе присобачить сопроцессор фирмы крей
можно гадить в трех сортирах сразу в двести раз быстрей
ага помню такой стишок
ага помню такой стишок =)
креи правда уже не те =) но все равно забавно
___________________________________________
Working on Gentoo for iPAQ hx4700 and Openmoko Neo Freerunner :-)
Если у вас компьютер с Windows, есть два выхода: выбросить компьютер в форточку или выбросить форточки с компьютера
Вообщето только процессор
Вообщето только процессор решает что выполнять на одном дре а что на двух. к нему инструкции идут сплошным потоком и если инструкции незвисимы (сильно упрощённое "если"), то процессор может пустить их на выполнение в разных ядрах. Можно написать однопоточный код, который будет выполняться на нескольких ядрах, многопоточный код будет выполняться на двух ядрах наверняка. Распаралеливать код может компилятор и сама программа. Компилятор это делает путём оптимзации под процессор, изменения последовательности кода и возможно создания нескольких потоков из однопоточной программы (вродебы флаг openmp в последних версиях компилятора). Сама программа распаралеливается такимиже способами, оптимизация под процессор происходит путём написания кода, явно использующего возможности процессора (флаги SSE).
Немалую роль тут играет и ядро (linux kernel). Оно должно быть сконфигурировано для работы с несколькими ядрами (CPU cores). Следует отметить проблемы с масштабируемостью: совершенно необязательно что вы получите прирост на двух потоках чуть меньше чем в два раза, чем больше ядер, тем меньше прирост. Однако она постепенно решается в последних ядрах.
кратко:
- немало программ вообще неможет использовать несколько ядер, решение - запустить несколько программ, которые обрабатывают разные данные
- другие программы постепенно оптимизируются под многоядерность, однако это нетривиальная задача
- у некоторых программ есть опция, в которой можно указать число потоков
- изучайте флаги программ, которые ставите (вы используете Gentoo или что?)
Цитата:Вообщето только
А это уже реализовали? Просто сделать такое крайне дорого в плане накладных расходов. Кажется интел какое-то время назад говорила, что хочет такое реализовать, но на новость, что уже реализовала я не натыкался.
Да, omp умеет автоматически распаралеливать, но далеко не все. По крайней мере на компиляторах ibm вот такой код:
Все равно будет однопоточным, несмотря на явную директиву. А вот такой:
распсралелится.
А разве sse влияет на многопоточность? Насколько я помню, тамт идет паралельная обработка на одном ядре.