Pengvin, можно посмотреть в сторону MPI библиотеки. По идее это стандарт de-facto для разработки параллельно работающих приложений и в ней должны быть описаны функции для работы с несколькими ядрами.
[Ответ]
Hopkroft 21:23 17.08.2008
Akad, сдается мне что тут имеет место псевдомультизадачность. Т.е. когда каждому процессу выделается определённый квант времени, а не реальная многозадачноть.
[Ответ]
Part!zan 22:01 17.08.2008
Сообщение от Akad:
Как иначе?
Они вполне могут работать не одновременно. То есть, работать работают, но, допустим, большую часть времени чего-нть ждут, не нагружая проц.
[Ответ]
Akad 22:26 17.08.2008
Сообщение от Hopkroft:
сдается мне что тут имеет место псевдомультизадачность.
Сообщение от Hopkroft:
когда каждому процессу выделается определённый квант времени
Реально нужно в школу в обязательном порядке вводить понятия многозадачности, что бы небыло таких постов.
Сообщение от Part!zan:
Они вполне могут работать не одновременно.
На однопроцессорной машине так всегда и происходит. Вообще ОС определяет как им работать.
Сообщение от Part!zan:
То есть, работать работают, но, допустим, большую часть времени чего-нть ждут, не нагружая проц.
Разные нитки ждут данных от других. Интересно посмотреть на программу, в которой такого не бывает.
[Ответ]
Pengvin 02:17 18.08.2008
Сообщение от Hopkroft: Akad, сдается мне что тут имеет место псевдомультизадачность. Т.е. когда каждому процессу выделается определённый квант времени, а не реальная многозадачноть.
эмм... псевдомногозадачность это Win3.11, Novel netware и тд. Квантование это кажется одна из наиболее прогрессивных идей многозадачности. С трудом представляю себе архитектуру с реальной многозадачностью это прям какой-то супер компьютер с 1000 процессоров где под каждую нить свой процессор отводится.
Если я не ошибаюсь то в QNX используется квантование, а это всетаки ОСРВ.
[Ответ]
Hopkroft 10:42 18.08.2008
Akad, слушай, может мы о разных вещах говорим. В твоем посте было написано что все потоки работают в реальном времени. В чем я немного усомнился, и написал что здесь скорее всего имеет место псевдомногозадачноть.
И при чем здесь школьный курс(кстати, эти вещи действительно нужно давать на уроках информатики, т.к. это достаточно важное понятие операционных систем), если часто под многозадачностью зачастую понимают псевдомногозадачность.
Чем тебе мой пост не понравился. Я как раз и писал что часто в операционных системах используется именно псевдомногозадачность а не многозадачноть. Не во всех конечно но во многих. Pengvin, да псевдо это WIn 3.11, но она по наследству передалась и в следующие поколения Windows.
[Ответ]
Akad 12:24 18.08.2008
Hopkroft, Если в программе есть 2 нитки, то задача ОС раскидать их по двум процессорам, если они есть, а если нет - выполнить последовательно на одном, предоставляя примерно равное процессорное время. Понятие псевдо или какой-то там еще мультизадачности ВООБЩЕ ни как не связаны с прикладным программированием. Программист создает потоки и максимум - синхронизирует их. А как они выполняются - проблема ОС. Хоть вообще в режиме эмуляции команд процессора.
Так что твое высказывание не имеет ни какого смысла. Для программиста все потоки работают одновременно.
[Ответ]
Hopkroft 13:09 18.08.2008
Сообщение от Akad:
Если в программе есть 2 нитки, то задача ОС раскидать их по двум процессорам, если они есть, а если нет - выполнить последовательно на одном, предоставляя примерно равное процессорное время.
Я тебе об этом же говорил. А также написал что их часто путают.
Сообщение от Akad:
Понятие псевдо или какой-то там еще мультизадачности ВООБЩЕ ни как не связаны с прикладным программированием.
Ты вот сначала терминологию почитай, а потом уже утверждения делай. Но скажу одно в прикладном программировании, на это мало обращают внимания. Если конечно не хотят сделать ставку именно на использование многозадачности. Как например в различных мультимедийных программах по работе с видео и звуком. Где это действительно важно.
Сообщение от Akad:
Для программиста все потоки работают одновременно.
Ладно, пусть для тебя все работает одновременно, ты же прикладной программист.
[Ответ]
Pengvin 16:09 18.08.2008
Hopkroft, можете привести вашу терминологию. В моей значаться только вытесняющая и невытесняющая многозадачность, а они все реализуются разделением процессорного времени.
[Ответ]
Hopkroft 17:05 18.08.2008
Pengvin, есть ещё и корпоративная многозадачность. Но она тоже относится к псевдопараллельной многозадачности. Это один из её типов.
Какая моя терминология вам нужна? Если вам интересно на что опираются мои высказывания то это книга Тонненбаума Современные операционные системы и сайт parallel.ru
Если же говорить о истинной многозадачности, то её можно увидеть на распределённых вычислительных системах, под управлением распределённых ОС.
[Ответ]
Part!zan 17:42 18.08.2008
Сообщение от Akad:
Разные нитки ждут данных от других. Интересно посмотреть на программу, в которой такого не бывает.
Имелась в виду одновременная работа потоков, с целью загрузки максимального количества процов. То, что у приложения много потоков, еще не значит, что оно вcе их использует одновременно.
[Ответ]
Hopkroft 18:29 18.08.2008
Сообщение от Akad:
Разные нитки ждут данных от других. Интересно посмотреть на программу, в которой такого не бывает.
Например, программа для вычисления интеграла. Каждый поток, берет свой интервал, и просчитывает его. Ожидание тут будет сведено к минимуму, но нужно будет использовать синхронизацию потоков, плюс защиту от тупиковых ситуаций. Но тут все равно, у тебя нужно будет ожидать завершения последнего потока со значением последнего интервала. Хотя реально распараллеливание вычисления задачи уже имеет место!
[Ответ]
Pengvin 19:32 18.08.2008
Hopkroft, под терминологией я имел в вижу что вы подразумеваете под псевдомногозадачностью, я понимаю под этим термином невытесняющую, а под многозадачностью реального времени вытесняющую, приоритетную.
ЗЫ: мой источник "Системное програмное обеспечение" Гордеев, Молчанов.
[Ответ]
Akad 21:07 18.08.2008
Сообщение от Part!zan:
Имелась в виду одновременная работа потоков, с целью загрузки максимального количества процов.
Пц. Просто. Все программы только и должны заниматься тем, что процы нагружать. Ява и питон форева!
Сообщение от Part!zan:
То, что у приложения много потоков, еще не значит, что оно вcе их использует одновременно.
А нахрена тогда многопоточность по твоему?
Сообщение от Hopkroft:
Например, программа для вычисления интеграла. Каждый поток, берет свой интервал, и просчитывает его. Ожидание тут будет сведено к минимуму
Сообщение от Pengvin:
можете объяснить дураку. Вот вы все пишете приложения поддерживают два ядра и не поддерживают 4. Существует API или какие либо ассемблерные команды, которые позволяют приложению исполняться только на двух ядрах, а другие два ядра оно в упор не видит и на них код нифига не поступит на исполнение. Просто я о таком не слышал еще.
Конечно, нет. Просто-напросто автор программы может написать ее так, что она сможет раскидать вычисления по двум нитям, но не сможет раскидать на четыре
Я собственными глазами видел это для некоторых фильтров MT-avisynthа. Например, портированный под avisynth фильтр "temporalsmoother" от Dividee на четырехядернике всегда загружает только два ядра
[Ответ]
Forrum 21:48 18.08.2008
И еще тут начали путать многозадачность с многопоточностью
Многопоточность - процесс распараллеливается на нити, каждое ядро вычисляет только одну нить. Время от времени они обмениваются данными. Правильная оптимизация под многопоточность - когда ядро, вычисляющее одну нить, ждет данные от другого ядра (с другой нитью) минимальное время. Неправильная оптимизация - когда одно или несколько ядер долго ждут данные от другого ядра. В этот момент производительность падает, конечно
А многозадачность - когда одно ядро какой-то квант времени обслуживает одну задачу, потом другую и т.п.
Операционная система должна уметь "подружить" многозадачность и многопоточность. Например, если вы на четырехъядернике запускаете четыре приложения одновременно, было бы разумно раскидать их по четырем ядрам (т.е. организовать многопоточность). Но если система будет тупить, она запустит эти приложения на одном ядре в режиме многозадачности, а три других ядра будут простаивать
[Ответ]
Part!zan 22:33 18.08.2008
Сообщение от Akad:
программы только и должны заниматься тем, что процы нагружать
А что, нет, что ли? Или проги должны молча отжирать память и нифига не делать?
Сообщение от Akad:
А нахрена тогда многопоточность по твоему?
Хотел ответить "шоб було", но сдержался... Потоки не обязательно выполняются одновременно. Поток может ждать чего-нть. И иногда он может ждать этого "чего-нть" довольно долго. Так понятнее? У многих приложений есть куча потоков, но реальные вычисления происходят только в одном-двух. Надо ли говорить, что это приложение нифига не масштабируемое, несмотря на свою многопоточность?
Че-то я чувствую, дискуссия куда-то не туда пошла... А все началось с простого вопроса...
[Ответ]
Akad 00:11 19.08.2008
Короче. Для танкистов. Сейчас существует очень много программ, использующих многопоточность. Кто купил 4-х ядерный целерон и теперь плачет, что у него все тормозит - это его личные половые трудности. Программа НЕ ДОЛЖНА нагружать процессор(ы) всеми нитками равномероно. Это только в больном мозгу тестера такая фантазия может возникнуть. У программы есть мин требования. И все.
Единственное исключение - мат. вычисления. Здесь как правило все нитки загружают проц по максимуму. Хотя широкое применение этому есть только в RTS играх и в архиваторах (да и то не во всех).
[Ответ]
Part!zan 15:08 19.08.2008
Короче, для летчиков. Покурите последние тесты четырехядерников - поможет. Узнаете много нового о современном софте и о том, как у него "все нитки загружают проц". Заодно, узнаете о большом количестве программ, которые не явлются ртс-играми и архиваторами, однако многоядерность успешно (или не очень) используют (или не используют, а должны бы).
ЗЫ.
Кстати, я ни разу не говорил, что программа должна постоянно грузить проц всеми потоками.
[Ответ]
big_zlo 13:36 22.08.2008
Сообщение от Hopkroft: Pengvin, есть ещё и корпоративная многозадачность. Но она тоже относится к псевдопараллельной многозадачности. Это один из её типов.
Какая моя терминология вам нужна? Если вам интересно на что опираются мои высказывания то это книга Тонненбаума Современные операционные системы и сайт parallel.ru
Если же говорить о истинной многозадачности, то её можно увидеть на распределённых вычислительных системах, под управлением распределённых ОС.
Мне известно два типа многозадачности в ОС. Кооперативная - ОС планирует потоки, но поток сам должен вернуть управление ОС (Win 3.11, MacOS 9). Вытесняющая - ОС планирует потоки и время их выполнения (нынешние ОС).
Сообщение от :
Сообщение от Pengvin
можете объяснить дураку. Вот вы все пишете приложения поддерживают два ядра и не поддерживают 4. Существует API или какие либо ассемблерные команды, которые позволяют приложению исполняться только на двух ядрах, а другие два ядра оно в упор не видит и на них код нифига не поступит на исполнение. Просто я о таком не слышал еще
.
Да, существует. SetProcessAffinityMask (win32 sdk) - указывает на каких процессорах может исполняться процесс.
Сообщение от :
И еще тут начали путать многозадачность с многопоточностью
Многопоточность - процесс распараллеливается на нити, каждое ядро вычисляет только одну нить. Время от времени они обмениваются данными. Правильная оптимизация под многопоточность - когда ядро, вычисляющее одну нить, ждет данные от другого ядра (с другой нитью) минимальное время. Неправильная оптимизация - когда одно или несколько ядер долго ждут данные от другого ядра. В этот момент производительность падает, конечно
А многозадачность - когда одно ядро какой-то квант времени обслуживает одну задачу, потом другую и т.п.
Операционная система должна уметь "подружить" многозадачность и многопоточность. Например, если вы на четырехъядернике запускаете четыре приложения одновременно, было бы разумно раскидать их по четырем ядрам (т.е. организовать многопоточность). Но если система будет тупить, она запустит эти приложения на одном ядре в режиме многозадачности, а три других ядра будут простаивать
Многопоточность, в ОС - возможность ОС, планировать и исполнять потоки. Моногзадачность в терминах ОС трактуется так же.
В терминах процессора, многозадачность - возможность переключаться между задачами с сохронением состояния процессора, для дальнейшего возобновления выполнения задачи.
Хотя задача процессора и поток ОС имеют много общего это разные понятия и в связи с этим не стоит, в рамках ОС, нагружать эти понятия дополнительными смыслами.
[Ответ]
Forrum 20:57 29.08.2008
В терминах процессора, в терминах ОС... не надо усложнять!
[Ответ]
meridian 16:56 10.10.2008
В С++ под Visual Studio 2005 есть OpenMP, это так, для справки... Помоему пишется так
#pragma OpenMP
код для распределния на ядра
#pragma end
чето как-то так...))
[Ответ]
A-Maverick 15:37 26.10.2008
Сообщение от Akad:
Короче. Для танкистов. Сейчас существует очень много программ, использующих многопоточность. Кто купил 4-х ядерный целерон и теперь плачет, что у него все тормозит - это его личные половые трудности. Программа НЕ ДОЛЖНА нагружать процессор(ы) всеми нитками равномероно.
Ошибаетесь, как раз-таки максимальная производительность достигается при максимальной загрузке всех ядер.
А вот то, что некоторые программы не способны этого достичь - это недоделки разработчиков.
Не оптимизированная под многопоточность программа на PIV D 3600(с двумя ядрами) будет работать медлнее, чем на P2400. Но стоит нормально расписать загрузку по потокам, как производительность может возрасти в 2-3 раза.
[Ответ]
Dream Worker 21:37 27.11.2008
В моей практике огромный плюс от многоядерного камня - это когда пускаешь на корыте виртуальную машину (наблюдал WMWare с 1 запущенной виртуальной осью).
На 1 ядерном писюке работать нормально можно только либо в хостовой оси либо в виртуальной - в зависимости от настроек приоритетов виртуальной оси.
С 2х ядерным камнем - без проблем. Если же в виртуальной машине крутится сразу несколько виртуальных осей (к примеру это сервер на котором стоит виртуальная машина, в которой работают юзверя(по сети, юзая терминалы) ), то малопроцессорной системой там вообще нечего делать.
[Ответ]