Курилка wrote: > Чтот ты такое хитрое загнул, ну не покатит эрланг для числодробилок > И про один поток (процесс?) — это тоже "трудно", на Эрланге изначально > декомпозиция будет иначе выглядеть, хотя в принципе тебе нельзя > запретить создать всего 1 поток который всё будет делать, но это, > знаешь, будет примерно также как ООП программа написанная в рамках 1 класса.
Не надо недооценивать изобретательность индусов
Здравствуйте, mik1, Вы писали:
M>Ну мы работаем над авт. распараллеливанием в нашем ФЯ. Благо модель языка для этого правильная. Правда, язык на данный момент под вычисления заточен, а не под GUI. Могу, если интересно, черкануть немного об этом.
Это очень интересно и об этом нужно не немного черкать, а писать статейку, чтобы не только пара десятков человек дочитавшие до этого места смогли сказать, что краем уха слышали что-то такое, а чтобы основная масса наших посетителей была в курсе.
По-моему, тема автоматического распараллеливания вычислений в скором времени станет самой злободневной, и уж точно это самый что называется хкй-тек. И тем отраднее, что знаимаются этим наши соотечественники.
В общем, с удовольствием поможем в написании и публикации подобного материала.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, Mamut, Вы писали:
M>Коротко говоря: в течение пяти лет Интел предлагает интегрировать невероятное количество процессоров на одном чипе (80 в прототипе) и объединить каждый с собственной памятью.
M>Что, собственно, приводит к следующему вопросу: А что у нас, собственно, способно прямо сейчас, убудчи запущенным на таком монстре, воспользоваться такой мощью? И что сможет в ближайшие пять лет?
Здравствуйте, VladD2, Вы писали:
G>>Он в настоящий момент проходит государственные испытания,
VD>"Он" называется не Е2К, а Эльбрус <b>Е3М</b>.
VD>Ничего, ничего. Мне простительно. Я все же не работаю в конторе разнабатывающей чипы. А вот то что ты не знаешь название чипа о котором говоришь — это немного странно.
Ты перепутал вычислительный комплекс для военных, который делает МЦСТ, с микропроцессором. Ничего, это простительно — ты ведь и в самом деле не работаешь в конторе, разрабатывающей чипы. Многие "процессором" системый блок называют, это нормально.
Для тех, кто эту ветку читает, я дам ссылки на сайт производителя. Может кому интересно будет. Ты тоже взгляни.
Здравствуйте, kan, Вы писали:
kan>Ограничение лишь из-за того, что в С++ нет поддержки ф-ций с переменным числом аргументов (я сказал, что нет! ).
...а я сказал, что нас-рать. Ибо есть overloading. И никто не мешает поределить функцию с одним параметром, затем — с двумя, затем — с тремя. Далее — насколько позволяют ресурсы, терпение и чувство меры.
Впрочем, нашшот операторов "||" и "&&" чегой-то-там Мейерс против имел. Как ни странно, я с ним вполне согласен. Ибо, если я скажу "if( future1 && future2 && non_future )" случится черт-те что с весьма неожиданными эффектами.
kan>Правда с while непонятно что сделать. Правда я и не понимаю что ты там хочешь делать...
"пока есть хотя бы одна 'живая' футура", вертимся.
kan>Видимо, тебе хочется что-то типа timed_wait но чтобы таймаут был распределён на всех... но вроде можно обёртку написать,
Да-а-а. Именно такое мне и хочется. Но pthread-ы (по образу и подобию которых смоделирован boost::thread) это не поддерживает. Делать сие "на коленке" тоже не выход ибо поимеешь busy-wait.
kan>Потом, можно соглашение сделать, что "зависать" не будет, а будет по таймауту отваливаться с ошибкой.
Оки. Теперь смотрим что получается. Одна футура сдохла по исключению. Началась раскрутка стека "материнской" нитки. А что делать с остальными (еще живыми) футурами которые оказались вдруг не нужны? Способа корректно придушить этих "сирот рязанских" нету. Что бум делать? Душить их силой, рискуя уничтожить всю программу или ждать их "естественной" смерти (неизвестно когда), рискуя тем, что пул потоков (в конце концов) окажется весь оккупирован этими "сиротами" и приложение выродится обратно в однопоточное? Или начнем увеличивать пул и с риском использовать все адресное пространство и угробить всю программу куда более странным способом?
А мораль такова, что boost::thread не предусматривает никакого (Никакого. НИКАКОГО!) способа убиения задачи. Ни синхронного ни асинхронного. So is только-что-предложенный std::thread. Следовательно, прибить асинхронную таску НЕ-ВОЗ-МОЖ-НО. С чем я имею вас и поздравить.
kan>future не панацея для сабжа, а вполне чёткая концепция, удобная в определённых ситуациях.
О! "Сей Меч позволит вам без труда победить трусливого и безоружного противника". Побежаль покупать. Вы за мной!
>> Марал, до тех пор пока в C++ не будет юзабельной лямбды, futures уготовано место рядом с >> std::for_each, которым все советуют пользоваться, но никто не хочет kan>Мелочи реализации...
"Дьявол — в мелочах" (с) Молот ведьм.
>> Про требования к памяти скромно помолчим kan>Фигня какая, замени на auto_ptr
Пасиб за дельный совет. А вы купите пистолет. Когда будете его испытывать, не забудьте посмотреть в ствол — может пуля и не собирается вылетать?
__________
16.There is no cause so right that one cannot find a fool following it.
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, Gaperton, Вы писали:
G>>Эта мода (VLIW, в случае Itanium) — уже в прошлом. У такой архитектуры есть ряд недостатков, один из которых связан, например, с тем, что широкий VLIW плохо кладется на кристалл — у него широкие шины. Это раздувает кристалл, делая его дороже, и снижает тактовые частоты из-за длинных связей. Например, пресловутый E2K, о котором много говорили, работает на практике (а не на бумаге) на частоте 300 МГц.
VD>Нет в природе никакого E2K.
Он в настоящий момент проходит государственные испытания, и в ближайшее время будет принят на вооружение. Дизайн в собственности МО РФ (которое и финансировало разработку), на открытый рынок продаваться не будет. Твои соображения по поводу чип-дизайна конечно очень любопытны, особенно где ты со знанием дела пишешь про проблемы с производственной и инженерной базой, но извини, я их поскипал. Исключительно из скромности. Где мне в такой мощной философской дискуссии участвовать, когда такие зубры чипостроения в бой пошли .
Здравствуйте, Mamut, Вы писали:
M>Что, собственно, приводит к следующему вопросу: А что у нас, собственно, способно прямо сейчас, убудчи запущенным на таком монстре, воспользоваться такой мощью? И что сможет в ближайшие пять лет?
Эх, а я бы не отказался. 80, не 80, но штук 8 точно не помешало бы. Вот запускаю сейчас дефрагментацию сразу на 3 vmwares, и эти сволочи сожрали все 100% на моих dual core. А было бы 8 процов, я бы ещё пару vmwares запустил
Если нам не помогут, то мы тоже никого не пощадим.
M>In the SMP version of the Erlang virtual machine, there can be many process schedulers running in separate OS threads. As default there will be as many schedulers as there are processors or processor cores on the system.
M>Взято здесь
M>Ну что я могу сказать по этому поводу ...
Ключевое слово здесь "in separate OS threads". То есть Эрланг точно так же помрет на 20-ом процессоре как Ява или С++ если приложение поднимается на Виндовс или Линукс. Так что у Эрлэнга есть чисто гипотетическое приемущество — модель. Но это уже не мало.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, apple-antonovka, Вы писали:
AA>>>В моем случае я этому научился еще в 10м классе кода на асме под спекки написал этакий шедулер потоков. IT>>А сейчас сходу сможешь быстро разобраться что делается в твоих же собственных исходниках? AA>Запросто, Но только не в том шедулере — во первых он пропал во вторых асма спекки я уже почти не помню.
Жалко, конечно, что исходничков не осталось, а так бы запросто. Гы-гы.
IT>>А потому, что три строчки плоско-функционального кода легко превращаются в тридцать, если писать многопоточно на современных средствах разработки. Т.е. по сравнению с прямолинейным кодом это на порядок сложнее. Но, есть мнение, что надо не программистов в неправильном мышлении упрекать, а инструменты совершенствовать.
AA>а 30000 строчек функционального кода зачастую легко превращаются в 20000 грамотным рефакторингом.
При чём тут вообще рефакторинг? Мы разве о нём говорим? Или главное о чём-нибудь спорить лишь бы спорить? Бывало приходилось 20000 строк ужимать в 100 и что с того? Мы сейчас многозадачность обсуждаем или кривой дизайн?
AA>Но вообще говоря не в кол-ве строчек сложность кода выражается.
В строчках. Запутанность кода выражается как раз в строчках. От запутанности зависит сложность. Код многопоточных приложений запутан и нетривиален. В них как правило много мусора, напрямую связанного с синхронизацией, а сам алгоритм размазан по коду и выглядит нелинейно.
AA>Хм... Три раза прочитал эту вашу фразу и так и не понял зарытого смысла
Смысл в том, что сапёрной лопаткой за пять минут трудно выкопать траншею длиной в сто метров. Катарпиллер своим клыком это делает быстрее и не напрягаясь в вечной мерзлоте.
AA>А вот интересно как вы будете прямолинейно обрабатывать запросты в БД от одновременно 1000 юзеров?
Я их вообще никак не буду обрабатывать. БД для меня чёрный ящик, который специально обученные ребята вылизывают годами.
И вообще, я говорю совсем о другом. Давай вернёмся назад. Начал я вот с чего:
AA>А так народ и выходит из ВУЗов с плоско-функциональным мышлением в области программирования. И хорошо еще если он потом поймет хотябы как правильно юзать ООП.
Так вот. Дело не в мышлении. Дело в инструментах. Одними и теми же руками с помощью сапёрной лопатки и с помощью катарпиллера можно сделать совершенно разный объём работ. Инструмент, упрощающий решение сложных задач распаралеливания и синхронизации, сводя их к простым линейным алгоритмам, вполне может увеличить производительность программиста в сотни раз. Только это должен быть умный инструмент.
Давай на примерах. Допустим у нас есть простая форма с двумя TextBoxes и одной кнопкой. По кнопке запускается длительный процесс, который в качестве параметра берёт текст из первого бокса, а результат помещает во второй.
У этого примера есть один существенный изъян. При действительно длительном процессе UI приложения перестанет подавать признаки жизни и приложение будет выглядеть подвисшим. Для того, чтобы этого не происходило длительный процесс необходимо запускать в отдельном потоке. Но здесь, есть одно НО. WinForms не является дружественной средой для многопоточных приложений, и доступ к элементам формы из другого потока закончится исключением. Чтобы этого не происходило придётся переписать наш линейный алгоритм следующим образом (вариант с асинхронными делегатами я даже приводить не буду):
Итак, от нашего линейного алгоритма не осталось и следа. И это пока что очень примитивный вариант синхронизации доступа к UI.
Но ещё не всё потеряно. Если взять немного более продвинутый инструмент, то вернуть линейность алгоритма вполне возможно. Вариант с замыканиями может выглядеть примерно так:
void button1_Click(object sender, EventArgs e)
{
string text = textBox1.Text;
WaitForm waitForm = new WaitForm();
new Thread(delegate()
{
Exception exception = null;
string result = null;
try
{
result = LongProcess(text);
}
catch (Exception ex)
{
exception = ex;
}
Invoke(delegate()
{
waitForm.Close();
if (exception == null)
textBox2.Text = result;
else
MessageBox.Show(exception.Message);
});
}).Start();
waitForm.ShowDialog();
}
Естественно, выполнение алгоритма не линейно. Но по крайней мере, он выглядит линейно и мы избавились от замусоривания класса лишними переменными и убрали два метода. Это ещё конечно не катарпиллер, но уже и не сапёрная лопатка. Я бы это отнёс к уровню совковой лопаты.
А теперь пофантазируем, что мог быть сделать катарпиллер. Допустим, у нас имелась бы возможность сказать компилятору, например, с помощью атрибутов, что доступ к объектам наследникам класса Control может осуществлятся только из потока UI. Предположим также, что у нас есть некая языковая конструкция, которая указывает компилятору, что определённая часть кода должна выполняться в новом потоке. Вот как мог бы выглядеть гипотетический код:
Т.е. если бы нам не надо было открывать/закрывать WaitForm, то этот код практически не отличался бы от первоначального. Компилятор мог бы сам позаботится о вызове Invoke и чтении/записи данных в правильном потоке и в нем же вызвать MessageBox.Show.
Возможно ли сделать такой инструмент? Не знаю. Фактически от ответа на этот вопрос зависит ответ на вопрос будет ли толк от 80 процессоров на одном компьютере. В автоматическое распаралеливание пока верится с трудом. А вот вариант с подсказками компилятору где именно надо паралелить и что именно синхронизировать может оказаться вполне рабочим. Остальную рутину он должен выполнить сам. Думаю, это вполне возможно. По крайней мере, сообразительность компиляторов в случае с замыканиями и yield return вселяет надежду.
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте, c-smile, Вы писали:
CS>Ясно. Типа девять теток родят мальцов в девять раз быстрее. ... Ну не в девять а нелинейно скажем в восемь.
Аналогия совершенно неуместная.
CS>Далеко не все задачи можно параллелить короче.
Параллелить можно любые задачи. Другое дело, что если много зависимостей по данным (много мелких вычислений требующих резальтата предыдущих), то эффективность распараллеливания снижается. Однако это чистая теория не учитывающая реалий жизни. А реалии таковы, что основные проблемы с распараллеливанием упираются не в алгоритмы, а в стиль и средства разработки. Современные ИЯ пороздают зависимости по данным не в виду насущьной необходимости, а просто по традиции. А отсуствие умных компиляторо сопособных выявлять места распараллеливаемые автоматом приводит к тому, что распараллеливание превращается в ночной кошмар для программиста.
CS>Распаралелливание это проблема не количества процессоров а проблема алгоритмов.
Ага. Но не прикладных, а алгоритмов компилторов и рантаймов. Распараллеливание — это автоматизируемая задача. А лично я считаю глупым перекладывать на мозг человека то что можно сделать автоматически.
CS> Которые еще предстоит разработать. CS>Т.е. ты хоть обложись камнями но "первый же залетевший GC разрушит цивилизацию"
Это не так. И уже есть средства разработки демонстрирующие неверность данного суждения.
Таки если использовать некоторые методики и специально заточненные на распараллеливание средства разработки, то можно существенно облегчить этот процесс.
На 1-8 процессорах человек еще будет довольно эффективен в смысле качества распараллеливания, на на 80 будет такой уровень косвенности, что даже супер мозгов не хватит. А так как частоты процессоров уперлись в потолок, то разработка средств разработки автоматически распараллеливающих вычисления является неизбежностью. Так что дело только за временем. Рано или поздно мы обязательно сменим сегодняшние средства разработки на них.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, Mamut, Вы писали:
M>Что, собственно, приводит к следующему вопросу: А что у нас, собственно, способно прямо сейчас, убудчи запущенным на таком монстре, воспользоваться такой мощью? И что сможет в ближайшие пять лет?
Ну если бы все сервисы что работают сейчас в Windows "в заду" ушли на свои собственные ядра никому плохо бы не было.
Здравствуйте, alexeiz, Вы писали:
A>Нужны языки программирования и библиотеки, облегчающие написание многопоточного кода. A>Могу сказать, что есть для C++. Futures обсуждаются для включения в стандарт C++. У Herb Sutter'а есть проект Concur.
С++ в многопоточном мире точено вымрет. Большего бреда чем битые указатили при 80 камнях придумать очень тяжело.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
AA>> Больше процессоров — быстрее будут исполняться всяческая CGI хренотень, которой запускается много потоков VD>Это наивное мнение. Займись этим по плотнее и ты увидишь, что масштабирование SMP-систем совершенно не линейное.
Линейное или нет другой вопрос. Тут скорее сказывается ограничения аппаратной архитектуры SMP, но они преодолимы. см NUMA.
AA>> (по потоку на клиента) и каждому из которых надо много CPU. Будет одновременно обрабатываться 80 клиентов скриптами на каком нить перле — будут загружены все 80 процессоров. Будет одновреенно 1000 клиентов сидеть (довольно скромная цифра для веб сервера кстати) — тем лучше.
VD>Без специальных язык, специальных библиотек и специальных СУБД клиенты выстроятся в очередь, а процессоры будут заняты обработкой дэдлоков и синхронизацией.
СУБД крутится в одтельном процессе а то и на другом сервере что еще дает доп преимущество. а процессоры будут заняты обработкой дэдлоков
Спасибо. Посмеялся
AA>> В "быту" это мультимедиа, архивация, меньше это нужно играм (которые вобщето в последнее время на 3D нагрузку только дают в основном).
VD>3D, к сведению, при хорошем исполнении вообще не должно грузить ЦП. Оно должно грузить движок физики и видиокарту. Вот там параллелизм уже есть и сейчас. Только делается от совсем по другому.
угу шейдеры всякие и тп. Но сдается мне что делается оно далеко не только _там_.
AA>> Еще можно вспомнить терминальные решения — это когда сидят 50 юзеров через терминалы на одной винде и работают в вордах/ехелях. Там вообще рай для многопроцессорных систем.
VD>Ты много видел то терминал-сервисов с 50 одновременно вкалывающими товарищами?
Достаточно. Для 1С это например рекомендуемое решение всех проблем
Здравствуйте, Mamut, Вы писали:
M>Intel pledges 80 cores in five years
M>Processor, memory may marry in future computers
M>Коротко говоря: в течение пяти лет Интел предлагает интегрировать невероятное количество процессоров на одном чипе (80 в прототипе) и объединить каждый с собственной памятью.
M>Что, собственно, приводит к следующему вопросу: А что у нас, собственно, способно прямо сейчас, убудчи запущенным на таком монстре, воспользоваться такой мощью? И что сможет в ближайшие пять лет?
Нужны языки программирования и библиотеки, облегчающие написание многопоточного кода.
Могу сказать, что есть для C++. Futures обсуждаются для включения в стандарт C++. У Herb Sutter'а есть проект Concur.
Здравствуйте, AndrewVK, Вы писали:
AVK>Здравствуйте, Gaperton, Вы писали:
G>>Во вторых — сейчас становится модно исключать этот блок из дизайна процов, заменяя его аппаратной многопоточностью. Так устроен, например, UltraSPARC T1 ("Niagara"). Так что готовьтесь к явному многопоточному программированию.
AVK>Ну, Intel (в случае Itanium) полагается все же на компилятор.
Эта мода (VLIW, в случае Itanium) — уже в прошлом. У такой архитектуры есть ряд недостатков, один из которых связан, например, с тем, что широкий VLIW плохо кладется на кристалл — у него широкие шины. Это раздувает кристалл, делая его дороже, и снижает тактовые частоты из-за длинных связей. Например, пресловутый E2K, о котором много говорили, работает на практике (а не на бумаге) на частоте 300 МГц. По критерию "производительность с квадратного миллиметра" он далеко не блещет. А это — основное в нашем деле. То же самое можно сказать о Трансмете — это тоже довольно прямолинейный VLIW, у которого были проблемы с разгоном по той же причине. С Itanium поступили умнее — там не совсем обычный VLIW, там инструкции бьются на короткие бандлы (штуки по три) которые объединяются в большие бандлы — короче, там люди реально думали о производительности. Вероятно, Itanium — максимум из того, что можно выжать из VLIW.
Плюс, реальный эффект от VLIW имеется только на числодробильных задачах. Вот, например, для процессоров обработки сигналов (DSP) VLIW очень хорош, и применяется давно и успешно. Itanium хорош для научных и инженерных рассчетов с плавающей запятой, а на бизнес задачах — плох (проигрывает по критерию "производительность на бакс" мультитредным процам). В свою очередь, Ниагара очень слаба на плавающей запятой, — она заточена под бизнес-задачи. Надо понимать разницу .
Короче, сейчас народ в массе своей решил делать не так. Нужно делать много сравнительно простых процов — это понятно сейчас всем, и в AMD, и в Intel, и в Sun, и в NVidia, и в ATI. Именно так, кстати, будут выглядеть выдеокарты следующего поколения — выйдут анонсы, увидите.
Здравствуйте, apple-antonovka, Вы писали:
AA>В моем случае я этому научился еще в 10м классе кода на асме под спекки написал этакий шедулер потоков.
А сейчас сходу сможешь быстро разобраться что делается в твоих же собственных исходниках? Я думаю, что не сходу. А почему?
AA>А так народ и выходит из ВУЗов с плоско-функциональным мышлением в области программирования. И хорошо еще если он потом поймет хотябы как правильно юзать ООП.
А потому, что три строчки плоско-функционального кода легко превращаются в тридцать, если писать многопоточно на современных средствах разработки. Т.е. по сравнению с прямолинейным кодом это на порядок сложнее. Но, есть мнение, что надо не программистов в неправильном мышлении упрекать, а инструменты совершенствовать.
Это прекрасно видно на примере FP. Пока "научившиеся ещё в 10м классе" занимались измерениями размеров своего головного мозга, толку было мало. А стоило появится нормальному инструменту с человеческим лицом и вдруг оказалось, что ничего такого волшебного в FP нет.
Тоже самое касается и многопоточности. Проблема не в понимании как таковом. Проблема в понимании увеличивающейся на порядок сложности кода, выполняющего задачу многопоточно, по сравнению с тем же кодом, но делающем тоже самое прямолинейно.
... << RSDN@Home 1.2.0 alpha rev. 0>>
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте, Дьяченко Александр, Вы писали:
ДА>Здравствуйте, VladD2, Вы писали:
VD>>А возможно через года 3 будет прорыв в некой области и про многоядерность снова забудут на много лет. ДА>В какой? (Просто сильно интересно)
Алгоритмической. Например научатся бесконечные циклы оптимизировать и выполнять за один такт. А еще появится набор инструкций "Office Now!", в котором будут инструкции типа RunWindows, RunNotepad, RestartWordExcelOrAccess, RunKDE и т.д. (все они будут выполняться за 1 такт, как вы понимаете). Кэши будут безразмерные, поэтому память ставить не потребуется, ибо все уже в кэше. Итдитп.
Здравствуйте, apple-antonovka, Вы писали:
AA>>>Про OpenMP слыхали? http://www.openmp.org/drupal/node/view/11#Q1 VD>>Слыхали, слыхали. А вы слыхали о трудностях заката солнца вручную? AA>А вы я вижу слыхали про широко используемый в рекламе прием логической привязки независимых явлений. Типа выпил СуперКолу и все бабы твои
Нет, а что хочется его применить?
OpenMP — то не автоматическое распараллеливание, а полуавтоматческое. Это конечно проще чем полный ручник, но до полноценной автоматики ему как до пикина раком. При этмо код засоряется хинтами компилятору. Что тоже не фантан.
Меж тем побочные эффекы и особенно фокусы с указателями могут привести к такому, что потом не расхлебаешь. Идея Эрлэнговских лайт-процессов и активных объектов — это полный автомат. Хотя и не лишенный недостатков.
AA>Знаю. Потому так я балуюсь исключительно для себя Зачастую это кстати дает помимо замедления еще и значительное упрощение архитектуры.
Ой сомневаюсь я на счет уерощения. Скорее усложнение. Все же не рассчитаны современные языки на параллелизм. По крайней мере "зачастую" — это явная натяжка.
VD>>Да и что в этом интересного? AA>хз. наверно тем что такой стиль более приближен к нашей повседневной реальной жизни
Серьезно. Ты способен одновременно делать несколько дел? Попробуй ради хохмы вертеть левой рукой по часовой стрелке, а правой ногой по часовой. Когда привыкнешь к этому попробуй на ходу поменять направление вращения. Уверяю тебя эффект будет потрясающий.
Так что в жизни параллелизм он в осноном для разных могов, а не для одного. И при этом мозги общаются сообщениями причем для каждого из мозгов сообщения последовательны. А это как раз идея активных объектов/лайт-процессов.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, c-smile, Вы писали:
CS>>Кому нужно?
VD>Тем кто хочет чтобы их приложения реально использовали мощь множества процессоров.
Т.е. автору приложения?
А если пользователю то как раз изначальный вопрос и был: какие пользовательские задачи эта мегапроцессорность решает?
Сервера — да, понятно. У Гугла вон их много. И ясно для чего.
Попробуй продать идею "Вам надо купить 80-ти ядерный ноутбук вместо старого" моей жене например...
Или еще кому. Это и будет ответ на вопрос.
В играх наверное будет нужно.
А нейронные сети и пр. нужно делать ... на нейронах, а не на процессорах.
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, FR, Вы писали:
FR>>Я имел в виду что время жизни игры очень маленькое, и поэтому игры обычно первыми и подхвтывают новые аппаратные возможности.
VD>Ты путашь игры и их движки. Игры действительно живут как феерверк. А движки эволюционируют годами. Тот же Q4 эволюционировал с Дума. Уж точно с Q1. В бетах Doom 3 были нехилые куски из Q3.
Очень большой процент игр пишется на своем движке. Да и то что есть куски кода из старых движков ничего ни показывает. Тот же думовский движок принципиально отличается от q2 — q3.
FR>>Сейчас практически все большие игры пишутся с учетом распаралеливания, так как у нового поколения игровых приставок процессоры многоядерные.
VD>Языком они пишутся. Да и твои представления о консольных системах очень поверхносные. Там не процессоров много. Тот же Целл это скорее один процессор с кучей сопроцессорв.
Пишутся и не языком, притом давно, сразу как появился гипертретрединг на P4.
Про консольные системы не надо, повторно грубить не буду, но поинтерисуйся какие процессоры используются в xbob360 да и в Nintendo Wii тоже вроде есть гипертрединг. Cell конечно особняком, но даже для него стиль OpenMP вполне работает.
VD>В общем, факт в том что нет ни одной игрушки получающей реальное приемущество от второго камня. Хотя, сам понимаешь, по уму обязаны получать. Вопли о параллелизме были еще во времена Q2. Но воз и ныне там.
Есть, многие стратегии, например тот же периметр, если вспомню дам ссылку, там было очень приличное ускорение.
А для современных шутеров на самом деле второй камень ничего ни даст, они почти все в видео упираются.
FR>>Да ничего там сильно менять не надо, в играх полно вещей которые естественно паралелить.
VD>Кон надо менять. Ладно мне надоело. Все равно ты будешь из приципа спорить с каждым моим словом. Спорь дальше.
Да нет у меня такого принципа, просто у нас уровень упертости близкий
Здравствуйте, VladD2, Вы писали:
K>> Ну да. Специально. А кто мешает сейчас всем разрабатывать специально?
VD>Сложноть. Ее бы без заморочек на распараллеливание осилить.
Так не бывает. Халявы для ПТУшников в IT больше не будет.
VD> А распараллеливание возводитэ сложность в квадрат.
Нет. Всего лишь умножает на константу. Это если message passing. Для традиционной модели, с общей памятью, блокировками и прочим кошмаром — то да, даже не в квадрат а порой в степень до 10 и выше.
K>> Текстовым редакторам вообще никакой производительности не нужно.
VD>Глубоко ошибашся. Там как раз все вылизывается до нельзя. Да и фунциональностью жертвуют ради этой самой скорости.
Примеры можно? Не видал я в коде текстовых редакторов следов сумасшедшей оптимизации. Ни в vim, ни в emacs. Других текстовых редакторов вроде бы и не существует.
K>> Прошло то время, когда emacs расшифровывался как "eight megabytes, constantly swapping".
VD>Времена всегда одинаковые. На повышение вычислительных ресурсов индустрия всегда отвечает повышением сложности решений, что порождает как объективное повышение выч. потребностей, так и вызванные повышеннием абстракции.
Ну да, сейчас у меня emacs в среднем до 30-40Mb жрёт. Не серьёзно.
VD>Когда-то ООП считалось жудким оверхэдом. Сегодня постоить модель АСТ или модель контента редактируемого документа — это совершенно нормальное явление. В будущем все будет только усугубляться. Абстрация будет становиться все более высокой, что соотвественно неминуемо будет приводить к накладным расходам. Единственный способ боросться с такими рсходами — это повышать интеллектуальность средств разработки.
Я бы не взялся так с ходу судить, какая из тенденций повышения интеллектуальности средств разработки доминирует — та, что ведёт к росту оверхеда, или та, что элеминирует ненужные промежуточные уровни абстракции, тем самым лишь снижая потребности в вычислительных ресурсах. Есть все основания полагать, что вторая составляющая тренда имеет немало шансов перевесить первую, кстати.
K>> Игрушки разпараллеливаются довольно легко — у них обычно модульность на высоте, достаточно разпараллелить графический движок, и вот уже ощутимый прирост в скорости готов.
VD>Факты говорят об обратном. Поака что ни один шутер не побежал быстрее на двух или четырех камнях.
И не побежит, пока четырёхголовые железки не станут популярнее.
VD> "Легко" — это на словах. А в реальной жизни все не так просто. Да ивыигрышь от одного каманя обычно компенсируется затратами на синхронизацию (коих раньше просто не было).
Именно. 4 — это уже игра стоит свеч, а на две головы графику разпараллеливать смысла нет.
VladD2 wrote: > C>Во-первых, никто не мешает запустить ДВЕ копии интерпретатора Эрланга, > C>на разных процессорах и связать их как угодно (в том числе копии могут > C>быть на других машинах). Это УЖЕ работает. > Толку то? Еще раз, последний, сама ОС не повзволят использовать 80 > процессоров одновременно. Больше я на подобные вопрсы не отвечаю.
Слив засчитан.
SGI Altix 4700 incorporates the shared-memory NUMAflex™ architecture,
which simplifies software development, workload management and system
administration. It supports up to 512 processors under one instance
of Linux and as much as 128TB of globally shared memory. Supporting
these powerful capabilities is the NUMAlink™ interconnect, which leads
the industry in bandwidth and latency for superior performance on
cluster applications. The SGI Altix 4700 represents a versatile solution
for shared or distributed memory applications of any scale.
Sun Niagara вполне себе неплохо живет с 32 ядрами.
Здравствуйте, Mamut, Вы писали:
M>Что, собственно, приводит к следующему вопросу: А что у нас, собственно, способно прямо сейчас, убудчи запущенным на таком монстре, воспользоваться такой мощью? И что сможет в ближайшие пять лет?
...
M>Что, собственно, приводит к следующему вопросу: А что у нас, собственно, способно прямо сейчас, убудчи запущенным на таком монстре, воспользоваться такой мощью? И что сможет в ближайшие пять лет?
Ответ типа должен сам напрашиваться?
Кстати у Гая Стила были интересные работы по поводу многоядровых процессоров (хотя это было ещё в 80-х), там он использовал вариант лиспа с расширениями для параллельных вычислений типа того, что делают APL/J/K — вариант совсем иного по отношению к эрлангу подхода.
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, mik1, Вы писали:
M>>Ну мы работаем над авт. распараллеливанием в нашем ФЯ. Благо модель языка для этого правильная. Правда, язык на данный момент под вычисления заточен, а не под GUI. Могу, если интересно, черкануть немного об этом.
VD>Это очень интересно и об этом нужно не немного черкать, а писать статейку, чтобы не только пара десятков человек дочитавшие до этого места смогли сказать, что краем уха слышали что-то такое, а чтобы основная масса наших посетителей была в курсе.
VD>По-моему, тема автоматического распараллеливания вычислений в скором времени станет самой злободневной, и уж точно это самый что называется хкй-тек. И тем отраднее, что знаимаются этим наши соотечественники.
VD>В общем, с удовольствием поможем в написании и публикации подобного материала.
Влад, я себе в планы это закину. В течении двух недель пришлю набросок с описанием нашего языка и с идеями по распараллеливанию. А там дальше посмотрим.
Здравствуйте, Дьяченко Александр, Вы писали:
VD>>А возможно через года 3 будет прорыв в некой области и про многоядерность снова забудут на много лет. ДА>В какой? (Просто сильно интересно)
Я не гадалка. Я просто допускаю такую возможность. Темболее что подбное уже не раз случалось.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
0xDEADBEEF wrote: > А мораль такова, что boost::thread не предусматривает никакого > (Никакого. НИКАКОГО!) способа убиения задачи. Ни синхронного ни > асинхронного. So is только-что-предложенный std::thread. Следовательно, > прибить асинхронную таску НЕ-ВОЗ-МОЖ-НО. С чем я имею вас и поздравить.
Так ведь нет НИКАКОГО общего способа нормально прибить поток.
VladD2 wrote: > Эрланг использует потоки ОС для распараллеливания вычислений на > нескольких процессорах. Сам же он парллелит вычисления на одном потоке. > Что естественно никак не может дать ускорения от таличия еще одного > процессора.
Во-первых, никто не мешает запустить ДВЕ копии интерпретатора Эрланга,
на разных процессорах и связать их как угодно (в том числе копии могут
быть на других машинах). Это УЖЕ работает.
Дополнительно R11 умеет использовать несколько потоков ОС, что позволяет
снизить затраты на передачу сообщений.
Так что организуем 10 кластеров по 8 процессоров в каждом, а в каждом
кластере вешаем автономный scheduler. Это хоть сейчас можно сделать
(Xen/OpenVZ в зубы — и вперед).
> Ну, а так как за распределение времени между процессорами отвечает ОС, > то она неменуемо станет узким местом. Современные версии Виндовс и > Линукса резко деградируют после 8 процессоров, а то и вооще не > поддерживают большого их количества.
Вообще-то, Линукс масштабируется до 128 процессоров.
Здравствуйте, Mamut, Вы писали:
M>Коротко говоря: в течение пяти лет Интел предлагает интегрировать невероятное количество процессоров на одном чипе (80 в прототипе) и объединить каждый с собственной памятью.
M>Что, собственно, приводит к следующему вопросу: А что у нас, собственно, способно прямо сейчас, убудчи запущенным на таком монстре, воспользоваться такой мощью? И что сможет в ближайшие пять лет?
Не очень понял: речь идёт о способностях ОС или об используемых алгоритмах? Ну, если ОС — то пока нет аппаратуры о ней и говорить не надо: всё-таки они аппаратно зависимые.
Что касается алгоритмов, то если .NET и пул потоков там нормально будут работать, то я готов дать хоть сейчас код, который сработает нормально (в сложной задаче) на 1500 потоках. Конечно, до пиковой производительности там будет далековато, потому что есть операции, которые исполняются в основном последовательно. Тут видимо уже речь о встраивании в обычные компьютеры векторного подхода и т.п.
И вообще, я не понимаю, (ссылок не читал), почему они будут с собственной памятью? Это неэффективно, строить ccNUMA на одном кристале, когда это явно SMP.
0xDEADBEEF wrote:
> Но у них есть проблема — futures никак не абстрагируют конкурентный > доступ. Также, на данный момент нет никакой возможности (в рамках > std::thread, который есть "причесанный" boost::thread) дождаться > завершения N futures.
А чем
std::vector<int> v1 = f1(); // ждём окончания исполнения f1 и возвращаем его результат
std::vector<int> v2 = f2(); // ждём окончания исполнения f2 и возвращаем его результат
std::vector<int> v3 = f3(); // ждём окончания исполнения f3 и возвращаем его результат
// или даже
mergeResults(f1(), f2(), f3());
плохо?
Posted via RSDN NNTP Server 2.0
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, apple-antonovka, Вы писали:
VD>>>Лично я незнаю ни одного ЯП с автоматическим распараллеливанием вычислений. Тут пока одна теория. AA>>Про OpenMP слыхали? http://www.openmp.org/drupal/node/view/11#Q1 VD>Слыхали, слыхали. А вы слыхали о трудностях заката солнца вручную?
А вы я вижу слыхали про широко используемый в рекламе прием логической привязки независимых явлений. Типа выпил СуперКолу и все бабы твои
AA>>Ах да.. для .Net еще нету аналогичного лисапеда
VD>Думаю они там будут несколько более высокоуровневыми.
AA>>Кстати я например вообще всю жизнь чисто для себя старался распараллеливать все что можно. Просто например потому что так интереснее
VD>Весьма странное поведение. Ведь на однопроцессорном железе это даст замедление.
Знаю. Потому так я балуюсь исключительно для себя Зачастую это кстати дает помимо замедления еще и значительное упрощение архитектуры.
VD>Да и что в этом интересного?
хз. наверно тем что такой стиль более приближен к нашей повседневной реальной жизни
FDS>>Влад, что смешного? Может объяснишь...
VD>Улыбнула наивность. Уверяю тебя, что даже на 16 процессоров эффективное распараллеливание на сегодны — это очень солжная задача. А уж на 1500 просто фантастика.
Прикольно то, что на позавчера это было обыденным делом (Cray-процессоры). Грид процов, встроенная команда асемблера типа fork и всех делов. Первичным распределением ресурсов занимается аппаратура. Надо бы этот fork вводить в платформы, он гораздо удобнее и понятнее, чем объекты-треды. Ибо тред — это поток исполнения. ИМХО, потоку должен соответствовать путь исполнения кода, а не объект.
А в дотнете практически нет средств поддержки массового параллелизма (как и в Виндовс/Линукс в целом).
VD>Так что появление 80-процессорых камней неизбежно приведет к революции в средствах разрабокти. И забавно, что бывшие аутсайдеры — функциональные языки — могут оказаться очень даже в фаворе, так как неизменяемость позволяет автоматизировать распараллеливание на уровне алгоритмов. Вот только для этого еже нужно тонну работы сделать. Лично я незнаю ни одного ЯП с автоматическим распараллеливанием вычислений. Тут пока одна теория.
Ну да, автоматическое распарралеливание — это сложная задача, и она практически не решается в общем случае. В зависимости от того, сколько реально есть процессоров в системе, должен быть порожден соответствующий бинарник, иначе не будет повышения эффективности. Вычислительные алгоритмы на Эльбрусах затачивались на конкретную модификацию с конкретным числом процессоров. Выражаясь современным языком, программы и фреймворки надо будет распространять в исходниках и компилить на конкретной платформе.
VD>Человек же на таких объемах уже совсем справиться не сможет. Отдельные алгоритмы конечно можно будет распараллелить, но в целом сложность будет такая, что никто за это не возьмется.
Уже давно берутся и всю жизнь брались, но подходят немного с другого конца. Действительно, нет смысла заставлять одну операционную систему управлять всеми 1500 процессоров. Эти процы надо группировать в кластеры. У каждой ячейки кластера пусть будет несколько (немного) процессоров и собственная аппаратная память. И пусть будут мощные каналы связи (не расшаренная память, а именно каналы связи) м/у кластерами. В каждом кластере исполняется своя копия ядра ОС, а с другими кластерами общение происходит через pipes. Именно так сейчас строятся кластеры с сотнями и тысячами процессоров.
Здравствуйте, Курилка, Вы писали:
К>>>Почитай докторскую Джо Армстронга, там как раз он описывает исходя из чего принимались решения при построении системы и т.п.
M>>О ! Зет"с как говорится то, что надо M>> К>Всегда пжалста К>А вот и линка
Читал. Много думал..
Что, собственно, приводит к следующему вопросу: А что у нас, собственно, способно прямо сейчас, убудчи запущенным на таком монстре, воспользоваться такой мощью? И что сможет в ближайшие пять лет?
В Erlang процессы создаются легко и просто. ок. Они не зависят от ОС. ок. Все это прекрасно. Но ведь erl запускается ОС ? и этот самый erl запустится в одном единственном потоке ОС. (если я все правильно понимаю).
И каким тогда образом он сможет воспользоваться указанной выше мощью сейчас ?
Вопрос имеет смысл, если я правильно понял твой намек здесь
0xDEADBEEF wrote:
> (еще живыми) футурами которые оказались вдруг не нужны? Способа > корректно придушить этих "сирот рязанских" нету. Что бум делать? Душить
По поводу убиения сирот рязанских... Смотри как это "реализовано" в безопасной java.
Так что убийство — смертный грех, читайте Библию.
Posted via RSDN NNTP Server 2.0
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Здравствуйте, Курилка, Вы писали:
M>>И каким тогда образом он сможет воспользоваться указанной выше мощью сейчас ?
К>Это было до R11 вроде как сейчас многопроцессорность поддерживается платформой,
Да. Вспомнил что в ДП была новость о поддержке SMP в Erlang.
Собственно
In the SMP version of the Erlang virtual machine, there can be many process schedulers running in separate OS threads. As default there will be as many schedulers as there are processors or processor cores on the system.
Здравствуйте, vdimas, Вы писали:
M>>Не обязательно, ой не обязательно. Есть и другие идеи, кроме компиляции под конкретную машину...
V>Например? Для универсальной программной реализации того же самого потребуется много if-ов на ровном месте.
Я и не говорил, что идеи являются универсальными, а главное — относящимися к императивным языкам (хотя и там можно кое-что применить).
По сути, если у Вас есть алгоритм определения того, что функция написана в функциональном стиле (без побочных эффектов), то определив такие функции, их вызовы можно смело параллелить. Ну а если у Вас есть еще и алгоритм определения вычислительной сложности такой функции — то дело будет еще лучше.
M>>Вам писали про то, что охренительно трудно бывает ЭФФЕКТИВНО ВРУЧНУЮ распараллелить сложный алгоритм. А не о том, что охренительно трудно управлять вагоном процов.
V>Влад имел ввиду и трудности совместной работы вагона процов.
V>А распараллеливать алгоритмы не так уж сложно, если язык поддерживает. Например, можно ввести расширения типа fork, join.
Да как определитель параллелить — это и ежику понятно. А если алгоритм будет посложнее на порядок? А если нужно будет стремиться к крупно-зернистому параллелизму, а не к мелко-зернистому, пример которого Вы привели (он имеет смысл только на относительно больших размерностях матрицы). Голова не опухнет у абстрактного программиста в вакууме? Так что Влад прав — для 80-ядерников кровь из носу как будут нужны средства автоматического распараллеливания задачи. В уме такие задачки нормальные люди не должны решать.
Здравствуйте, Mirrorer, Вы писали:
M>Здравствуйте, Mamut, Вы писали:
M>> Можно запустить несколько виртуальных машин на одном компе, под разными процессорами. Собственно, именно так и предлагалось использовать версии до R11
M>Ну у меня была такая идея, только показалась несколько корявой. Но на безрыбье как говорится..
Идея эта вполне нормальная, более того, так все до последнего времени и делали. К примеру, в стандартной либе Эрланга есть модуль, реализующий так называемый пул процессов. По сути, он дает следующее — заменаете spawn на определенный там pspawn, и (бинго) у вас процессы запускаются на группе виртуальных машин с автоматической балансировкой нагрузки.
M>А вот подумал и возник еще вопрос. Пока в ОС не будет поддержки новых многоядерных процессоров, то и Erlang их мощу использовать не сможет.
В "ОС" она есть. К примеру, Эрланг замечательно себя чувствует на 8-ядерном 32-х поточном UltraSPARC T1 (виден оперсистеме как 32-х ядерный SMP) — смотрите тесты в release notes к последнему релизу.
M>Но когда в ОС будет поддержка, тогда и все программы, использующие ОС процессы(потоки) будут тоже использовать 80-core параллелизацию. Ну, что они будут валиться на большом количестве процессов, до тех пор, пока они не будут реализованы настолько же lightweight как и в Erlang это понятно
Здесь все не совсем так. В многоядерной ОС существует по одной копии шедулера процессов на ядро, так что процессы останутся такими, какие есть, и все будет нормально. Так что особой проблемы с поддержкой ОС тут нет.
Другое дело, что надо умудриться на классических языках написать приложение, которое сможет эффективно загрузить эти 80 ядер. В случае Эрланга это легче, так как в программе на Эрланге наличие 10К процессов является штатной ситуацией, и они не работают с общей памятью. Что исключает потери на блокировках — Эрланг-программы асинхронны и параллельны по своей природе, и великолепно масштабируются. Таким образом, существующие приложения на Эрланге уже готовы к такому масштабированию лучше, чем какие-либо другие.
Здравствуйте, VladD2, Вы писали:
VD>Ключевое слово здесь "in separate OS threads". То есть Эрланг точно так же помрет на 20-ом процессоре как Ява или С++ если приложение поднимается на Виндовс или Линукс. Так что у Эрлэнга есть чисто гипотетическое приемущество — модель. Но это уже не мало.
Причем эта модель также хорошо ложится на С++, .НЕТ и жабу... причем с прозрачным интеропом между ними.
Я сейчас неспешно работаю над таким велосипедом (благо где покататься есть...). Нужно много продумать но никаких принципиальных затыков я пока не вижу.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Здравствуйте, VladD2, Вы писали:
VD>Ключевое слово здесь "in separate OS threads". То есть Эрланг точно так же помрет на 20-ом процессоре как Ява или С++ если приложение поднимается на Виндовс или Линукс. Так что у Эрлэнга есть чисто гипотетическое приемущество — модель. Но это уже не мало.
Это означает всего лишь то, что Ерлангу нужно по 1-му системному процессу на ядро, чтобы использовать всю мощу многоядерности. А свои процессы будут уже распределяться ерланговским шедулером внутри этих 20-ти системных процессов. И винда, и линукс вытянут 20 процессов без натуги. А сотни тысяч ерланговских процессов будут исключительно внутри, и ОС ничего о них не знает, отчего и не напрягается.
Здравствуйте, FR, Вы писали:
FR>>>И как ты представляешь выпуск новой игровой приставки на процессоре давно снятом с производства? K>>Никак не представляю. Вот только P3 не снят с производства. С производства даже кажется i386 не снят.
FR>По моему снят, вроде писали пару лет назад.
Только не говорите, что первый XBox уже два года не производиться. Вот это новость так новость.
Но даже если и так, то можно говорить только об отсутствии массового, крупносерийного производства, но никак не производства вообще.
... << RSDN@Home 1.2.0 alpha rev. 655>>
'You may call it "nonsense" if you like, but I'VE heard nonsense, compared with which that would be as sensible as a dictionary!' (c) Lewis Carroll
Здравствуйте, Kolhoz, Вы писали:
K>Здравствуйте, VladD2, Вы писали:
K>>> Ну да. Специально. А кто мешает сейчас всем разрабатывать специально?
VD>>Сложноть. Ее бы без заморочек на распараллеливание осилить.
K> Так не бывает. Халявы для ПТУшников в IT больше не будет.
Про ПТУ-шников — это, извини, банальные понты. Сложности на всех хватит.
Да и про халяву никто не говорит. Речь идет о новом витке развития компьютерной науки.
K> Нет. Всего лишь умножает на константу.
Спорный вопрос. Но даже если это и так, то рдости это не прибавляет.
K> Это если message passing. Для традиционной модели, с общей памятью, блокировками и прочим кошмаром — то да, даже не в квадрат а порой в степень до 10 и выше.
А сейчас так и есть. Что-то я не вижу, чтобы все вокрук имели фрэймворки или языки поддерживающие методологии параллельного программирования.
K> Примеры можно?
Я как бы сам парочку написал. И долго в свое время рассматривал как Ворд работает. Там вообще труба. Они ведь даже кренирг вручную отрабатвавают.
K>Не видал я в коде текстовых редакторов следов сумасшедшей оптимизации. Ни в vim, ни в emacs. Других текстовых редакторов вроде бы и не существует.
А как ты себе видишь эти следы? Вот например, тот же Ворд данные хранит специальными инкрементальными потоками. Из-за это глюков в нем "мама дорогая".
K> Ну да, сейчас у меня emacs в среднем до 30-40Mb жрёт. Не серьёзно.
Емакс это прмитивный редактор плоского текста. А бывают еще WUSIUG-редаткоры. В общем-то даже любой броузер уже вылизан по самое нехачу.
K> Я бы не взялся так с ходу судить, какая из тенденций повышения интеллектуальности средств разработки доминирует — та, что ведёт к росту оверхеда, или та, что элеминирует ненужные промежуточные уровни абстракции, тем самым лишь снижая потребности в вычислительных ресурсах. Есть все основания полагать, что вторая составляющая тренда имеет немало шансов перевесить первую, кстати.
Что-то не вижу я подобного на практике.
K> И не побежит, пока четырёхголовые железки не станут популярнее.
Они уже есть у народа. Некторые платят бешенные бабки за супер карты и 10% частоты процессора. А тем временем второй камень мог бы серьезно ускорить большинство процессов в играх. Но никто не рвется в бой.
Конечно когда двухголовые будут на каждом столе, то наорд банально вложит деньги и в конце концов создадут новые вдижки которые будут утилизировать все процессоры. Но пока этого нет. Значит это не так то просто на практике.
K> Именно. 4 — это уже игра стоит свеч, а на две головы графику разпараллеливать смысла нет.
Ну, и два не так плохо, но согласен 4 это намного больший стимул.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
VD>Конечно когда двухголовые будут на каждом столе, то наорд банально вложит деньги и в конце концов создадут новые вдижки которые будут утилизировать все процессоры. Но пока этого нет. Значит это не так то просто на практике.
Шестиголовые, то есть три ядра по два аппаратных потока сейчас выпускаются массовыми многомиллиоными тиражами, и под них уже больше года люди пишут игры с оптимизацией под эти возможности.
Здравствуйте, mik1, Вы писали:
M>Здравствуйте, FR, Вы писали:
VD>>>Какие еще кластеры? Кроме процессоров, ну, и возможно шины все остальное общее — разделяемые ресурсы. 80 процессоров ведь в одном камне!
FR>>Так уже в современных процессорах есть средства виртуализации, например можно на каждом ядре по OS запустить, думаю не будет проблемой для 80 ядерного процессора запуск 10 OS с выделением каждому 8 ядер.
M>И пользователь — бог Шива — работает 20 руками в 10 операционках, наблюдая за ними в 10 мониторах 20 глазами....
Нет будут выпускать специальные клавиатуры на 1000 клавиш и сегментированные мониторы.
Здравствуйте, Cyberax, Вы писали:
>> "Процессы" Эрланга это большая фикция. Сами по себе они не позволят >> использовать те самые 80 процессоров. C>Причины?
Эрланг использует потоки ОС для распараллеливания вычислений на нескольких процессорах. Сам же он парллелит вычисления на одном потоке. Что естественно никак не может дать ускорения от таличия еще одного процессора.
Ну, а так как за распределение времени между процессорами отвечает ОС, то она неменуемо станет узким местом. Современные версии Виндовс и Линукса резко деградируют после 8 процессоров, а то и вооще не поддерживают большого их количества.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, Mazay, Вы писали:
M>А в последнем "гипотетичеком" варианте этот самый UI вызывается вовсе не в UI'шном потоке.
Так почитай внимательно первый же абзац после этого примера. А то создаётся впечатление, что ты только картинки посмотрел.
IT>>Ты пытаешься найти что-то неправильное в гипотетическом коде, говорить о котом я начал со слов "А теперь пофантазируем".
M> Если уж фантазировать, до давайте делать это пореалистичнее. А то пример совсем неубедительный получился.
Видишь ли, я не предлагал законченного решения, которое уже можно было бы начинать обсуждать. Я лишь указал направление. Если хочешь пофантазировать, то начинай фантазировать, а не критиковать то, чего пока ещё не существует.
IT>>Не вижу связи между функциональщиной и непрямолинейщиной с отсутствием состояния. Возможно она если и есть, то только в головах оголтелых поборников ФП, для которых принцип и догмы важнее здравого смысла. Для меня же ФП — это ещё один набор очень удобных паттернов и инструментов.
M>Я имел ввиду вот это: M>
M>В функциональном программировании переменные – это просто псевдонимы для выражений (так что нам необязательно записывать всё в одну строчку). Они (переменные) не могут быть изменены. Все переменные могут принимать значения только один раз.
(это из статьи "Функциональное программирование для всех")
Это и есть догмы.
M>,а Влад выше писал: M>
M>Меж тем побочные эффекы и особенно фокусы с указателями могут привести к такому, что потом не расхлебаешь. Идея Эрлэнговских лайт-процессов и активных объектов — это полный автомат. Хотя и не лишенный недостатков.
И что здесь не так?
IT>>Мьютексы то тут причём?
M>При том, что ими можно проблемы, которые в гипотетическом коде предлагалось решать с помощью атрибутов.
В гипотетическом коде предлагается совсем другое. А именно — приведение многопоточного алгоритма к линейному виду.
... << RSDN@Home 1.2.0 alpha rev. 0>>
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте, Gaperton, Вы писали:
G>Он в настоящий момент проходит государственные испытания,
"Он" называется не Е2К, а Эльбрус <b>Е3М</b>.
G> и в ближайшее время будет принят на вооружение. Дизайн в собственности МО РФ (которое и финансировало разработку), на открытый рынок продаваться не будет. Твои соображения по поводу чип-дизайна конечно очень любопытны, особенно где ты со знанием дела пишешь про проблемы с производственной и инженерной базой, но извини, я их поскипал.
Ничего, ничего. Мне простительно. Я все же не работаю в конторе разнабатывающей чипы. А вот то что ты не знаешь название чипа о котором говоришь — это немного странно.
G> Исключительно из скромности. Где мне в такой мощной философской дискуссии участвовать, когда такие зубры чипостроения в бой пошли .
Начал в себе скромность воспитывать? Это похвально.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, Gaperton, Вы писали:
G>Ты перепутал вычислительный комплекс для военных, который делает МЦСТ, с микропроцессором.
И все же я тебя огорчу, так как я как раз ничего не перепутал. Просто в среде инженеров недостаточно информации и переизбыток желания задеть собеседника.
Вот и на этом сайте нашел один документик: http://www.mcst.ru/doc/1_grabezhnoy.doc
Почитай его. Он несколько интереснее чем те рекламные листки на которые ты давал ссылки.
Нашел я его только Гуглем. Видимо в нашей стране сайты обновляются чуть реже чем люди умудряются общаться с журналистами и писать отчеты.
Словом E2K процессор назывался много лет назад когда он был на бумаге и когда его разработкой занимался Бабаян. Я тогда лично присутсвовал на презентации бумажного процессора и даже в общем-то купился на обещания. Мы даже опубликовали статейку по этому поводу. Теперь Бабаян срыл в Интел, а разработку ведут без него. За это время они умудрились сделать чип (правда не сами, а где-то в Корее). То что заработало как раз и называется E3М. А Е2К так и остался бумажным процессором. А теперь они называют Е2К общей архитектурой.
G> Ничего, это простительно — ты ведь и в самом деле не работаешь в конторе, разрабатывающей чипы. Многие "процессором" системый блок называют, это нормально.
Ну, как видишь некоторые товарищи годящиеся званием инженера вместо того чтобы расширять свой кругозор упражняются в злословии. Видимо тем самым пытаются поддержать имидж инженера.
G>Ищи свой E3M в секции "вычислительные колмплексы", и смотри на него даташыт. G>http://www.mcst.ru/doc/8-9.zip
Ты почитал бы то на что ссылки даешь. Там говорится о «Эльбрус-3М1».
Ну, да продолжайте Инженер. Все равно вывернетесь, скажете, что апельины приносили.
G>А так же процессор "Эльбрус", который в среде инженеров известен как E2K. G>http://www.mcst.ru/doc/2-3.zip
Это вообще рекламный листок для инженеров... МО РФ.
ЗЫ
Если выключить ехидство, то ситуация когда кто-то ошибается в названиях или не знает что делает некий институт соврешенно нормальна. Коробит вся эта демагогия, желание зачмырить оппонента и надменно-менторский тон. Будь ближе и люди к тебе потянутся.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Коротко говоря: в течение пяти лет Интел предлагает интегрировать невероятное количество процессоров на одном чипе (80 в прототипе) и объединить каждый с собственной памятью.
Что, собственно, приводит к следующему вопросу: А что у нас, собственно, способно прямо сейчас, убудчи запущенным на таком монстре, воспользоваться такой мощью? И что сможет в ближайшие пять лет?
К>Кстати у Гая Стила были интересные работы по поводу многоядровых процессоров (хотя это было ещё в 80-х), там он использовал вариант лиспа с расширениями для параллельных вычислений типа того, что делают APL/J/K — вариант совсем иного по отношению к эрлангу подхода.
А ссылочку можно ? Особенно по поводу того, как делают это в APL family, а то поиск что-то не помогает ...
Здравствуйте, Mamut, Вы писали:
M>Что, собственно, приводит к следующему вопросу: А что у нас, собственно, способно прямо сейчас, убудчи запущенным на таком монстре, воспользоваться такой мощью? И что сможет в ближайшие пять лет?
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, FreshMeat, Вы писали:
FM>>С небольшими доработками — игрушки
VD>...Их нужно переписать на 100% на новых языках и компилторах. ...
Здравствуйте, VladD2, Вы писали:
FM>>С небольшими доработками — игрушки
VD>Я бы сказал с микроскопическими. Их нужно переписать на 100% на новых языках и компилторах.
Учитывая их время жизни, это непрерывный процесс
Так что преимуществами скорее всего первыми они и воспользуются.
Microsoft <OS Name>, причем даже этих ресурсов ей врядли хватит
icq# 348-436-436 Играет Nickelback — If Everyone Cared
Слова, пустые слова, подумал Стормгрен. Слова, за которые прежде люди дрались и умирали, но никогда больше не станут за них ни умирать, ни драться. И от этого мир станет лучше.
M>>Что, собственно, приводит к следующему вопросу: А что у нас, собственно, способно прямо сейчас, убудчи запущенным на таком монстре, воспользоваться такой мощью? И что сможет в ближайшие пять лет?
FM>С небольшими доработками — игрушки
Здравствуйте, Mirrorer, Вы писали:
M>Здравствуйте, Курилка, Вы писали: К>>Кстати у Гая Стила были интересные работы по поводу многоядровых процессоров (хотя это было ещё в 80-х), там он использовал вариант лиспа с расширениями для параллельных вычислений типа того, что делают APL/J/K — вариант совсем иного по отношению к эрлангу подхода.
M>А ссылочку можно ? Особенно по поводу того, как делают это в APL family, а то поиск что-то не помогает ...
По поводу этой семейки посмотри J, там по сути SIMD на уровне языка получается, поэтому параллелить — это самое логичное.
А по поводу статей Стила вот здесь вроде бы, посмотри там по порталу — там ещё есть интересные его вещи.
Здравствуйте, FR, Вы писали:
FR>Здравствуйте, VladD2, Вы писали:
FM>>>С небольшими доработками — игрушки
VD>>Я бы сказал с микроскопическими. Их нужно переписать на 100% на новых языках и компилторах.
FR>Учитывая их время жизни, это непрерывный процесс FR>Так что преимуществами скорее всего первыми они и воспользуются.
Только вот примеров особо пока не видно
Хотя Тим Свини вроде напирал на concurrency.
Здравствуйте, FR, Вы писали:
FR>Учитывая их время жизни, это непрерывный процесс
Непрерывный процесс — это эволюция. Тут же им прийдется попотеть. Я пока что не видел ни одной игрушки действительно ускоряющейся от наличия второго камня. А вот револющии — это всегда прерывание и надолго.
Уверен, что под такую революцию пролезут новые игроки. Старые как всегда ее проспят.
Так было уже не раз. Тот же ФарКрай, например. Но там революция была мизерная. А тут... надо менять архитектуру всего приложения.
Но тут куча проблем. Ведь код должен одинаково хорошо работать и на 1 и на 80 процессорах. А это без автоматизации невозможно. Тут нужны специальные языки и компиляторы (рантаймы). Нужны новые подходы. Новые алгоритмы. Те работающие догмы что были в однопроцессорном мире будут выброшены на помойку и народ будет по новому изобретать велосипед.
Но уверен, что бабок в индустрии на это хватит. Так что тут скорее надо Интелу стараться чтобы заставить нас купить эти 80-тикамневые процессор. А я лично пока вижу мало толку даже в двух камнях. Так что им прийдется продовать 80х по ценам таким же или ниже чем 1х.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, c-smile, Вы писали:
CS>Ну если бы все сервисы что работают сейчас в Windows "в заду" ушли на свои собственные ядра никому плохо бы не было.
Они в основном спят. А те что не спять становятся в очередь к ресурсам вроде кэша, памяти, дестких дисков, каналов вода/вывода...
CS>Тако ж apache явно просится на такую модель. Нет?
Ага. Только на 80 камнях он будет работать не лучше чем на 8. Пока что даже Виндовс в штатном варианте не держит более 8. Так что тут прийдется очень многое переписать.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, Mamut, Вы писали:
M>Что, собственно, приводит к следующему вопросу: А что у нас, собственно, способно прямо сейчас, убудчи запущенным на таком монстре, воспользоваться такой мощью? И что сможет в ближайшие пять лет?
Сейчас ровным счетом ничего. Даже серверные продукты теряют эффективность при куда меньшем количестве камней.
Причем чтобы изменить ситуацию программы нужно будет писать просто по другому. Они должны быть рассчитаны на массовый параллелизм. И параллелизм для 8 камней не тоже самое что для 80. Но исследований море. Так что к тмому времени когда у всех (специально для любителей придраться к словам... у всех означает "у большинства") будут на столе такие камни. А это будет не скоро.
А возможно через года 3 будет прорыв в некой области и про многоядерность снова забудут на много лет.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, FR, Вы писали:
FR>>Учитывая их время жизни, это непрерывный процесс
VD>Непрерывный процесс — это эволюция. Тут же им прийдется попотеть. Я пока что не видел ни одной игрушки действительно ускоряющейся от наличия второго камня. А вот револющии — это всегда прерывание и надолго.
Я имел в виду что время жизни игры очень маленькое, и поэтому игры обычно первыми и подхвтывают новые аппаратные возможности.
Сейчас практически все большие игры пишутся с учетом распаралеливания, так как у нового поколения игровых приставок процессоры многоядерные.
VD>Уверен, что под такую революцию пролезут новые игроки. Старые как всегда ее проспят. VD>Так было уже не раз. Тот же ФарКрай, например. Но там революция была мизерная. А тут... надо менять архитектуру всего приложения.
Да ничего там сильно менять не надо, в играх полно вещей которые естественно паралелить.
VD>Но тут куча проблем. Ведь код должен одинаково хорошо работать и на 1 и на 80 процессорах. А это без автоматизации невозможно. Тут нужны специальные языки и компиляторы (рантаймы). Нужны новые подходы. Новые алгоритмы. Те работающие догмы что были в однопроцессорном мире будут выброшены на помойку и народ будет по новому изобретать велосипед.
С 80 процессорами да придется делать по другому, да и то не все игры, например те же серверные онлайн игры хоть завтра можно переводить хоть на 1000 ядерный камень. А для 4 — 8 ядер (максимум по моему что угрожает в ближайшие пять лет) у любой игры есть что распаралелить и без новых языков и технологий.
VD>Но уверен, что бабок в индустрии на это хватит. Так что тут скорее надо Интелу стараться чтобы заставить нас купить эти 80-тикамневые процессор. А я лично пока вижу мало толку даже в двух камнях. Так что им прийдется продовать 80х по ценам таким же или ниже чем 1х.
Так если не найдут способ увеличить частоту (хотя и это временная отсрочка, скорость света никто ни отменял ) распаралеливание неизбежно.
Здравствуйте, Курилка, Вы писали:
FR>>Учитывая их время жизни, это непрерывный процесс FR>>Так что преимуществами скорее всего первыми они и воспользуются.
К>Только вот примеров особо пока не видно К>Хотя Тим Свини вроде напирал на concurrency.
Это он впереди паровоза бежит
Для 2 — 8 ядер никаких новых языков и технологий не нужно.
Здравствуйте, Guard, Вы писали:
G>Здравствуйте, Mamut, Вы писали:
M>>Что, собственно, приводит к следующему вопросу: А что у нас, собственно, способно прямо сейчас, убудчи запущенным на таком монстре, воспользоваться такой мощью? И что сможет в ближайшие пять лет?
G>здесь
Здравствуйте, FDSC, Вы писали:
FDS>Что касается алгоритмов, то если .NET и пул потоков там нормально будут работать, то я готов дать хоть сейчас код, который сработает нормально (в сложной задаче) на 1500 потоках. Конечно, до пиковой производительности там будет далековато, потому что есть операции, которые исполняются в основном последовательно.
Забыл сказать, что за задача: расчёт стержневой конструкции на прочность (одна из трудоёмких частей заключает в себе расчёт каждого стержня, который можно проводить отдельно для каждого стержня, при этом сам этот расчёт довольно хорошо параллелится на 13 потоков). В принципе, думаю МКЭ то же неплохо распараллеливается, хотя уже на векторном, а не на скалярном.
Здравствуйте, VladD2, Вы писали:
VD>А возможно через года 3 будет прорыв в некой области и про многоядерность снова забудут на много лет.
В какой? (Просто сильно интересно)
Здравствуйте, FR, Вы писали:
FR>Я имел в виду что время жизни игры очень маленькое, и поэтому игры обычно первыми и подхвтывают новые аппаратные возможности.
Ты путашь игры и их движки. Игры действительно живут как феерверк. А движки эволюционируют годами. Тот же Q4 эволюционировал с Дума. Уж точно с Q1. В бетах Doom 3 были нехилые куски из Q3.
FR>Сейчас практически все большие игры пишутся с учетом распаралеливания, так как у нового поколения игровых приставок процессоры многоядерные.
Языком они пишутся. Да и твои представления о консольных системах очень поверхносные. Там не процессоров много. Тот же Целл это скорее один процессор с кучей сопроцессорв.
В общем, факт в том что нет ни одной игрушки получающей реальное приемущество от второго камня. Хотя, сам понимаешь, по уму обязаны получать. Вопли о параллелизме были еще во времена Q2. Но воз и ныне там.
FR>Да ничего там сильно менять не надо, в играх полно вещей которые естественно паралелить.
Кон надо менять. Ладно мне надоело. Все равно ты будешь из приципа спорить с каждым моим словом. Спорь дальше.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, alexeiz, Вы писали:
A>Нужны языки программирования и библиотеки, облегчающие написание многопоточного кода. A>Могу сказать, что есть для C++.
STFI OpenMP — существует уже давно. Поддерживается компилерами от интела, мелкософта и GNU (gcc 4.1+)
A>Futures обсуждаются для включения в стандарт C++.
Пфе, "жалкое подобие левой руки". По крайней мере, по сравнению с OpenMP
__________
16.There is no cause so right that one cannot find a fool following it.
Здравствуйте, FDSC, Вы писали:
FDS>Влад, что смешного? Может объяснишь...
Улыбнула наивность. Уверяю тебя, что даже на 16 процессоров эффективное распараллеливание на сегодны — это очень солжная задача. А уж на 1500 просто фантастика. А в дотнете практически нет средств поддержки массового параллелизма (как и в Виндовс/Линукс в целом). Так что появление 80-процессорых камней неизбежно приведет к революции в средствах разрабокти. И забавно, что бывшие аутсайдеры — функциональные языки — могут оказаться очень даже в фаворе, так как неизменяемость позволяет автоматизировать распараллеливание на уровне алгоритмов. Вот только для этого еже нужно тонну работы сделать. Лично я незнаю ни одного ЯП с автоматическим распараллеливанием вычислений. Тут пока одна теория.
Человек же на таких объемах уже совсем справиться не сможет. Отдельные алгоритмы конечно можно будет распараллелить, но в целом сложность будет такая, что никто за это не возьмется.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, 0xDEADBEEF, Вы писали:
A>>Futures обсуждаются для включения в стандарт C++. DEA>Пфе, "жалкое подобие левой руки". По крайней мере, по сравнению с OpenMP
Собственно, сравнение futures с OpenMP неправомерно. У них разное предназначение. Futures задумывались для облегчения написания асинхронного кода. С помощью такой абстракции как futures, асинхронное выполнение сводится к небольшому количеству телодвижений:
std::thread_pool launch_in_pool;
std::future<std::vector<int>> f3 = launch_in_pool(std::bind(h, 100)); // асинхронный вызов h(100)
// ... делаем другие вещи, пока f3 выполняется
std::vector<int> v = f3(); // ждём окончания исполнения f3 и возвращаем его результат
CS>>Тако ж apache явно просится на такую модель. Нет?
VD>Ага. Только на 80 камнях он будет работать не лучше чем на 8.
Гхм. А аргументы какие? Апач активно юзает многопоточность. Те он на ней построен. Больше процессоров — быстрее будут исполняться всяческая CGI хренотень, которой запускается много потоков (по потоку на клиента) и каждому из которых надо много CPU. Будет одновременно обрабатываться 80 клиентов скриптами на каком нить перле — будут загружены все 80 процессоров. Будет одновреенно 1000 клиентов сидеть (довольно скромная цифра для веб сервера кстати) — тем лучше.
VD>Пока что даже Виндовс в штатном варианте не держит более 8. Так что тут прийдется очень многое переписать.
w2k3 Datacenter держит 32. Так что 4 CPU или скока там для какой нить ХР — ограничение скорее маркетинговое.
Много процессоров надо тем кому надо много процессорного времени. В "быту" это мультимедиа, архивация, меньше это нужно играм (которые вобщето в последнее время на 3D нагрузку только дают в основном). Первые два варианта давно затачиваются под многопроцессорность — многие видео кодеки и архиваторы умеют распараллеливаться. Игры — хз. Разве что каждого NPC и самого игрока будут обсчитывать разные потоки. Еще можно вспомнить всякие технологии типа распознавания текста/речи — так тут параллелизм — это их родное. Еще можно вспомнить терминальные решения — это когда сидят 50 юзеров через терминалы на одной винде и работают в вордах/ехелях. Там вообще рай для многопроцессорных систем.
D:\Program Files\Far>icl.exe /?
Intel(R) C++ Compiler Help
==========================
...blablabla...
/Qtcheck generate instrumentation to drive the Intel Thread
Checker to detect multi-threading bugs in programs
written using Windows or POSIX Threads
/Qopenmp enable the compiler to generate multi-threaded code
based on the OpenMP directives
/Qopenmp_profile link with instrumented OpenMP runtime library to
generate OpenMP profiling information for use with the
OpenMP component of the VTune(TM) Performance Analyzer
/Qopenmp_stubs enables the user to compile OpenMP programs in
sequential mode. The openmp directives are ignored and
a stub OpenMP library is linked (sequential)
/Qopenmp_report{0|1|2} control the OpenMP parallelizer diagnostic level
/Qparallel enable the auto-parallelizer to generate multi-threaded
code for loops that can be safely executed in parallel
code for loops that can be safely executed in parallel
...blablabla...
Ах да.. для .Net еще нету аналогичного лисапеда
Кстати я например вообще всю жизнь чисто для себя старался распараллеливать все что можно. Просто например потому что так интереснее
Здравствуйте, Курилка, Вы писали:
К>По поводу этой семейки посмотри J, там по сути SIMD на уровне языка получается, поэтому параллелить — это самое логичное.
Хм, а вот чисто гипотетисски интересно ...
Имеем простой код.
*: 1 2 3 4
1 2 9 16
Имеем процессор Pentium. Самый первый в котором появились два целочисленных конвеера.
Использует ли J эти два конвеера или нет ? Насколько я помню, для того чтобы использовались оба конвеера, необходимо специфическая последовательность ассемблерных команд. J же вроде интерпретатор ?
Имеем Dual Core. Распараллелится ли ?
Иммем Intel 80-Core Super-puper Processor. Тот же вопрос.
Или допустим большая числодробилка на Erlang, но написана студентами в одном потоке. Как поведут себя вычисления в этом случае ?
Здравствуйте, alexeiz, Вы писали:
A>Собственно, сравнение futures с OpenMP неправомерно.
Согласен. Futures никак нельзя применить для того чтобы распараллелить код написанный "непараллельным" способом. А вот OpenMP — можно.
A>У них разное предназначение. A>Futures задумывались для облегчения написания асинхронного кода.
Я поглядываю с достаточно большим интересом на futures еще со времени когда про них начал говорить Саттер (где-то с год назад). В первую очередь потому, что при помощи их можно абстрагировать задачи предполагающие асинхронность — не только вычисления, но и ввод-вывод. Например, можно выразить сокетный select() как future.
Но у них есть проблема — futures никак не абстрагируют конкурентный доступ. Также, на данный момент нет никакой возможности (в рамках std::thread, который есть "причесанный" boost::thread) дождаться завершения N futures.
Мне кажется, что когда настанет время большого количества ядер (от 32-х), появится чип — "параллелизатор", который будет искать подходящие паттерны в однопоточном коде и распараллеливать их автоматически... То есть, делать примерно то же самое, что делает OpenMP в "ручном" режиме.
__________
16.There is no cause so right that one cannot find a fool following it.
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, Курилка, Вы писали:
К>>Хотя Тим Свини вроде напирал на concurrency.
VD>Извини, что за Свин и накого он написал?
Здравствуйте, Mirrorer, Вы писали:
M>Использует ли J эти два конвеера или нет ? Насколько я помню, для того чтобы использовались оба конвеера, необходимо специфическая последовательность ассемблерных команд. J же вроде интерпретатор ?
Вот уж не знаю — к разработчикам J вопрос, а оптимизирующий интерпретатор разве не бывает? Java тоже по сути интерпретатор
M>Или допустим большая числодробилка на Erlang, но написана студентами в одном потоке. Как поведут себя вычисления в этом случае ?
Чтот ты такое хитрое загнул, ну не покатит эрланг для числодробилок
И про один поток (процесс?) — это тоже "трудно", на Эрланге изначально декомпозиция будет иначе выглядеть, хотя в принципе тебе нельзя запретить создать всего 1 поток который всё будет делать, но это, знаешь, будет примерно также как ООП программа написанная в рамках 1 класса.
Всё, конечно, ИМХО
Здравствуйте, Курилка, Вы писали:
К> а оптимизирующий интерпретатор разве не бывает? Java тоже по сути интерпретатор
Твоя правда, кстати.. Вполне может быть..
К>Чтот ты такое хитрое загнул, ну не покатит эрланг для числодробилок
Ну почему же.. Операции над матрицами допустим замечательно распараллелятся.. Правда даст тут Erlang большой прирост в производительности по сравнению скажем с .net —
Матрицы хорошо параллелятся на любом языке
К>на Эрланге изначально декомпозиция будет иначе выглядеть, хотя в принципе тебе нельзя запретить создать всего 1 поток который всё будет делать, но это, знаешь, будет примерно также как ООП программа написанная в рамках 1 класса.
/Qparallel enable the auto-parallelizer to generate multi-threaded
code for loops that can be safely executed in parallel
Хотя с другой стороны я слабо себе представляю, как можно автоматически параллелить даже на уровне ОС для 80-ти ядреного проца. Допустим для 10-ти ядер можно создать еще полносвязную систему.. Оно упростит планирование. Но для 80-ти .. Линейка ? Кольцо ? Гиперкуб ? Тогда ОС придется иметь отдельный планировщик под каждую архитектуру проца...
Здравствуйте, Mirrorer, Вы писали:
К>>Чтот ты такое хитрое загнул, ну не покатит эрланг для числодробилок M>Ну почему же.. Операции над матрицами допустим замечательно распараллелятся.. Правда даст тут Erlang большой прирост в производительности по сравнению скажем с .net — M>Матрицы хорошо параллелятся на любом языке
Ну не все же операции к матрицам сводятся
M>Просто подумал, может рантайм Erlang умеет делать что-то типа такого M>Re[4]: Влад, что смешного?
M>/Qparallel enable the auto-parallelizer to generate multi-threaded
M>code for loops that can be safely executed in parallel
Нет, там подход другой — там параллельность на уровень языка вынесена, т.е. программист мыслит в терминах процессов. А не как тут, что компилятор путём каких-то своих правил какие-то части оптимизирует.
И планировщик (супервайзор) есть именнно на уровне платформы Erlang/OTP
И почитай хотябы вводный учебник, если интересно, там всё просто и понятно (по меньшей мере мне было )
гхм.. шизофреническая мысль.. А не сделать ли язык...
Но это так, шутка юмора.
К>Нет, там подход другой — там параллельность на уровень языка вынесена, т.е. программист мыслит в терминах процессов.
На самом деле я представляю подход к разработке приложений на Erlang . Просто подумал о том, что может рантайм помимо этого умеет на уровне машкодов что-то параллелить.
Просто не смог найти нормального описания что есть внутрях Erlang/OTP помимо создания, убития и планирования процессов. Чем-то задним чувствую, что в погоне за максимальной легковесностью и производительностью по-другому быть не может... Но мало ли..
К>И планировщик (супервайзор) есть именнно на уровне платформы Erlang/OTP К>И почитай хотябы вводный учебник, если интересно, там всё просто и понятно
Да там все просто и понятно, просто надеялся увидеть какое-нибудь более менее подробное описание внутренней архитектуры. В документации в разделе Erlang/OTP /System Principles
пишут о том, как запускать\останавливать систему. В учебнике вообще по архитектуре ничего не нашел, только общие слова..
Хотя, может мы о разных учебниках говорим
З.Ы. В свое время был действительно поражен, насколько простой язык Erlang..
... << RSDN@Home 1.1.4 Marilyn Manson — Better Of Two Evils >>
Здравствуйте, Mirrorer, Вы писали:
M>Да там все просто и понятно, просто надеялся увидеть какое-нибудь более менее подробное описание внутренней архитектуры. В документации в разделе Erlang/OTP /System Principles M>пишут о том, как запускать\останавливать систему. В учебнике вообще по архитектуре ничего не нашел, только общие слова.. M>Хотя, может мы о разных учебниках говорим
Почитай докторскую Джо Армстронга, там как раз он описывает исходя из чего принимались решения при построении системы и т.п.
Правда там три сотни страниц, но тыж подробнее хотел
К>Почитай докторскую Джо Армстронга, там как раз он описывает исходя из чего принимались решения при построении системы и т.п. К>Правда там три сотни страниц, но тыж подробнее хотел
О ! Зет"с как говорится то, что надо
... << RSDN@Home 1.1.4 Marilyn Manson — Disposible Teens >>
Здравствуйте, Mirrorer, Вы писали:
M>Здравствуйте, Курилка, Вы писали:
К>>Почитай докторскую Джо Армстронга, там как раз он описывает исходя из чего принимались решения при построении системы и т.п. К>>Правда там три сотни страниц, но тыж подробнее хотел M>О ! Зет"с как говорится то, что надо M>
Всегда пжалста
А вот и линка
Здравствуйте, kan, Вы писали:
kan>0xDEADBEEF wrote:
>> Но у них есть проблема — futures никак не абстрагируют конкурентный доступ. Также, на данный момент нет никакой возможности (в рамках std::thread, который есть "причесанный" boost::thread) дождаться завершения N futures. kan>А чем
kan>// или даже
kan>mergeResults(f1(), f2(), f3());
kan>плохо?
Плохо. Если какая-нить из них futures "зависнет" на неопределенное время, то зависнет все. Куда лучше было бы:
И еще, вы тут все показываете как красяво futures вызываются, но не показываете как некрасяво они конструируются. Марал, до тех пор пока в C++ не будет юзабельной лямбды, futures уготовано место рядом с std::for_each, которым все советуют пользоваться, но никто не хочет
И еще, вы так легко передаете вектор по значению, как будто это маа-а-аленький такой int Из этого еще одна марал, до тех пор пока в C++ не будет реализован move-constructor, вам и 100 процессоров будет мало. Про требования к памяти скромно помолчим
__________
16.There is no cause so right that one cannot find a fool following it.
Здравствуйте, apple-antonovka, Вы писали:
CS>>>Тако ж apache явно просится на такую модель. Нет?
VD>>Ага. Только на 80 камнях он будет работать не лучше чем на 8. AA>Гхм. А аргументы какие? Апач активно юзает многопоточность. Те он на ней построен.
Апач не может "юзать" многопоточность активнее ОС на которой он работает. А современные Видовс и Линукс 80 просто не тянут. Так что Апач даже не тисировался на подобных задачах.
К тому же Апач это просто средство отформатировать текст и отдать по ХТТП. А вот данные что он отдает еще где-то взять нужно. И тут то и случится узкое местечко. Все клиенты ломанутся к одной СУБД и 72 процессора.
AA> Больше процессоров — быстрее будут исполняться всяческая CGI хренотень, которой запускается много потоков
Это наивное мнение. Займись этим по плотнее и ты увидишь, что масштабирование SMP-систем совершенно не линейное.
AA> (по потоку на клиента) и каждому из которых надо много CPU. Будет одновременно обрабатываться 80 клиентов скриптами на каком нить перле — будут загружены все 80 процессоров. Будет одновреенно 1000 клиентов сидеть (довольно скромная цифра для веб сервера кстати) — тем лучше.
Без специальных язык, специальных библиотек и специальных СУБД клиенты выстроятся в очередь, а процессоры будут заняты обработкой дэдлоков и синхронизацией.
AA>w2k3 Datacenter держит 32. Так что 4 CPU или скока там для какой нить ХР — ограничение скорее маркетинговое.
2 для ХРюши ограничение. Но это дейсатвительно маркетинг. Реальная цияра 4-8. А вот ДатаЦентр — это утучный продукт не продающийся в коробке. Он специально адаптируется для каждой железки на которой работает и без оной не продается. Это опять же наивное представление. Стоят такие решения мегобаксы и софт по них тоже очень специфичен.
AA>Много процессоров надо тем кому надо много процессорного времени.
Простая и гениальная фраза.
Вот только нужно не значит, что его будет просто использовать. Тут нужны решения системного уровня. Изменение подходов в программировании. Массовый параллелизм — это очень серьезная задачи и ее решение может изменить очень многие какзалось бы незыблимые устои в программировании.
AA> В "быту" это мультимедиа, архивация, меньше это нужно играм (которые вобщето в последнее время на 3D нагрузку только дают в основном).
3D, к сведению, при хорошем исполнении вообще не должно грузить ЦП. Оно должно грузить движок физики и видиокарту. Вот там параллелизм уже есть и сейчас. Только делается от совсем по другому.
AA> Еще можно вспомнить терминальные решения — это когда сидят 50 юзеров через терминалы на одной винде и работают в вордах/ехелях. Там вообще рай для многопроцессорных систем.
Ты много видел то терминал-сервисов с 50 одновременно вкалывающими товарищами?
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, Курилка, Вы писали:
VD>>Извини, что за Свин и накого он написал?
К>Посмотри здесь
Игрушечник значит? Ну, им сам бог вилел об этом думать. Это только лихие бравые парни с РСДН полагают что в играх все раз плюнуть чтобы перевести в режим массового параллелизма.
А где он это говорил? И что конкретно?
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, apple-antonovka, Вы писали:
VD>>Лично я незнаю ни одного ЯП с автоматическим распараллеливанием вычислений. Тут пока одна теория. AA>Про OpenMP слыхали? http://www.openmp.org/drupal/node/view/11#Q1
Слыхали, слыхали. А вы слыхали о трудностях заката солнца вручную?
AA>Ах да.. для .Net еще нету аналогичного лисапеда
Думаю они там будут несколько более высокоуровневыми.
AA>Кстати я например вообще всю жизнь чисто для себя старался распараллеливать все что можно. Просто например потому что так интереснее
Весьма странное поведение. Ведь на однопроцессорном железе это даст замедление. Да и что в этом интересного?
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
0xDEADBEEF wrote:
> Плохо. Если какая-нить из них futures "зависнет" на неопределенное > время, то зависнет все. Куда лучше было бы:
У class future есть методы ready/wait/timed_wait, что не удивительно.
Так что твой код будет выглядеть чуть по-другому, но делать тоже самое. Ограничение лишь из-за того, что в С++ нет
поддержки ф-ций с переменным числом аргументов (я сказал, что нет! ).
if(f1.ready() && f2.ready() && f3.ready())
Правда с while непонятно что сделать. Правда я и не понимаю что ты там хочешь делать...
Видимо, тебе хочется что-то типа timed_wait но чтобы таймаут был распределён на всех... но вроде можно обёртку написать,
если вдруг понадобится...
Потом, можно соглашение сделать, что "зависать" не будет, а будет по таймауту отваливаться с ошибкой. Будет удобно в
ситуации, когда тебе нужно собрать несколько ресурсов, некоторые из сети, например, некоторые "тяжело" вычисляются и
т.п. и как-то соорудить результат.
future не панацея для сабжа, а вполне чёткая концепция, удобная в определённых ситуациях. Можно предложить событийную
модель как альтернативу.
> И еще, вы тут все показываете как красяво futures вызываются, но не > показываете как некрасяво они конструируются. Марал, до тех пор пока в > C++ не будет юзабельной лямбды, futures уготовано место рядом с > std::for_each, которым все советуют пользоваться, но никто не хочет
Мелочи реализации...
> И еще, вы так легко передаете вектор по значению, как будто это > маа-а-аленький такой int Из этого еще одна марал, до тех пор пока в C++ > не будет реализован move-constructor, вам и 100 процессоров будет мало. > Про требования к памяти скромно помолчим
Фигня какая, замени на auto_ptr
Просто теоретически vector<int> из 5 примитивных элементов может быть быстрее...
Кстати, move-constructors таки.
Posted via RSDN NNTP Server 2.0
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Здравствуйте, 0xDEADBEEF, Вы писали:
DEA>Но у них есть проблема — futures никак не абстрагируют конкурентный доступ.
Что ты имеешь ввиду под конкретным доступом?
> Также, на данный момент нет никакой возможности (в рамках std::thread, который есть "причесанный" boost::thread) дождаться завершения N futures.
Для этого есть future_group. Грубо говоря:
future<int> f1 = ...;
future<double> f2 = ...;
future_group<...> fg = f1 && f2;
fg(); // waits for both f1 & f2 and returns something (what? maybe tuple<future<int>, future<double>>)
И это можно сделать в рамках boost::thread. У меня есть идея как такую штуку провернуть через boost::condition.
VD>OpenMP — то не автоматическое распараллеливание, а полуавтоматческое. Это конечно проще чем полный ручник, но до полноценной автоматики ему как до пикина раком. При этмо код засоряется хинтами компилятору. Что тоже не фантан.
Ну OpenMP это раз. Два — это ключик /Qparallel для icl которому openmp директивы не нужны
А автоматически... полностью автоматически это пожалуй только в каком нить смоллтолке сделать можно.
VD>Меж тем побочные эффекы и особенно фокусы с указателями могут привести к такому, что потом не расхлебаешь. Идея Эрлэнговских лайт-процессов и активных объектов — это полный автомат. Хотя и не лишенный недостатков.
аналогично.
AA>>Знаю. Потому так я балуюсь исключительно для себя Зачастую это кстати дает помимо замедления еще и значительное упрощение архитектуры. VD>Ой сомневаюсь я на счет уерощения. Скорее усложнение. Все же не рассчитаны современные языки на параллелизм. По крайней мере "зачастую" — это явная натяжка.
Очень зачастую. Просто пользоваться надо уметь
Но соглашусь что в таком стиле написанный мной код оказывается обычно проще только для меня. Причина ИМХО — не учат пока в школах/вузах многопоточному программированию толком. Рассказывают про бегинтред какой нить и мутексы в конце обучения и все. Мое мнение — программера идее параллельного исполнения взаимодействующих алгоритмов учить надо с самого начала. Тогда же когда про Чертежника/Робота там рассказывают, или что там ща в школах. В моем случае я этому научился еще в 10м классе кода на асме под спекки написал этакий шедулер потоков. А так народ и выходит из ВУЗов с плоско-функциональным мышлением в области программирования. И хорошо еще если он потом поймет хотябы как правильно юзать ООП.
VD>>>Да и что в этом интересного? AA>>хз. наверно тем что такой стиль более приближен к нашей повседневной реальной жизни
VD>Серьезно. Ты способен одновременно делать несколько дел? Попробуй ради хохмы вертеть левой рукой по часовой стрелке, а правой ногой по часовой. Когда привыкнешь к этому попробуй на ходу поменять направление вращения. Уверяю тебя эффект будет потрясающий.
<Офтоп конечно..>
Я вижу у вас даже печатать наоборот не получилось
Между тем ногами и руками я кручу без особых проблем в разные стороны и меняюнаправление. Просто я с детства тренировался делать ассиметричные вещи левыми и правыми частями тела — тоже из интереса. От этих кручений до "перебирания" пальцами левой и правой рук в разные стороны что гораздо сложнее, но тоже получается после определенного кол-ва тренировок
</Офтоп конечно..>
VD>Так что в жизни параллелизм он в осноном для разных могов, а не для одного. И при этом мозги общаются сообщениями причем для каждого из мозгов сообщения последовательны. А это как раз идея активных объектов/лайт-процессов.
Ну я вообще не про себя конкретно говорил о жизни, а вообще о процессах в мире которые исполняются параллельно
Но это уже философия какаято....
Здравствуйте, IT, Вы писали:
IT>Здравствуйте, apple-antonovka, Вы писали:
AA>>В моем случае я этому научился еще в 10м классе кода на асме под спекки написал этакий шедулер потоков.
IT>А сейчас сходу сможешь быстро разобраться что делается в твоих же собственных исходниках?
Запросто, Но только не в том шедулере — во первых он пропал во вторых асма спекки я уже почти не помню.
AA>>А так народ и выходит из ВУЗов с плоско-функциональным мышлением в области программирования. И хорошо еще если он потом поймет хотябы как правильно юзать ООП.
IT>А потому, что три строчки плоско-функционального кода легко превращаются в тридцать, если писать многопоточно на современных средствах разработки. Т.е. по сравнению с прямолинейным кодом это на порядок сложнее. Но, есть мнение, что надо не программистов в неправильном мышлении упрекать, а инструменты совершенствовать.
а 30000 строчек функционального кода зачастую легко превращаются в 20000 грамотным рефакторингом. Но вообще говоря не в кол-ве строчек сложность кода выражается.
IT>Это прекрасно видно на примере FP. Пока "научившиеся ещё в 10м классе" занимались измерениями размеров своего головного мозга, толку было мало. А стоило появится нормальному инструменту с человеческим лицом и вдруг оказалось, что ничего такого волшебного в FP нет.
Хм... Три раза прочитал эту вашу фразу и так и не понял зарытого смысла
IT>Тоже самое касается и многопоточности. Проблема не в понимании как таковом. Проблема в понимании увеличивающейся на порядок сложности кода, выполняющего задачу многопоточно, по сравнению с тем же кодом, но делающем тоже самое прямолинейно.
Это отлично работает когда прямолинейно делается
printf ("hello world!");
А вот интересно как вы будете прямолинейно обрабатывать запросты в БД от одновременно 1000 юзеров? Наверное складывать в очередь и потом по очереди обрабатывывать да? Т.е. по сути самому реализовывать многопоточность, но в более понятном для вас функциональном стиле — когда все последовательно вот так сразу и работает. Переключением контекстов будет в этом случае последовательное доставание запросов из очереди вами. Данная реализация будет просто частным случаем многопоточной обработки, но синхронизированной "на корню", вместо реально нужных узких мест + вы реализуете функционал уже имеющийся в ОС. Да сейчас это по производительности выгодее, если работать на одном процессоре, но если в самом деле будут десятки ядер...
VD>В общем, факт в том что нет ни одной игрушки получающей реальное приемущество от второго камня. Хотя, сам понимаешь, по уму обязаны получать. Вопли о параллелизме были еще во времена Q2. Но воз и ныне там.
У современных игрушек скорее видюха является бутылочным горлышком, чем процессор. По крайней мере, на мощной видюхе практически нет разницы какой главный процессор (например пень 1.7 или 3.2). Да и движки заточены для максимальной эффективности работы с видюхой.
Первым делом что произойдет при увеличении ядер до N-го количества — это ликвидация отдельных графических и музыкальных чипов, ибо ненужны станут. Разумеется и движки будут существенно переработаны под новую организацию выч-конвеера.
VD>Кон надо менять.
(Код?)
Ну да, разумеется. Скорости передачи данных внутри проца в разы больше, чем наружу через самые быстрые AGP. Если будут дополнительные процессоры, то даже последнюю стадию — сглаживание эффективней будет сделать внутри, чем гнать на какой-то внешний чип.
----------------------
Пофантазирую
Представим например, что мы взяли "крутой" монитор, который может отобразить 3.2k x 2.4k, возьмем 48 бит цвета, получим 46MB готовой информации на один кадр. А для работы конвеера нужны еще пара буферов для промежуточных данных, но уже с плавающей точкой, т.е. 12 байт на точку. При частоте в 100 Герц и двух паралельных конвеерах получим примерно 7.5GB вычисляемых по сложным алгоритмам данных в секунду на конвеер. Хрена себе...
Здравствуйте, alexeiz, Вы писали:
A>Нужны языки программирования и библиотеки, облегчающие написание многопоточного кода. A>Могу сказать, что есть для C++. Futures обсуждаются для включения в стандарт C++. У Herb Sutter'а есть проект Concur.
Фьючерсы — это реально очень-очень крутая штука, наверно, одно из самых интересных обобщений в области ЯП. Тока ИМХО для полного счастья они должны непосредственно языком поддерживаться. Например, вот так: http://www.ps.uni-sb.de/alice/manual/futures.html
Здравствуйте, vdimas, Вы писали:
V>В догонку. Unix-подобная Plan9 способна работать в кластере произвольного размера, представляя кластер как единую систему с т.з. пользователя.
На кластере какой архитектуры ? в том смысле как соединяются элементы кластера ? Полносвязно ? Еще как-то ?
Меня терзают смутные сомнения что на каком-нибудь хитром дереве гиперкубов это представление как единой системы будет нормально работать..
... << RSDN@Home 1.1.4 no artist — AudioTrack 12 >>
CS>>>>Тако ж apache явно просится на такую модель. Нет?
VD>>>Ага. Только на 80 камнях он будет работать не лучше чем на 8. AA>>Гхм. А аргументы какие? Апач активно юзает многопоточность. Те он на ней построен.
VD>Апач не может "юзать" многопоточность активнее ОС на которой он работает. А современные Видовс и Линукс 80 просто не тянут. Так что Апач даже не тисировался на подобных задачах.
Apache dies at about 4,000 parallel sessions. Yaws is still functioning at over 80,000 parallel connections.
...
The problem with Apache is not related to the Apache code per se but is due to the manner in which the underlying operating system (Linux) implements concurrency. We believe that any system implemented using operating system threads and processes would exhibit similar performance. Erlang does not make use of the underlying OS's threads and processes for managing its own process pool and thus does not suffer from these limitations.
Что, конечно, не убирает проблемы:
VD> К тому же Апач это просто средство отформатировать текст и отдать по ХТТП. А вот данные что он отдает еще где-то взять нужно. И тут то и случится узкое местечко. Все клиенты ломанутся к одной СУБД и 72 процессора.
Здравствуйте, Mamut, Вы писали:
M>Что, собственно, приводит к следующему вопросу: А что у нас, собственно, способно прямо сейчас, убудчи запущенным на таком монстре, воспользоваться такой мощью? И что сможет в ближайшие пять лет?
В настоящее время подовляющее число компьютеров используется в качестве замены бумаге, ручке и калькулятору. Между тем есть такой класс задач, как моделирование. Моделировать можно всё — материалы, машины, погоду, поведение живых существ, фондовый рынок, не говоря о таких мелочах, как размещение мебели на кухне. Чем детальнее модель, чем ближе она к оригиналу, тем точнее прогноз свойств и поведения реальных объектов. Если добавить к моделированию генетические алгоритмы, то можно проектировать новые машины, отдельные их узлы не усилиями инженеров, а запустив соответствующую программу. В общем, очень перспективно.
V>>В догонку. Unix-подобная Plan9 способна работать в кластере произвольного размера, представляя кластер как единую систему с т.з. пользователя.
M>На кластере какой архитектуры ? в том смысле как соединяются элементы кластера ? Полносвязно ? Еще как-то ?
Кластер для Plan9 не обязан быть однородным. Да и сложновато и неэффективно все несколько тысяч ядер связать однородной связью. Могу пофантазировать: как вариант разбить на "очаги" в которых будет полносвязные соединения, а "очаги" в свою очередь — в какю-нибудь архитектуру верхнего уровня, например в звезду.
M>Меня терзают смутные сомнения что на каком-нибудь хитром дереве гиперкубов это представление как единой системы будет нормально работать..
Будет. Если м/у 2-мя процессами есть "канал", то процессы запросто работают совместно.
Здравствуйте, vdimas, Вы писали:
V> Да и сложновато и неэффективно все несколько тысяч ядер связать однородной связью.
+1 Собственно в связи с этим вопрос и возник.
V> Могу пофантазировать: как вариант разбить на "очаги" в которых будет полносвязные соединения, а "очаги" в свою очередь — в какю-нибудь архитектуру верхнего уровня, например в звезду.
Динамически???
Или руками(полуавтоматом) с перестройкой под каждую систему ?
V>Будет. Если м/у 2-мя процессами есть "канал", то процессы запросто работают совместно.
Просто Plan9 тогда должен разработать какой-то алгортим маршрутизации для передачи данными между процессами, через промежуточные.
Неужели он сам найдет оптимальный маршрут ?
Только что подумал, что в принципе можно по графу найти кратчайшие пути между всеми парами процессоров.
Просто не может ли получиться так, что основное время система будет заниматься пересылкой данных, а не собственно задачей ?
Допустим в случае однонаправленного кольца передача данных между процессами может стать реальной проблемой..
З.Ы. И что он будет делать если кусок кластера отвалится ? (Злая уборщица передавит канал связи у кольца )
... << RSDN@Home 1.1.4 The Offspring — Cool To Hate >>
Здравствуйте, apple-antonovka, Вы писали:
VD>>Это наивное мнение. Займись этим по плотнее и ты увидишь, что масштабирование SMP-систем совершенно не линейное. AA>Линейное или нет другой вопрос. Тут скорее сказывается ограничения аппаратной архитектуры SMP, но они преодолимы. см NUMA.
Да фиг с ней, с архитектурой. А вот что делать с формулой Амдала?
M>Или руками(полуавтоматом) с перестройкой под каждую систему ?
имеется ввиду некая аппаратная связь, конечно же. Насчет динамической перестройки архитектуры соединений — а смысл? В иерархической модели IP-доменов хорошо живут unix-подбные системы, и Plan9 в т.ч. Да и весь сетевой софт на это заточен.
В принципе, протоколы маршрутизации позволяют рассылать обновления маршрутной информации, что позволит наращивать/изменять систему "на горячую". Но речь не идет, ессно, о подобном штатном режиме (типа, все время менять конфигурацию под каждую задачу), ибо эти протоколы служат лишь для коррекции базы маршрутов согласно аппаратных изменений структуры сети.
V>>Будет. Если м/у 2-мя процессами есть "канал", то процессы запросто работают совместно. M>Просто Plan9 тогда должен разработать какой-то алгортим маршрутизации для передачи данными между процессами, через промежуточные.
M>Неужели он сам найдет оптимальный маршрут ?
Конечно
Статически прописать метрику на подсетки (очаги) проще простого.
M>Только что подумал, что в принципе можно по графу найти кратчайшие пути между всеми парами процессоров.
Маршрутизация встроена в ОС. Но связь каждого с каждым — это не есть важная задача. Думаю, процессам вполне можно задавать границы исполнения в рамках подсетей, и само ПО конфигурировать таким образом, чтобы наиболее общающиеся м/у собой процессы работали в рамках одного полносвязного очага.
M>Просто не может ли получиться так, что основное время система будет заниматься пересылкой данных, а не собственно задачей ?
Нет не будет. Внутри "очага" можно проложить оптические свичи м/у ядрами со скоростями в несколько MB/s. Какие основные задачи решают кластера? Моделирование погоды, расчет диффуров и моделей поведения земной коры, ядерный синтез и т.д. и т.д. Размер самих моделей обычно невелик. Велики вычисления по оной (ради чего все и затевается). Я же не думаю, что вычисления организованы так, что требуют в процессе вычисления постоянно гонять кучу данных. На примере взлома ключа шифра: каждому "очагу" был бы выделен диапазон и шифрованный текст. Обратно получилибы уже готовые данные. В общем, ничего нового. Клиент-серверные системы, а затем многоуровневые для того и появились, чтобы оптимизировать передачу данных.
M>Допустим в случае однонаправленного кольца передача данных между процессами может стать реальной проблемой..
Протоколы маршрутизации весьма успешно справляются в случае множественных путей к адресату. Кстати, откуда взялась характеристика "однонаправленный"?
Да, еще замечание. Если когда-нить пойдет речь о том, что все несколько тысяч обсуждаемы ядер будут физически находится на одном устроцстве (или даже на одном чипе ... а что? эдакий многомерный полимерный электронный пирожок ), то, ясное дело, сетевую систему придумают максимально эффективную для организации внутренних pipes. Не уверен, что речь пойдет об IP, ибо в протоколе IP невообразимый оверхед, совершенно ненужный в случае внутричипового канала.
M>З.Ы. И что он будет делать если кусок кластера отвалится ? (Злая уборщица передавит канал связи у кольца )
Погибнут процессы, которые на нем исполнялись. А чего ты ожидал? Если речь о данных, то Oracle вполне умеет жить на кластерах. Если часть кластера отвалится и конфигурация подразумевает полное дублирование, то продолжит работу вторая половина.
M>>Неужели он сам найдет оптимальный маршрут ?
V>Конечно V>Статически прописать метрику на подсетки (очаги) проще простого.
Но все равно без настройки руками не обойтись, насколько я понимаю.
M>>Только что подумал, что в принципе можно по графу найти кратчайшие пути между всеми парами процессоров.
V> Думаю, процессам вполне можно задавать границы исполнения в рамках подсетей, и само ПО конфигурировать таким образом, чтобы наиболее общающиеся м/у собой процессы работали в рамках одного полносвязного очага.
Ну то есть для получения оптимального результата подкручивать что-то будет надо.
Это как раз то, что меня смущало..
V>Велики вычисления по оной (ради чего все и затевается). Я же не думаю, что вычисления организованы так, что требуют в процессе вычисления постоянно гонять кучу данных.
Представлял именно такую задачу Но это уже из области сфероконей. На практических задачах врядли такое будет, согласен.
V> Клиент-серверные системы, а затем многоуровневые для того и появились, чтобы оптимизировать передачу данных.
+1
M>>Допустим в случае однонаправленного кольца передача данных между процессами может стать реальной проблемой..
V> Кстати, откуда взялась характеристика "однонаправленный"?
Из сфероконического вакуума
V>... то, ясное дело, сетевую систему придумают максимально эффективную для организации внутренних pipes. Не уверен, что речь пойдет об IP, ибо в протоколе IP невообразимый оверхед, совершенно ненужный в случае внутричипового канала.
+1
... << RSDN@Home 1.1.4 The Offspring — The Meaning Of Life >>
0xDEADBEEF wrote:
> kan>Ограничение лишь из-за того, что в С++ нет поддержки ф-ций с > переменным числом аргументов (я сказал, что нет! ). > ...а я сказал, что нас-рать. Ибо есть overloading. И никто не мешает > поределить функцию с одним параметром, затем — с двумя, затем — с тремя. > Далее — насколько позволяют ресурсы, терпение и чувство меры. > Впрочем, нашшот операторов "||" и "&&" чегой-то-там Мейерс против имел. > Как ни странно, я с ним вполне согласен. Ибо, если я скажу "if( future1 > && future2 && non_future )" случится черт-те что с весьма неожиданными > эффектами.
Ну вот и сделай функции
bool ready(future f1){return f1.ready();}
bool ready(future f1, future f2){return f1.ready() && f2.ready();}
и т.п.
В общем мне несовсем понятно в чём возражение (если это возражение ).
> kan>Правда с while непонятно что сделать. Правда я и не понимаю что ты > там хочешь делать... > "пока есть хотя бы одна 'живая' футура", вертимся.
Это практически и означает "f1.wait(); f2.wait();...". Т.е. дождаться завершения всех футур. Зачем это делать через
while/ready? Если надо что-то периодически что-то делать во время ожидания — запусти ещё один тред или timed_wait
используй. В простом случае f[n].timed_wait(timeout / totalNumberOfFutures), при необходимости более "умного" ожидания,
написано ниже.
> kan>Видимо, тебе хочется что-то типа timed_wait но чтобы таймаут был > распределён на всех... но вроде можно обёртку написать, > Да-а-а. Именно такое мне и хочется. Но pthread-ы (по образу и подобию > которых смоделирован boost::thread) это не поддерживает. Делать сие "на > коленке" тоже не выход ибо поимеешь busy-wait.
Всё просто. Имеем таймаут 10 сек и 3 футуры.
Засекаем момент времени. Ждём первую 10 секунд, когда завершается проверяем сколько времени прошло, скажем 3 секунды.
Ждём вторую 10-3=7 секунд, опять проверяем, она завершилась раньше первой, а значит ожидание затратит 0 секунд, на
третью у нас снова 7 сек есть. Третью ждём 7 сек. Т.е. просто из общего таймаута вычитать потраченное время ожидания на
каждую футуру. Если очередная футура превысит остаток таймаута — значит не дождались.
Ещё как вариант — создать ещё одну футуру, которая будет содержать "f1.wait();f2.wait();..." и вызывать timed_wait на
этой футуре.
> kan>Потом, можно соглашение сделать, что "зависать" не будет, а будет по > таймауту отваливаться с ошибкой. > Оки. Теперь смотрим что получается. Одна футура сдохла по исключению. > Началась раскрутка стека "материнской" нитки. А что делать с остальными > (еще живыми) футурами которые оказались вдруг не нужны? Способа > корректно придушить этих "сирот рязанских" нету. Что бум делать? Душить
Один выход. Убивать себя об стену.
> их силой, рискуя уничтожить всю программу или ждать их "естественной" > смерти (неизвестно когда), рискуя тем, что пул потоков (в конце концов) > окажется весь оккупирован этими "сиротами" и приложение выродится > обратно в однопоточное? Или начнем увеличивать пул и с риском > использовать все адресное пространство и угробить всю программу куда > более странным способом? > > А мораль такова, что boost::thread не предусматривает никакого > (Никакого. НИКАКОГО!) способа убиения задачи. Ни синхронного ни > асинхронного. So is только-что-предложенный std::thread. Следовательно, > прибить асинхронную таску НЕ-ВОЗ-МОЖ-НО. С чем я имею вас и поздравить.
Невозможно теоретически в общем случае! И от boost/std это не зависит. Это сущность понятия thread. Иногда можно
прибивать процессы, если известно, что они не оставят какие-нибудь общие ресурсы типа файлов/базы данных/удалённого
сервиса в "неправильном" состоянии.
> kan>future не панацея для сабжа, а вполне чёткая концепция, удобная в > определённых ситуациях. > О! "Сей Меч позволит вам без труда победить трусливого и безоружного > противника". Побежаль покупать. Вы за мной!
И трусливого сложно победить иногда, он может быстро бегать.
>> > Марал, до тех пор пока в C++ не будет юзабельной лямбды, futures > уготовано место рядом с >> > std::for_each, которым все советуют пользоваться, но никто не хочет > kan>Мелочи реализации... > "Дьявол — в мелочах" (с) Молот ведьм.
Тёмные века?
>> > Про требования к памяти скромно помолчим > kan>Фигня какая, замени на auto_ptr > Пасиб за дельный совет. А вы купите пистолет. Когда будете его
А что не устраивает-то? Или тоже задаёшься вопросом "есть ли жизнь без gc"?
Posted via RSDN NNTP Server 2.0
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Здравствуйте, vdimas, Вы писали:
V>Прикольно то, что на позавчера это было обыденным делом (Cray-процессоры).
Не было это обыденным делом. Во-первых Cray сами по себе никогда не были обыденным делом, а во-вторых та экзотика, что считалась на креях, сейчас точно так же спокойно живет на кластерах и никого это не удивляет. Собственно всякие XxxMP оттуда и идут. Только речь в этом топике немножко о другом ИМХО.
V>А в дотнете практически нет средств поддержки массового параллелизма (как и в Виндовс/Линукс в целом).
Работы на этут тему ведутся, причем не одной командой. Из самых известных слышал, наверное, про PLInQ?
V>Ну да, автоматическое распарралеливание — это сложная задача, и она практически не решается в общем случае.
А вот это фик его знает. Насколько мне известно, каких то выводов о решаемости и NP-полноте этой задачи пока никто сделать не смог.
V>Выражаясь современным языком, программы и фреймворки надо будет распространять в исходниках и компилить на конкретной платформе.
Или использовать JIT.
V>Уже давно берутся и всю жизнь брались, но подходят немного с другого конца. Действительно, нет смысла заставлять одну операционную систему управлять всеми 1500 процессоров. Эти процы надо группировать в кластеры. У каждой ячейки кластера пусть будет несколько (немного) процессоров и собственная аппаратная память. И пусть будут мощные каналы связи (не расшаренная память, а именно каналы связи) м/у кластерами. В каждом кластере исполняется своя копия ядра ОС, а с другими кластерами общение происходит через pipes. Именно так сейчас строятся кластеры с сотнями и тысячами процессоров.
Проблема не в архитектуре, проблема в алгоритмах и программах, которые на всем этом будут работать. Пока речь идет о всяких моделированиях, OpenMP сотоварищи хватает. Как только речь заходит о чем то другом, возникает куча проблем.
Здравствуйте, Mirrorer, Вы писали:
M>В Erlang процессы создаются легко и просто. ок. Они не зависят от ОС. ок. Все это прекрасно. Но ведь erl запускается ОС ? и этот самый erl запустится в одном единственном потоке ОС. (если я все правильно понимаю). M>И каким тогда образом он сможет воспользоваться указанной выше мощью сейчас ?
Это было до R11 вроде как сейчас многопроцессорность поддерживается платформой, примерно об этом сегодня в erlangquestions обсуждение было, точнее ещё продолжается — почитай, может что ясней станет.
Здравствуйте, 0xDEADBEEF, Вы писали:
DEA>Мне кажется, что когда настанет время большого количества ядер (от 32-х), появится чип — "параллелизатор", который будет искать подходящие паттерны в однопоточном коде и распараллеливать их автоматически... То есть, делать примерно то же самое, что делает OpenMP в "ручном" режиме.
Не дождетесь. Во первых, такой блок (неупорядоченной выборки команд) есть в любом современном суперскалярном процессоре — он ответственен за выявление инструкций, которые можно выполнить в параллель. Что он и делает. Автоматически. Выявляя зависимости команд по регистрам. А ничего другого анализом машинного кода в реальном времени сделатьи нельзя.
Во вторых — сейчас становится модно исключать этот блок из дизайна процов, заменяя его аппаратной многопоточностью. Так устроен, например, UltraSPARC T1 ("Niagara"). Так что готовьтесь к явному многопоточному программированию.
Здравствуйте, apple-antonovka, Вы писали:
VD>>Лично я незнаю ни одного ЯП с автоматическим распараллеливанием вычислений. Тут пока одна теория. AA>Про OpenMP слыхали? http://www.openmp.org/drupal/node/view/11#Q1
Фортран параллелят полностью автоматически с 80-х годов. Первые работы по автоматическому распараллеливанию были выполнены Куком, с тех пор все достаточно сильно продвинулось вперед.
Здравствуйте, Mirrorer, Вы писали:
M>Здравствуйте, vdimas, Вы писали:
V>> Да и сложновато и неэффективно все несколько тысяч ядер связать однородной связью. M>+1 Собственно в связи с этим вопрос и возник.
Как это ни странно, на самом деле, в современных суперкомпьютерных кластерах с несколькими тысячами ядер именно так и делают. Применяют специальные коммутируемые бесконфликтные сети с небольшим размером пакета. Например, часто используются myrinet и infiniband (wikipedia или google).
Здравствуйте, vdimas, Вы писали:
V>У современных игрушек скорее видюха является бутылочным горлышком, чем процессор.
Только вчера читал статью про разгод Pentium D 805. Он дал 17 кадров в секунду. А разницы не было только на разрешениях 2000+ * что-то там. Так что процессор тоже важен. И это были шутеры с малым количеством мозгов.
V>Первым делом что произойдет при увеличении ядер до N-го количества — это ликвидация отдельных графических и музыкальных чипов, ибо ненужны станут. Разумеется и движки будут существенно переработаны под новую организацию выч-конвеера.
Уверен что этого не произоцдет. В графических чипах уже по 45 микрокамней заточненных для специальных задач.
V>Ну да, разумеется. Скорости передачи данных внутри проца в разы больше, чем наружу через самые быстрые AGP.
Да, но это все фигня. Тут код будет меняться идеологически. Для распаралеливания важны совсем другие факторы нежели для вытягивания жил из одного камня.
V> Если будут дополнительные процессоры, то даже последнюю стадию — сглаживание эффективней будет сделать внутри, чем гнать на какой-то внешний чип.
Пойми, топавая вюдюха стоит более 500 баксов. За эти деньги на нее можно поставить такой же 80-процессорный монстр. А можно и 1000-процессорный специализированый девайс. И мне кажется, что именно последнее и произойдет. Но ЦП всегда работа останется. Ведь чтобы даже монстры выглядили умными для них нужны вычислительные ресурсы. Сейчас они все живут на одном каме. А при 80 процах для них спокойно можно будет выделить 40 процессоров .
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, apple-antonovka, Вы писали:
AA>Два — это ключик /Qparallel для icl которому openmp директивы не нужны
Здорово. То есть Оракул и т.п. осталось только перекомпилировать свой код? Интересно почему они этого до сих пор не сделали?
AA>А автоматически... полностью автоматически это пожалуй только в каком нить смоллтолке сделать можно.
С чего же это? Как раз МТ мягко говоря виховый кандидат.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, vdimas, Вы писали:
V>Прикольно то, что на позавчера это было обыденным делом (Cray-процессоры).
Крэи, говоришь, обыйденное дело? Ты их в живую то видел? А цены их знаешь?
V> Грид процов, встроенная
К твоему сведению Грид — это как раз тенология использующая кучу относительно простых машин.
V>команда асемблера типа fork и всех делов.
То есть ОС у нас аппоратная? Прелесно. Это было бы конечно забавно и примерно об этом (только не так тупо) речь и идет. Но пока этого всего нет. Крэев у нас тоже нет. Да и слабы они уже на сегодня.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
VD> И забавно, что бывшие аутсайдеры — функциональные языки — могут оказаться очень даже в фаворе, так как неизменяемость позволяет автоматизировать распараллеливание на уровне алгоритмов. Вот только для этого еже нужно тонну работы сделать. Лично я незнаю ни одного ЯП с автоматическим распараллеливанием вычислений. Тут пока одна теория.
VD>Человек же на таких объемах уже совсем справиться не сможет. Отдельные алгоритмы конечно можно будет распараллелить, но в целом сложность будет такая, что никто за это не возьмется.
Ну мы работаем над авт. распараллеливанием в нашем ФЯ. Благо модель языка для этого правильная. Правда, язык на данный момент под вычисления заточен, а не под GUI. Могу, если интересно, черкануть немного об этом.
Здравствуйте, vdimas, Вы писали:
V>Ну да, автоматическое распарралеливание — это сложная задача, и она практически не решается в общем случае. В зависимости от того, сколько реально есть процессоров в системе, должен быть порожден соответствующий бинарник, иначе не будет повышения эффективности. Вычислительные алгоритмы на Эльбрусах затачивались на конкретную модификацию с конкретным числом процессоров. Выражаясь современным языком, программы и фреймворки надо будет распространять в исходниках и компилить на конкретной платформе.
Не обязательно, ой не обязательно. Есть и другие идеи, кроме компиляции под конкретную машину...
VD>>Человек же на таких объемах уже совсем справиться не сможет. Отдельные алгоритмы конечно можно будет распараллелить, но в целом сложность будет такая, что никто за это не возьмется.
V>Уже давно берутся и всю жизнь брались, но подходят немного с другого конца. Действительно, нет смысла заставлять одну операционную систему управлять всеми 1500 процессоров. Эти процы надо группировать в кластеры. У каждой ячейки кластера пусть будет несколько (немного) процессоров и собственная аппаратная память. И пусть будут мощные каналы связи (не расшаренная память, а именно каналы связи) м/у кластерами. В каждом кластере исполняется своя копия ядра ОС, а с другими кластерами общение происходит через pipes. Именно так сейчас строятся кластеры с сотнями и тысячами процессоров.
Вам писали про то, что охренительно трудно бывает ЭФФЕКТИВНО ВРУЧНУЮ распараллелить сложный алгоритм. А не о том, что охренительно трудно управлять вагоном процов.
M>>>И каким тогда образом он сможет воспользоваться указанной выше мощью сейчас ?
К>>Это было до R11 вроде как сейчас многопроцессорность поддерживается платформой,
M>Да. Вспомнил что в ДП была новость о поддержке SMP в Erlang. M>Собственно M>
M>In the SMP version of the Erlang virtual machine, there can be many process schedulers running in separate OS threads. As default there will be as many schedulers as there are processors or processor cores on the system.
M>Взято здесь
M>Ну что я могу сказать по этому поводу ...
Там еще одна фишка есть. Можно запустить несколько виртуальных машин на одном компе, под разными процессорами. Так как Эрлангу все равно, где остальные машины наодятся, на том же компе или в соседнем здании то таким образом опять получаем возможность использовать многопроцессорность даже в однопроцессорном Эрланге Собственно, именно так и предлагалось использовать версии до R11
IT>Но здесь, есть одно НО. WinForms не является дружественной средой для многопоточных приложений, и доступ к элементам формы из другого потока закончится исключением.
Что интересно, Qt4 позволило обращаться к UI из других потоков. (Если быть точным, позволило соединять сигналы/слоты через потоки). Насколько хорошо это действует на практике, сказать сложно, не щупал, но обещают
Enhanced thread support, with signal-slot connections across threads and per-thread event loops.
M> Можно запустить несколько виртуальных машин на одном компе, под разными процессорами. Собственно, именно так и предлагалось использовать версии до R11
Ну у меня была такая идея, только показалась несколько корявой. Но на безрыбье как говорится..
А вот подумал и возник еще вопрос. Пока в ОС не будет поддержки новых многоядерных процессоров, то и Erlang их мощу использовать не сможет. Но когда в ОС будет поддержка, тогда и все программы, использующие ОС процессы(потоки) будут тоже использовать 80-core параллелизацию. Ну, что они будут валиться на большом количестве процессов, до тех пор, пока они не будут реализованы настолько же lightweight как и в Erlang это понятно
... << RSDN@Home 1.1.4 Red Hot Chili Peppers — Parallel Universe >>
Здравствуйте, AndrewVK, Вы писали:
V>>Выражаясь современным языком, программы и фреймворки надо будет распространять в исходниках и компилить на конкретной платформе.
AVK>Или использовать JIT.
Угу, но сам JIT — точно так же перед этим проджитить или скомпилить по-месту (смотря на чем он там будет к тому моменту).
Здравствуйте, VladD2, Вы писали:
V>>команда асемблера типа fork и всех делов.
VD>То есть ОС у нас аппоратная? Прелесно. Это было бы конечно забавно и примерно об этом (только не так тупо) речь и идет.
Не вся ОС. Я говорил о первичном распределении выч-ресурсов. Да, без аппаратной поддержки управления пулами процессоров эффективно распаралелливать код не получится. Но все не так тупо было даже на Крее. Эти аппаратные "шедуллеры" неплохо управляются и настраиваются программно. Тут можно привести аналогию с технологией DMA.
VD>Но пока этого всего нет. Крэев у нас тоже нет. Да и слабы они уже на сегодня.
Это те Креи слабы на сегодня, которые на T3E были. Зато Крей уже прямо сейчас лепит серийно кластеры на процессорах Alpha, PowerG4 и даже на обычных пнях. Ноу-хау тут уже скорее в общей архитектуре подобных систем и принципах построения программ для них. Примерно то же самое делает IBM, SUN, HP и с некоторых пор Intel и AMD.
M>Не обязательно, ой не обязательно. Есть и другие идеи, кроме компиляции под конкретную машину...
Например? Для универсальной программной реализации того же самого потребуется много if-ов на ровном месте.
M>Вам писали про то, что охренительно трудно бывает ЭФФЕКТИВНО ВРУЧНУЮ распараллелить сложный алгоритм. А не о том, что охренительно трудно управлять вагоном процов.
Влад имел ввиду и трудности совместной работы вагона процов.
А распараллеливать алгоритмы не так уж сложно, если язык поддерживает. Например, можно ввести расширения типа fork, join. Вот гипотетический пример расчета определителя матрицы на модифицированном C#:
double[,] matrix = GetMatrix(M, N);
double[] partialSums = new double[N]; // массив для частичных сумм определителяjoin {
for (int i = 0; i < N; i++)
fork {
// запускаем расчеты в параллель
partialSums[i] = Matrix.CalcPartialDeterminant(matrix, i);
}
}
// после завершения всех тредов складываем частичные результатыreturn Vector.Sum(partialSums);
Курилка wrote:
> depracated и > Throws: > NoSuchMethodError — always
> ты игнорируешь?
Потому и был поставлен смайлик и слово "реализовано" взято в кавычки.
Posted via RSDN NNTP Server 2.0
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Здравствуйте, vdimas, Вы писали:
V>Угу, но сам JIT — точно так же перед этим проджитить или скомпилить по-месту (смотря на чем он там будет к тому моменту).
M>Да как определитель параллелить — это и ежику понятно. А если алгоритм будет посложнее на порядок? А если нужно будет стремиться к крупно-зернистому параллелизму, а не к мелко-зернистому, пример которого Вы привели (он имеет смысл только на относительно больших размерностях матрицы).
Если речь идет о 1500 процессорах, то дробить надо все, что дробится. Тут главное обеспечить низкую стоимость распараллеливания, т.е. поддержать это дело аппаратно.
M>Голова не опухнет у абстрактного программиста в вакууме? Так что Влад прав — для 80-ядерников кровь из носу как будут нужны средства автоматического распараллеливания задачи. В уме такие задачки нормальные люди не должны решать.
Тут Андрей подсказал наличие проекта PLinQ (Parallel LinQ), как раз автоматически должен будет обрабатывать массивы данных, не привлекая явно программиста.
Здравствуйте, vdimas, Вы писали:
V>Тут Андрей подсказал наличие проекта PLinQ (Parallel LinQ), как раз автоматически должен будет обрабатывать массивы данных, не привлекая явно программиста.
Глянул. Улыбнуло. Функциональные вставки в императивный язык. Осталось всех научить свободно писать на ФЯ и уметь ХОРОШО использовать приемы работы на нем. А иначе это будет просто синтаксический сахар. Да, нового в этом Линке ничего нет.
Здравствуйте, c-smile, Вы писали:
CS>А если пользователю то как раз изначальный вопрос и был: какие пользовательские задачи эта мегапроцессорность решает?
Те же что повышение частоты процессора, только не автоматически и не линейно.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, mik1, Вы писали:
M>Глянул. Улыбнуло. Функциональные вставки в императивный язык. Осталось всех научить свободно писать на ФЯ и уметь ХОРОШО использовать приемы работы на нем. А иначе это будет просто синтаксический сахар. Да, нового в этом Линке ничего нет
Там все прощею. С языком будет идти библиотека позволяющая использовать функции в очень высокоуровневом виде, так что изучать ФП не потребуется. Более того придуман синтаксис очень похожий на SQL, а SQL по сути функциональный язык хорошо известный болшинству прикладников. Так что рассчет верный.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Gaperton wrote: > Другое дело, что надо умудриться на классических языках написать > приложение, которое сможет эффективно загрузить эти 80 ядер. В случае > Эрланга это легче, так как в программе на Эрланге наличие 10К процессов > является штатной ситуацией, и они не работают с общей памятью. Что > исключает потери на блокировках — Эрланг-программы асинхронны и > параллельны по своей природе, и великолепно масштабируются. Таким > образом, существующие приложения на Эрланге уже готовы к такому > масштабированию лучше, чем какие-либо другие.
Не совсем. Остается еще вопрос передачи сообщений и пропускной
способности каналов — это достаточно дорогие операции, если сообщение
пересекает пределы локальной памяти ядра. Так что нужен еще Erlang 2 в
котором будет понятие "близости" процессов.
Еще как вариант, нужен очень умный scheduler, который мог бы мигрировать
процессы между ядрами и обеспечивать автоматический multicast между
локальными копиями памяти.
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, c-smile, Вы писали:
CS>>А если пользователю то как раз изначальный вопрос и был: какие пользовательские задачи эта мегапроцессорность решает?
VD>Те же что повышение частоты процессора, только не автоматически и не линейно.
Ясно. Типа девять теток родят мальцов в девять раз быстрее. ... Ну не в девять а нелинейно скажем в восемь.
Далеко не все задачи можно параллелить короче.
Распаралелливание это проблема не количества процессоров а проблема алгоритмов. Которые еще предстоит разработать.
Т.е. ты хоть обложись камнями но "первый же залетевший GC разрушит цивилизацию"
c-smile wrote: > Т.е. ты хоть обложись камнями но "первый же залетевший GC разрушит > цивилизацию"
Кстати да, пока что единственный разумно быстрый распределенный GC — это
взвешенный счетчик ссылок
Так что все срочно вспоминаем ручное управление памятью.
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, FDSC, Вы писали:
FDS>>Влад, что смешного? Может объяснишь...
VD>Улыбнула наивность. Уверяю тебя, что даже на 16 процессоров эффективное распараллеливание на сегодны — это очень солжная задача. А уж на 1500 просто фантастика. А в дотнете практически нет средств поддержки массового параллелизма (как и в Виндовс/Линукс в целом). Так что появление 80-процессорых камней неизбежно приведет к революции в средствах разрабокти.
Ну, у меня не такая уж и наивность... я же сказал, если будет работать нормально ОС. Я на одних сообщениях вручную вам эти 1500 потоков смогу организовать. Если, конечно, объектов ядра хватит... Но только в данной задаче, не в какой другой.
VD>Человек же на таких объемах уже совсем справиться не сможет. Отдельные алгоритмы конечно можно будет распараллелить, но в целом сложность будет такая, что никто за это не возьмется.
Может, но только в очень узких задачах: тут совершенно верно.
Здравствуйте, last_hardcoder, Вы писали:
_>Здравствуйте, Mamut, Вы писали:
M>>Что, собственно, приводит к следующему вопросу: А что у нас, собственно, способно прямо сейчас, убудчи запущенным на таком монстре, воспользоваться такой мощью? И что сможет в ближайшие пять лет?
_>В настоящее время подовляющее число компьютеров используется в качестве замены бумаге, ручке и калькулятору. Между тем есть такой класс задач, как моделирование. Моделировать можно всё — материалы, машины, погоду, поведение живых существ, фондовый рынок, не говоря о таких мелочах, как размещение мебели на кухне. Чем детальнее модель, чем ближе она к оригиналу, тем точнее прогноз свойств и поведения реальных объектов. Если добавить к моделированию генетические алгоритмы, то можно проектировать новые машины, отдельные их узлы не усилиями инженеров, а запустив соответствующую программу. В общем, очень перспективно.
Ничего перспективного. Задачи моделирования могут быть как хорошо распараллеливаемыми, так и плохо распараллеливаемыми. На суперкомпьютерах, например, обычно ставят много задач на небольшое количество процессоров каждой, а не одну — но распараллеленную на много процессоров: так получается эффективней. А что делать с 80 потоками на обычном компе — никому не известно, ведь задачами моделирования не каждый занимается.
Здравствуйте, Gaperton, Вы писали:
G>Во вторых — сейчас становится модно исключать этот блок из дизайна процов, заменяя его аппаратной многопоточностью. Так устроен, например, UltraSPARC T1 ("Niagara"). Так что готовьтесь к явному многопоточному программированию.
Ну, Intel (в случае Itanium) полагается все же на компилятор.
Здравствуйте, Mamut, Вы писали:
M>Что интересно, Qt4 позволило обращаться к UI из других потоков. (Если быть точным, позволило соединять сигналы/слоты через потоки).
Это не одно и то же. В WinForms 2 тоже можно синхронизацию с UI сделать прозрачной, если использовать AsyncOperation. Но сами контролы от этого многопоточность поддерживать не стали. Просто стало возможно писать асинхронные алгоритмы, не задумываясь о том, какая синхронизация нужна в каждом конкретном случае.
Здравствуйте, IT, Вы писали:
IT>Здравствуйте, Mamut, Вы писали:
M>>Что, собственно, приводит к следующему вопросу: А что у нас, собственно, способно прямо сейчас, убудчи запущенным на таком монстре, воспользоваться такой мощью? И что сможет в ближайшие пять лет?
IT>Эх, а я бы не отказался. 80, не 80, но штук 8 точно не помешало бы. Вот запускаю сейчас дефрагментацию сразу на 3 vmwares, и эти сволочи сожрали все 100% на моих dual core. А было бы 8 процов, я бы ещё пару vmwares запустил
А вот у Sun уже есть 8 ядерные процессоры Сервер UltraSPARC T1000 всего за 3000 долларов
Здравствуйте, AndrewVK, Вы писали:
AVK>Здравствуйте, Gaperton, Вы писали:
G>>Во вторых — сейчас становится модно исключать этот блок из дизайна процов, заменяя его аппаратной многопоточностью. Так устроен, например, UltraSPARC T1 ("Niagara"). Так что готовьтесь к явному многопоточному программированию.
AVK>Ну, Intel (в случае Itanium) полагается все же на компилятор.
Вопрос только — где этот итаниум? Интел с ХП в этом году 16 миллиардов планировали втюхать в продвижение его, но вот есть ощущение, что от х86-х процов прибыль больше и у тех и у других будет
Здравствуйте, AndrewVK, Вы писали:
AVK>Здравствуйте, Курилка, Вы писали:
К>>Вопрос только — где этот итаниум?
AVK>Интел говорит, что раскупают его хорошо и продажи растут. Просто, при его цене, очевидно, что это продукт не для массового рынка. Ровно как и Ниагара.
Задумывалось как раз для массового (замена х86), насколько я помню, (в отличии от Ниагары) но вот реалии, видимо, выглядят иначе...
А конкретных линок с цифрами под рукой нет?
Здравствуйте, mik1, Вы писали:
M>Влад, я себе в планы это закину. В течении двух недель пришлю набросок с описанием нашего языка и с идеями по распараллеливанию. А там дальше посмотрим.
ОК, будем ждать.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, FDSC, Вы писали:
FDS>Здравствуйте, last_hardcoder, Вы писали:
_>>Здравствуйте, Mamut, Вы писали:
M>>>Что, собственно, приводит к следующему вопросу: А что у нас, собственно, способно прямо сейчас, убудчи запущенным на таком монстре, воспользоваться такой мощью? И что сможет в ближайшие пять лет?
_>>В настоящее время подовляющее число компьютеров используется в качестве замены бумаге, ручке и калькулятору. Между тем есть такой класс задач, как моделирование. Моделировать можно всё — материалы, машины, погоду, поведение живых существ, фондовый рынок, не говоря о таких мелочах, как размещение мебели на кухне. Чем детальнее модель, чем ближе она к оригиналу, тем точнее прогноз свойств и поведения реальных объектов. Если добавить к моделированию генетические алгоритмы, то можно проектировать новые машины, отдельные их узлы не усилиями инженеров, а запустив соответствующую программу. В общем, очень перспективно.
FDS>Ничего перспективного. Задачи моделирования могут быть как хорошо распараллеливаемыми, так и плохо распараллеливаемыми. На суперкомпьютерах, например, обычно ставят много задач на небольшое количество процессоров каждой, а не одну — но распараллеленную на много процессоров: так получается эффективней. А что делать с 80 потоками на обычном компе — никому не известно, ведь задачами моделирования не каждый занимается.
Прямо, как Билл Гейтс: "Народу интернет не нужен, народу интернет не нужен..." Начнём с того что моделирование физической реальности сейчас самое модное направление развития игровой индустрии. Но теоритически можно моделировать и то, сколько проедет ваш личный автомобиль при вашем стиле вождения, и сколько протянете вы сами с учётом текущего состояния организма, режима физических нагрузок, питания и всего остального. Кроме того можно попробовать что-то виртуально изменить и посмотреть, как это скажется через десятки лет. Конечно, для этого нужны достаточно подробные модели, а результат всё равно будет не точен. Но это лучше чем жить вслепую.
Здравствуйте, Курилка, Вы писали:
К>Вопрос только — где этот итаниум? Интел с ХП в этом году 16 миллиардов планировали втюхать в продвижение его, но вот есть ощущение, что от х86-х процов прибыль больше и у тех и у других будет
Если быть спроведливым, то UltraSPARC T1 примерно втом же месте. Как говорится "все говорят что мы в месте, но не многие знают в каком...".
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, Mamut, Вы писали:
M>Что, собственно, приводит к следующему вопросу: А что у нас, собственно, способно прямо сейчас, убудчи запущенным на таком монстре, воспользоваться такой мощью? И что сможет в ближайшие пять лет?
Думаю, если я запущу (даже без перекомпиляции) весь тот софт, что я делал для кластеров, то он сразу всю мощщю и заэксплуатирует. Тем более что мой вариант message passing сам умеет решать, когда общую память использовать, а когда сериализовать сообщения.
Здравствуйте, Kolhoz, Вы писали:
K> Думаю, если я запущу (даже без перекомпиляции) весь тот софт, что я делал для кластеров, то он сразу всю мощщю и заэксплуатирует. Тем более что мой вариант message passing сам умеет решать, когда общую память использовать, а когда сериализовать сообщения.
Это очень редкий пример софта специально разрабатывавшегося в рассчете на параллельное вычисления. Да и уверен, что класс задачь там особый.
Здесь же речь идет скорее о повседневном софте вроде тексовых редакторв, игрушек, ОС...
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
VD>Это очень редкий пример софта специально разрабатывавшегося в рассчете на параллельное вычисления.
Ну да. Специально. А кто мешает сейчас всем разрабатывать специально?
VD> Да и уверен, что класс задачь там особый.
Вовсе не особый. Всего лишь нереляционная СУБД с некоторыми хитрыми технологиями поиска. Никаких вычислений...
VD>Здесь же речь идет скорее о повседневном софте вроде тексовых редакторв, игрушек, ОС...
Текстовым редакторам вообще никакой производительности не нужно. Прошло то время, когда emacs расшифровывался как "eight megabytes, constantly swapping". Игрушки разпараллеливаются довольно легко — у них обычно модульность на высоте, достаточно разпараллелить графический движок, и вот уже ощутимый прирост в скорости готов. ОС — сто лет как есть такие ОС, которым любое количество процессоров не проблема. Недавно даже такое убожество, как Linux к ним присоединилось, что уж говорить о серьёзных системах. Я сам видел IRIX на системе с сотней процессоров (NUMA, конечно же, не чистый SMP). Linux с O(1) scheduler и даже SMP потянет (только вот толку от SMP на таких масштабах не будет — память, зараза, узким местом станет). Solaris тоже без проблем потянет весьма немалое количество процессоров.
Здравствуйте, FR, Вы писали:
FR>Про консольные системы не надо, повторно грубить не буду, но поинтерисуйся какие процессоры используются в xbob360 да и в Nintendo Wii тоже вроде есть гипертрединг. Cell конечно особняком, но даже для него стиль OpenMP вполне работает.
Я последнее время за событиями не слежу, но еще совсем недавно читал, что процессор Wii — это Pentium 3 (как и у первого Xbox), у которого никакого гипертрединга, по вполне понятным причинам, быть не может.
... << RSDN@Home 1.2.0 alpha rev. 655>>
'You may call it "nonsense" if you like, but I'VE heard nonsense, compared with which that would be as sensible as a dictionary!' (c) Lewis Carroll
Здравствуйте, Klapaucius, Вы писали:
K>Я последнее время за событиями не слежу, но еще совсем недавно читал, что процессор Wii — это Pentium 3 (как и у первого Xbox), у которого никакого гипертрединга, по вполне понятным причинам, быть не может.
И как ты представляешь выпуск новой игровой приставки на процессоре давно снятом с производства?
Там специализированный ibm'овский PowerPC, частота на самом деле относительно низкая (вроде 800Mh точных технических данных пока нет только слухи), но процессор вполне современный, и гипертрединг скорее всего есть (смысла урезать эту возможность никакого)
Здравствуйте, Klapaucius, Вы писали:
K>Здравствуйте, FR, Вы писали:
FR>>Про консольные системы не надо, повторно грубить не буду, но поинтерисуйся какие процессоры используются в xbob360 да и в Nintendo Wii тоже вроде есть гипертрединг. Cell конечно особняком, но даже для него стиль OpenMP вполне работает.
K>Я последнее время за событиями не слежу, но еще совсем недавно читал, что процессор Wii — это Pentium 3 (как и у первого Xbox), у которого никакого гипертрединга, по вполне понятным причинам, быть не может.
Хотя нет, вру. Это PowerPC, правда пока вроде бы точно не известно какой — может и G5 но гипертридинга все равно нет, так что не важно.
... << RSDN@Home 1.2.0 alpha rev. 655>>
'You may call it "nonsense" if you like, but I'VE heard nonsense, compared with which that would be as sensible as a dictionary!' (c) Lewis Carroll
Здравствуйте, FR, Вы писали:
FR>Здравствуйте, Klapaucius, Вы писали:
K>>Я последнее время за событиями не слежу, но еще совсем недавно читал, что процессор Wii — это Pentium 3 (как и у первого Xbox), у которого никакого гипертрединга, по вполне понятным причинам, быть не может.
FR> FR>И как ты представляешь выпуск новой игровой приставки на процессоре давно снятом с производства?
Никак не представляю. Вот только P3 не снят с производства. С производства даже кажется i386 не снят.
Впрочем насчет Power я и сам уже вспомнил, см. выше.
... << RSDN@Home 1.2.0 alpha rev. 655>>
'You may call it "nonsense" if you like, but I'VE heard nonsense, compared with which that would be as sensible as a dictionary!' (c) Lewis Carroll
Здравствуйте, Klapaucius, Вы писали:
FR>> FR>>И как ты представляешь выпуск новой игровой приставки на процессоре давно снятом с производства?
K>Никак не представляю. Вот только P3 не снят с производства. С производства даже кажется i386 не снят.
По моему снят, вроде писали пару лет назад.
А про 386 на сказки похоже, NASA недавно вроде не смогла найти для ремонта.
Здравствуйте, Klapaucius, Вы писали:
K>>Я последнее время за событиями не слежу, но еще совсем недавно читал, что процессор Wii — это Pentium 3 (как и у первого Xbox), у которого никакого гипертрединга, по вполне понятным причинам, быть не может.
K>Хотя нет, вру. Это PowerPC, правда пока вроде бы точно не известно какой — может и G5 но гипертридинга все равно нет, так что не важно.
Почему нет?
В Xbox360 тоже заказной PowerPC и ядра с гипертредингом, в cell базовое ядро тоже подерживает SMT (аналог гипертрединга).
Здравствуйте, FR, Вы писали:
K>>Это PowerPC, правда пока вроде бы точно не известно какой — может и G5 но гипертридинга все равно нет, так что не важно. FR>Почему нет? FR>В Xbox360 тоже заказной PowerPC и ядра с гипертредингом, в cell базовое ядро тоже подерживает SMT (аналог гипертрединга).
Сравнивать XBox360 или там PS3 с Wii — это даже не смешно. Нинтендовские приставки в аппаратном плане всегда были барахлом.
Достаточно средств на доработку процессора они не виделят и будет, вернее всего, в этом самом Wii какой-нибудь ноутбучный G4.
Что касается SMT, то он, как и гипертрединг не идет ни в какой сравенние с настоящей многоядерностью, да и не во всех G5 он есть. А настоящий двухядерный G5 с SMT — 970MP, или как там его, не перегреется в такой маленькой коробочке только если к нему не подводить электричество.
... << RSDN@Home 1.2.0 alpha rev. 655>>
'You may call it "nonsense" if you like, but I'VE heard nonsense, compared with which that would be as sensible as a dictionary!' (c) Lewis Carroll
Здравствуйте, Klapaucius, Вы писали:
K>Здравствуйте, FR, Вы писали:
K>>>Это PowerPC, правда пока вроде бы точно не известно какой — может и G5 но гипертридинга все равно нет, так что не важно. FR>>Почему нет? FR>>В Xbox360 тоже заказной PowerPC и ядра с гипертредингом, в cell базовое ядро тоже подерживает SMT (аналог гипертрединга).
K>Сравнивать XBox360 или там PS3 с Wii — это даже не смешно. Нинтендовские приставки в аппаратном плане всегда были барахлом.
Это они компенсируют играми и очень правильным пиаром
Хотя Gekko для 99 года не такое уж и барахло.
K>Достаточно средств на доработку процессора они не виделят и будет, вернее всего, в этом самом Wii какой-нибудь ноутбучный G4.
Фиг его знает, видно будет.
K>Что касается SMT, то он, как и гипертрединг не идет ни в какой сравенние с настоящей многоядерностью, да и не во всех G5 он есть. А настоящий двухядерный G5 с SMT — 970MP, или как там его, не перегреется в такой маленькой коробочке только если к нему не подводить электричество.
Ну от xbob360 процессор конечно неплохо греется, но там 3 ядра с SMT, проблема как видно уже решена, так что вряд-ли.
Здравствуйте, gandalfgrey, Вы писали:
G>Это означает всего лишь то, что Ерлангу нужно по 1-му системному процессу на ядро, чтобы использовать всю мощу многоядерности. А свои процессы будут уже распределяться ерланговским шедулером внутри этих 20-ти системных процессов. И винда, и линукс вытянут 20 процессов без натуги. А сотни тысяч ерланговских процессов будут исключительно внутри, и ОС ничего о них не знает, отчего и не напрягается.
Это означает, что на 80-процессорном сервере Элранг будет точно так же бессмысленнен как С с ручным управлением многопоточностью, так как бутылочным голрышком станет шедулер ОС.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, Kolhoz, Вы писали:
K> Ну да. Специально. А кто мешает сейчас всем разрабатывать специально?
Сложноть. Ее бы без заморочек на распараллеливание осилить. А распараллеливание возводитэ сложность в квадрат.
K> Текстовым редакторам вообще никакой производительности не нужно.
Глубоко ошибашся. Там как раз все вылизывается до нельзя. Да и фунциональностью жертвуют ради этой самой скорости.
K> Прошло то время, когда emacs расшифровывался как "eight megabytes, constantly swapping".
Времена всегда одинаковые. На повышение вычислительных ресурсов индустрия всегда отвечает повышением сложности решений, что порождает как объективное повышение выч. потребностей, так и вызванные повышеннием абстракции.
Когда-то ООП считалось жудким оверхэдом. Сегодня постоить модель АСТ или модель контента редактируемого документа — это совершенно нормальное явление. В будущем все будет только усугубляться. Абстрация будет становиться все более высокой, что соотвественно неминуемо будет приводить к накладным расходам. Единственный способ боросться с такими рсходами — это повышать интеллектуальность средств разработки.
K> Игрушки разпараллеливаются довольно легко — у них обычно модульность на высоте, достаточно разпараллелить графический движок, и вот уже ощутимый прирост в скорости готов.
Факты говорят об обратном. Поака что ни один шутер не побежал быстрее на двух или четырех камнях. "Легко" — это на словах. А в реальной жизни все не так просто. Да ивыигрышь от одного каманя обычно компенсируется затратами на синхронизацию (коих раньше просто не было).
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
VladD2 wrote: > Это означает, что на 80-процессорном сервере Элранг будет точно так же > бессмысленнен как С с ручным управлением многопоточностью, так как > бутылочным голрышком станет шедулер ОС.
С чего бы? Разбиваем 80 процессоров на 8 кластеров и вперед с песней.
Здравствуйте, AndrewVK, Вы писали:
AVK>Насе нужен процессор в mil исполнении, а не любой 386. Аналоги 386 по сю пору выпускаются в большом кол-ве для промышленной автоматики.
Да что там 386? Даже доисторические 8086 выпускают и разные Спектрумовские. Что не сгодится для встроенных девайсов?
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, Cyberax, Вы писали:
C>>С чего бы? Разбиваем 80 процессоров на 8 кластеров и вперед с песней.
VD>Какие еще кластеры? Кроме процессоров, ну, и возможно шины все остальное общее — разделяемые ресурсы. 80 процессоров ведь в одном камне!
Так уже в современных процессорах есть средства виртуализации, например можно на каждом ядре по OS запустить, думаю не будет проблемой для 80 ядерного процессора запуск 10 OS с выделением каждому 8 ядер.
> Факты говорят об обратном. Поака что ни один шутер не побежал быстрее на двух или четырех камнях.
Вообще-то некоторое ускорение от многоядерности в некоторых шутерах есть. http://www.elitebastards.com/page.php?pageid=13241
Но оно пока слишком незначительное, чтобы его воспринимать всерьез
Кстати, ATI'ные дрова теперь тоже многопоточные.
> "Легко" — это на словах. А в реальной жизни все не так просто. Да ивыигрышь от одного каманя обычно компенсируется затратами на синхронизацию (коих раньше просто не было).
Posted via RSDN NNTP Server 2.0
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Здравствуйте, VladD2, Вы писали:
VD>Факты говорят об обратном. Поака что ни один шутер не побежал быстрее на двух или четырех камнях. "Легко" — это на словах. А в реальной жизни все не так просто. Да ивыигрышь от одного каманя обычно компенсируется затратами на синхронизацию (коих раньше просто не было).
фигня. отстал от жизни, Влад. q4 — быстрей бежит. не в два конечно раза, но всеже. вот
например, http://www.fcenter.ru/online.shtml?articles/hardware/processors/16179
посмотри на тест q4 — двуядерный x2 4800(2.4 мегагерц) уделывает более быстрый по частоте, но одноядерный fx57(2.8мегагерц). причем прилично — у фх — 129fps, у x2 — 153.
конечно, там не только вклад квейковского движка(который именно с quake4 какойто там версии, 1.2 чтоли более основательно оптимизировали под smp), но и оптимизации под smp в драйверах видео. но все равно, факт на лицо.
Здравствуйте, VladD2, Вы писали:
VD>Это означает, что на 80-процессорном сервере Элранг будет точно так же бессмысленнен как С с ручным управлением многопоточностью, так как бутылочным голрышком станет шедулер ОС.
Разве у меня есть хоть слово про шедулер ОС ? У меня написано — "сотни тысяч ерланговских процессов будут исключительно внутри, и ОС ничего о них не знает,"
На Ниагаре это себя хорошо зарекомендовало
Здравствуйте, FR, Вы писали:
VD>>Какие еще кластеры? Кроме процессоров, ну, и возможно шины все остальное общее — разделяемые ресурсы. 80 процессоров ведь в одном камне!
FR>Так уже в современных процессорах есть средства виртуализации, например можно на каждом ядре по OS запустить, думаю не будет проблемой для 80 ядерного процессора запуск 10 OS с выделением каждому 8 ядер.
И пользователь — бог Шива — работает 20 руками в 10 операционках, наблюдая за ними в 10 мониторах 20 глазами....
Здравствуйте, Cyberax, Вы писали:
>> параллельны по своей природе, и великолепно масштабируются. Таким >> образом, существующие приложения на Эрланге уже готовы к такому >> масштабированию лучше, чем какие-либо другие. C>Не совсем. Остается еще вопрос передачи сообщений и пропускной C>способности каналов — это достаточно дорогие операции, если сообщение C>пересекает пределы локальной памяти ядра. Так что нужен еще Erlang 2 в C>котором будет понятие "близости" процессов.
Совсем, совсем . И так все нормально. Рантайм R11 умеет работать на SMP — а именно так видны многоядерные конфигурации. Несколько рантаймов умеют объединятся в кластер. Ничего больше на практике не нужно.
C>Еще как вариант, нужен очень умный scheduler, который мог бы мигрировать C>процессы между ядрами и обеспечивать автоматический multicast между C>локальными копиями памяти.
Да все нормально, умные пацаны обо всем уже позаботились. Никакого "Эрланг 2" не нужно. "Умный шедулер" уже реализован в R11 и умеет балансировать нагрузку на ядрах, которые видны как SMP независимо от того, локальная у них память или общая. Потому, что "автоматический мультикаст" на самом деле давно реализован в железе на уровне протоколов типа Hypertransport и RapidIO — они выражают общую память через посылки сообщений. Именно так работают сейчас многоядерные оптероны — у каждого из них своя память и они лезут друг к другу в память и кэш через гипертранспорт. При этом, вся система видна как система с общей памятью (архитектура ccNUMA, google)
Gaperton wrote: > C>Не совсем. Остается еще вопрос передачи сообщений и пропускной > C>способности каналов — это достаточно дорогие операции, если сообщение > C>пересекает пределы локальной памяти ядра. Так что нужен еще Erlang 2 в > C>котором будет понятие "близости" процессов. > Совсем, совсем . И так все нормально. Рантайм R11 умеет работать на SMP > — а именно так видны многоядерные конфигурации. Несколько рантаймов > умеют объединятся в кластер. Ничего больше на практике не нужно.
SMP для 80 ядер вряд ли будет возможен — так как доступ к памяти станет
больным местом. Значит как-то надо эти ядра делить на кластеры, которые
будут взаимодействовать только через каналы связи.
А если есть каналы связи с конечной пропускной способностью, то их можно
переполнить В Эрланге я что-то ничего не видел на эту тему, так как
он все же не ориентирован на 80 ядер.
> C>Еще как вариант, нужен очень умный scheduler, который мог бы мигрировать > C>процессы между ядрами и обеспечивать автоматический multicast между > C>локальными копиями памяти. > Да все нормально, умные пацаны обо всем уже позаботились. Никакого > "Эрланг 2" не нужно. "Умный шедулер" уже реализован в R11 и умеет > балансировать нагрузку на ядрах, которые видны как SMP независимо от > того, локальная у них память или общая.
Это-то понятно, а вот как сделать мультикастовые сообщения, например?
Чтобы сообщение от одного потока к 10 другим нужно было отослать только
1 раз, а не 10.
Здравствуйте, Cyberax, Вы писали:
C>Gaperton wrote: >> C>Не совсем. Остается еще вопрос передачи сообщений и пропускной >> C>способности каналов — это достаточно дорогие операции, если сообщение >> C>пересекает пределы локальной памяти ядра. Так что нужен еще Erlang 2 в >> C>котором будет понятие "близости" процессов. >> Совсем, совсем . И так все нормально. Рантайм R11 умеет работать на SMP >> — а именно так видны многоядерные конфигурации. Несколько рантаймов >> умеют объединятся в кластер. Ничего больше на практике не нужно. C>SMP для 80 ядер вряд ли будет возможен — так как доступ к памяти станет C>больным местом. Значит как-то надо эти ядра делить на кластеры, которые C>будут взаимодействовать только через каналы связи.
Ну, внутри все будет так, как ты говоришь. А снаружи, с точки зрения софта, это скорее всего будет выглядеть как SMP.
Пример — два двухъядерных процессора Opteron. Ядра не равноправны — в рамках одного кристалла они разделяют кэш. К соседнему кристаллу лезут через HyperThreading. И ничего — все равно это выглядит для софта как SMP, потому как это проще программить. И ничего.
C>А если есть каналы связи с конечной пропускной способностью, то их можно C>переполнить В Эрланге я что-то ничего не видел на эту тему, так как C>он все же не ориентирован на 80 ядер.
Да ему пофиг, сколько ядер. Он по одному шедулеру на ядро запустит, и все. Разделяемых данных нет, программа асинхронна, и занята не только посылкой сообщений. Так что просадка по производительности будет незначительна.
>> C>Еще как вариант, нужен очень умный scheduler, который мог бы мигрировать >> C>процессы между ядрами и обеспечивать автоматический multicast между >> C>локальными копиями памяти. >> Да все нормально, умные пацаны обо всем уже позаботились. Никакого >> "Эрланг 2" не нужно. "Умный шедулер" уже реализован в R11 и умеет >> балансировать нагрузку на ядрах, которые видны как SMP независимо от >> того, локальная у них память или общая. C>Это-то понятно, а вот как сделать мультикастовые сообщения, например? C>Чтобы сообщение от одного потока к 10 другим нужно было отослать только C>1 раз, а не 10.
Здравствуйте, Cyberax, Вы писали:
C>VladD2 wrote: >> Это означает, что на 80-процессорном сервере Элранг будет точно так же >> бессмысленнен как С с ручным управлением многопоточностью, так как >> бутылочным голрышком станет шедулер ОС. C>С чего бы? Разбиваем 80 процессоров на 8 кластеров и вперед с песней.
В 80-ядерном проце будет 80 копий шедулера оперсистемы, на каждом из которых будет крутится по одному потоку процесса Erlang Runtime. В чем проблема? Какие кластеры?
Здравствуйте, Gaperton, Вы писали:
G>Здравствуйте, Cyberax, Вы писали:
G>Пример — два двухъядерных процессора Opteron. Ядра не равноправны — в рамках одного кристалла они разделяют кэш. К соседнему кристаллу лезут через HyperThreading. И ничего — все равно это выглядит для софта как SMP, потому как это проще программить. И ничего.
А там разве гипертридинг ?
G>В Эрланге нет мультикастовых сообщений.
А будет : Армстронг хочет оператор bang-bang, он же !!
Здравствуйте, gandalfgrey, Вы писали:
G>Здравствуйте, Gaperton, Вы писали:
G>>Здравствуйте, Cyberax, Вы писали:
G>>Пример — два двухъядерных процессора Opteron. Ядра не равноправны — в рамках одного кристалла они разделяют кэш. К соседнему кристаллу лезут через HyperThreading. И ничего — все равно это выглядит для софта как SMP, потому как это проще программить. И ничего. G>А там разве гипертридинг ?
Имелся в виду гипертранспорт, конечно. Апичатка.
G>>В Эрланге нет мультикастовых сообщений. G>А будет : Армстронг хочет оператор bang-bang, он же !!
Читал я про bang-bang. Зря он это затеял, имхо. вери имхо, бред это редкостный.
Gaperton wrote: >> > Это означает, что на 80-процессорном сервере Элранг будет точно так же >> > бессмысленнен как С с ручным управлением многопоточностью, так как >> > бутылочным голрышком станет шедулер ОС. > C>С чего бы? Разбиваем 80 процессоров на 8 кластеров и вперед с песней. > В 80-ядерном проце будет 80 копий *шедулера оперсистемы*, на каждом из > которых будет крутится *по одному потоку* процесса Erlang Runtime. В чем > проблема? Какие кластеры?
Оверхед больше Ну да ладно, это детали.
Gaperton wrote: > C>SMP для 80 ядер вряд ли будет возможен — так как доступ к памяти станет > C>больным местом. Значит как-то надо эти ядра делить на кластеры, которые > C>будут взаимодействовать только через каналы связи. > Ну, внутри все будет так, как ты говоришь. А снаружи, с точки зрения > софта, это скорее всего будет выглядеть как SMP. > Пример — два двухъядерных процессора Opteron. Ядра не равноправны — в > рамках одного кристалла они разделяют кэш. К соседнему кристаллу лезут > через HyperThreading. И ничего — все равно это выглядит для софта как > SMP, потому как это проще программить. И ничего.
Понимаешь, для двух процессоров это прокатит — так как достаточно редкие
обращения к общей памяти не будут делать погоды. А вот для 80
процессоров — уже не уверен, нужно уже что-то другое. Я не сомневаюсь в
способности использовать 80 ядер для запуска 80 параллельных копий
Erlang'а.
Мне больше интересно как будет организовано управление каналами связи
между ними. Один центральный контроллер уже не прокатит — так как его
полоса пропускания должна расти квадратично с числом ядер. Значит нужна
сетевая структура с маршрутизацией сообщений, а значит появятся
интересные проблемы — чем дальше идет сообщение, тем это будет
медленнее. А значит язык должен это как-то учесть
Причем если в современных кластерах обычно сообщения между узлами
передаются все же достаточно редко и их стараются делать coarse-grained,
то при использовании кластерного подхода для создания одного компьютера,
относительный overhead нужно сделать НАМНОГО меньшим. Кому нужен будет
Erlang с 100000 процессов, если переключение на другой процесс будет
занимать миллисекунду (утрировано)?
> C>Это-то понятно, а вот как сделать мультикастовые сообщения, например? > C>Чтобы сообщение от одного потока к 10 другим нужно было отослать только > C>1 раз, а не 10. > В Эрланге нет мультикастовых сообщений.
Это-то и плохо.
Здравствуйте, gandalfgrey, Вы писали:
G>Разве у меня есть хоть слово про шедулер ОС ? У меня написано — "сотни тысяч ерланговских процессов будут исключительно внутри, и ОС ничего о них не знает,"
"Процессы" Эрланга это большая фикция. Сами по себе они не позволят использовать те самые 80 процессоров.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
>> Факты говорят об обратном. Поака что ни один шутер не побежал быстрее на двух или четырех камнях.
S>Вообще-то некоторое ускорение от многоядерности в некоторых шутерах есть. S>http://www.elitebastards.com/page.php?pageid=13241
Ага. Иногда +3%, а иногда -3%.
S>Но оно пока слишком незначительное, чтобы его воспринимать всерьез
А иногда отрицательны.
S>Кстати, ATI'ные дрова теперь тоже многопоточные.
А толк то с этого есть? И вообще, если дрова занимают значительное процессрное время, то это означет, что крта дермо, так как вместо аппратной реализации используется эмуляция.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
VladD2 wrote: > G>Разве у меня есть хоть слово про шедулер ОС ? У меня написано — "сотни > тысяч ерланговских процессов будут исключительно внутри, и ОС ничего о > них не знает," > "Процессы" Эрланга это большая фикция. Сами по себе они не позволят > использовать те самые 80 процессоров.
Причины?
Здравствуйте, Gaperton, Вы писали:
G>Эта мода (VLIW, в случае Itanium) — уже в прошлом. У такой архитектуры есть ряд недостатков, один из которых связан, например, с тем, что широкий VLIW плохо кладется на кристалл — у него широкие шины. Это раздувает кристалл, делая его дороже, и снижает тактовые частоты из-за длинных связей. Например, пресловутый E2K, о котором много говорили, работает на практике (а не на бумаге) на частоте 300 МГц.
Нет в природе никакого E2K. А то что работает работает на 300 мегагерцаях явно из-за проблем с производственной и инженерной базой. Но даже на 300 мегагерцах показывает очень не хилые результаты. Сравнимые с гигогерцовыми процессорами.
G> По критерию "производительность с квадратного миллиметра" он далеко не блещет. А это — основное в нашем деле.
За то по критерию "производительность на ват" очень даже блещет. Насколько я помню у него 5 ват.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
VD>За то по критерию "производительность на ват" очень даже блещет. Насколько я помню у него 5 ват.
Да, кстати. Практика показала, что в формфакторе UMPC интел со свистом слил банальному C7-M, несмотря на то, что поначалу производители начали пользовать ULV версии Core. Особо характерен пример Q1 — вышедший в оригинале на интеле, сейчас он переделывается под C7, бо аккумуляторы нынешние далеки от совершенства.
... << RSDN@Home 1.2.0 alpha rev. 646 on Windows XP 5.1.2600.131072>>
Здравствуйте, Cyberax, Вы писали:
C>Во-первых, никто не мешает запустить ДВЕ копии интерпретатора Эрланга, C>на разных процессорах и связать их как угодно (в том числе копии могут C>быть на других машинах). Это УЖЕ работает.
Толку то? Еще раз, последний, сама ОС не повзволят использовать 80 процессоров одновременно. Больше я на подобные вопрсы не отвечаю.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, IT, Вы писали:
IT>Давай на примерах. Допустим у нас есть простая форма с двумя TextBoxes и одной кнопкой. По кнопке запускается длительный процесс, который в качестве параметра берёт текст из первого бокса, а результат помещает во второй.
Просвятите пожалуйста про Invoke(): метод AfterLongProcess() выполнится в потоке UI (там где button1_Click2 отработал) или в вызванном потоке? Наверное всё-таки в UI иначе зачем огород городить. Почему нельзя здесь же кинуть MessageBox об исключении? Или это просто для сигнализации о том что в _result невалидная информация? IT>
Совковая лопата опущена
IT>А теперь пофантазируем, что мог быть сделать катарпиллер. Допустим, у нас имелась бы возможность сказать компилятору, например, с помощью атрибутов, что доступ к объектам наследникам класса Control может осуществлятся только из потока UI. Предположим также, что у нас есть некая языковая конструкция, которая указывает компилятору, что определённая часть кода должна выполняться в новом потоке. Вот как мог бы выглядеть гипотетический код:
IT>
textBox2.Text = LongProcess(textBox1.Text); — это в каком потоке выполняется? А если в это время из основного потока что-нить сюда запишут? Ах да, "доступ к объектам наследникам класса Control может осуществлятся только из потока UI", а тогда что-за поток мы создали в newthread ? В этом же новом потоке мы легко закрываем waitForm. А что тогда мешало нам сделать это в LongProcessThread() ? И сообщение об исключении там же кинуть.
Кстати newthread вызывается до waitForm.ShowDialog() ? А если он и отработает раньше и waitForm.Close() вызовет раньше ?
В целом я согласен с Вами, что в рационе современных языков (C++/C#/Java) явно не хватает "синтаксического сахара" для удобства многопоточного программирования, но переходить из-за этого на функциональщину — увольте. Функциональный язык на обычных компьютерах это насилие и извращение, ибо процессор-то всё равно работает линейно и понятие состояния тоже имеется. Возможно для более высокоуровнего программирования это и найдёт своё применение, а так —
А какой код буде легче читаться/писаться/думаться — функциональный или обычный обвешанный мютексами — это отдельный вопрос и явно не имеющий очевидного ответа.
Здравствуйте, Mazay, Вы писали:
M>Просвятите пожалуйста про Invoke():
Invoke выглядит примерно так:
public delegate void InvokeDelegate();
public void Invoke(InvokeDelegate call)
{
if (InvokeRequired)
base.Invoke(call);
else
call();
}
M>метод AfterLongProcess() выполнится в потоке UI (там где button1_Click2 отработал) или в вызванном потоке? Наверное всё-таки в UI иначе зачем огород городить.
Точно.
M>Почему нельзя здесь же кинуть MessageBox об исключении?
Потому что MessageBox — это тоже UI.
M>Совковая лопата опущена
Ы?
M>textBox2.Text = LongProcess(textBox1.Text); — это в каком потоке выполняется? А если в это время из основного потока что-нить сюда запишут? Ах да, "доступ к объектам наследникам класса Control может осуществлятся только из потока UI",
Мне нравится как ты сам себе задаёшь вопросы и сам же на них отвечаешь
M>а тогда что-за поток мы создали в newthread ?
New thread.
M>В этом же новом потоке мы легко закрываем waitForm.
Внимательно почитай моё сообщение. Ты пытаешься найти что-то неправильное в гипотетическом коде, говорить о котом я начал со слов "А теперь пофантазируем".
M>В целом я согласен с Вами, что в рационе современных языков (C++/C#/Java) явно не хватает "синтаксического сахара" для удобства многопоточного программирования, но переходить из-за этого на функциональщину — увольте. Функциональный язык на обычных компьютерах это насилие и извращение, ибо процессор-то всё равно работает линейно и понятие состояния тоже имеется.
Не вижу связи между функциональщиной и непрямолинейщиной с отсутствием состояния. Возможно она если и есть, то только в головах оголтелых поборников ФП, для которых принцип и догмы важнее здравого смысла. Для меня же ФП — это ещё один набор очень удобных паттернов и инструментов.
M> Возможно для более высокоуровнего программирования это и найдёт своё применение, а так —
M> А какой код буде легче читаться/писаться/думаться — функциональный или обычный обвешанный мютексами — это отдельный вопрос и явно не имеющий очевидного ответа.
Мьютексы то тут причём?
... << RSDN@Home 1.2.0 alpha rev. 0>>
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте, IT, Вы писали:
M>>Почему нельзя здесь же кинуть MessageBox об исключении? IT>Потому что MessageBox — это тоже UI.
А в последнем "гипотетичеком" варианте этот самый UI вызывается вовсе не в UI'шном потоке.
M>>Совковая лопата опущена IT>Ы?
Это я про вариант с замыканиями.
IT>Ты пытаешься найти что-то неправильное в гипотетическом коде, говорить о котом я начал со слов "А теперь пофантазируем".
Я хочу сказать что очень сомневаюсь в полезности этих гипотетических возможностей компилятора:
Допустим, у нас имелась бы возможность сказать компилятору, например, с помощью атрибутов, что доступ к объектам наследникам класса Control может осуществлятся только из потока UI. Предположим также, что у нас есть некая языковая конструкция, которая указывает компилятору, что определённая часть кода должна выполняться в новом потоке.
Если уж фантазировать, до давайте делать это пореалистичнее. А то пример совсем неубедительный получился.
M>>В целом я согласен с Вами, что в рационе современных языков (C++/C#/Java) явно не хватает "синтаксического сахара" для удобства многопоточного программирования, но переходить из-за этого на функциональщину — увольте. Функциональный язык на обычных компьютерах это насилие и извращение, ибо процессор-то всё равно работает линейно и понятие состояния тоже имеется.
IT>Не вижу связи между функциональщиной и непрямолинейщиной с отсутствием состояния. Возможно она если и есть, то только в головах оголтелых поборников ФП, для которых принцип и догмы важнее здравого смысла. Для меня же ФП — это ещё один набор очень удобных паттернов и инструментов.
Я имел ввиду вот это:
В функциональном программировании переменные – это просто псевдонимы для выражений (так что нам необязательно записывать всё в одну строчку). Они (переменные) не могут быть изменены. Все переменные могут принимать значения только один раз.
(это из статьи "Функциональное программирование для всех")
,а Влад выше писал:
Меж тем побочные эффекы и особенно фокусы с указателями могут привести к такому, что потом не расхлебаешь. Идея Эрлэнговских лайт-процессов и активных объектов — это полный автомат. Хотя и не лишенный недостатков.
M>> А какой код буде легче читаться/писаться/думаться — функциональный или обычный обвешанный мютексами — это отдельный вопрос и явно не имеющий очевидного ответа.
IT>Мьютексы то тут причём?
При том, что ими можно проблемы, которые в гипотетическом коде предлагалось решать с помощью атрибутов.
Здравствуйте, Cyberax, Вы писали:
C>Gaperton wrote: >> C>SMP для 80 ядер вряд ли будет возможен — так как доступ к памяти станет >> C>больным местом. Значит как-то надо эти ядра делить на кластеры, которые >> C>будут взаимодействовать только через каналы связи. >> Ну, внутри все будет так, как ты говоришь. А снаружи, с точки зрения >> софта, это скорее всего будет выглядеть как SMP. >> Пример — два двухъядерных процессора Opteron. Ядра не равноправны — в >> рамках одного кристалла они разделяют кэш. К соседнему кристаллу лезут >> через HyperThreading. И ничего — все равно это выглядит для софта как >> SMP, потому как это проще программить. И ничего. C>Понимаешь, для двух процессоров это прокатит — так как достаточно редкие C>обращения к общей памяти не будут делать погоды. А вот для 80 C>процессоров — уже не уверен, нужно уже что-то другое.
Cyberax, все уже украдено до нас. Я тебе уже письма три как объясняю, что SMP не подразумевает наличия физически общей памяти. Что общая память — это удобная абстракция, которая выражается через message-passing. Могу только добавить, что в рамках модели общей памяти уже сейчас работает софт на суперкомпьютерных кластерах с тысячами узлов, связанных средой Merynet или Infiniband (у которых с латентностью не ахти — внутри кристалла будет существенно лучше).
О проблеме, о которой ты говоришь, все давно уже подумали. В очередной раз советую почитать про архитектуру ccNUMA (cache coherent non-uniform memory access), на алгоритм синхронизации кэшей в рамках которого уже даже стандарт IEEE принят.
Gaperton wrote: > Cyberax, все уже украдено до нас. Я тебе уже письма три как объясняю, > что SMP не подразумевает наличия физически общей памяти. Что общая > память — это удобная абстракция, которая выражается через > message-passing. Могу только добавить, что в рамках модели общей памяти > уже сейчас работает софт на суперкомпьютерных кластерах с тысячами > узлов, связанных средой Merynet или Infiniband (у которых с латентностью > не ахти — внутри кристалла будет существенно лучше).
Я знаю про это. Мне интересно как это можно более эффективно сделать.
> О проблеме, о которой ты говоришь, все давно уже подумали. В очередной > раз советую почитать про архитектуру ccNUMA (cache coherent non-uniform > memory access), на алгоритм синхронизации кэшей в рамках которого уже > даже стандарт IEEE принят.
Ну и? В том же Линуксе или Windows поддержка для NUMA минимальна,
выражается в виде возможности указать для страниц памяти их "удаленность".
Здравствуйте, Cyberax, Вы писали:
>> О проблеме, о которой ты говоришь, все давно уже подумали. В очередной >> раз советую почитать про архитектуру ccNUMA (cache coherent non-uniform >> memory access), на алгоритм синхронизации кэшей в рамках которого уже >> даже стандарт IEEE принят. C>Ну и? В том же Линуксе или Windows поддержка для NUMA минимальна, C>выражается в виде возможности указать для страниц памяти их "удаленность".
Я тебе уже писал. Это делается в железе. В Оптеронах это сделано на уровне протокола Hypertransport. Никакой особой поддержки в линуксе для этого не нужно. Так что вам, программерам, беспокоиться особенно не о чем .
Gaperton wrote: > C>Ну и? В том же Линуксе или Windows поддержка для NUMA минимальна, > C>выражается в виде возможности указать для страниц памяти их "удаленность". > Я тебе уже писал. Это делается *в железе*. В Оптеронах это сделано на > уровне протокола Hypertransport. Никакой особой поддержки в линуксе для > этого не нужно. Так что вам, программерам, беспокоиться особенно не о чем .
А теперь ты прочитай про nccNUMA
Здравствуйте, Cyberax, Вы писали:
C>Gaperton wrote: >> C>Ну и? В том же Линуксе или Windows поддержка для NUMA минимальна, >> C>выражается в виде возможности указать для страниц памяти их "удаленность". >> Я тебе уже писал. Это делается *в железе*. В Оптеронах это сделано на >> уровне протокола Hypertransport. Никакой особой поддержки в линуксе для >> этого не нужно. Так что вам, программерам, беспокоиться особенно не о чем . C>А теперь ты прочитай про nccNUMA
Gaperton wrote: >> > Я тебе уже писал. Это делается *в железе*. В Оптеронах это сделано на >> > уровне протокола Hypertransport. Никакой особой поддержки в линуксе для >> > этого не нужно. Так что вам, программерам, беспокоиться особенно не о > чем . > C>А теперь ты прочитай про nccNUMA > http://en.wikipedia.org/wiki/CcNUMA > А теперь ты мне дай сцылку на nccNUMA . С удовольствием почитаю.
Вот найти бы их еще, я читал про них в бумажных журналах и статьях на ACM.
Если вкратце, то в nccNUMA за синхронностью кэша должны следить сами
приложения, явно выставляя специальные барьерные инструкции для
синхронизации с общей памятью (когда это необходимо). Это позволяет
легко сделать "транзакционную память" (тут Курилка, кажется, об этом
линк присылал), свести к минимуму простои из-за синхронизации и т.п.
Самой известной из таких систем, пожалуй, является Cray T3E, в который
втыкалось примерно 2000 процессорных элементов (с двумя процессорами в
каждом).
Такие архитектуры пока не имеют распространения из-за сложности
программирования, но наверняка станут более популярными с ростом числа
процессоров.
Здравствуйте, Cyberax, Вы писали:
C>Если вкратце, то в nccNUMA за синхронностью кэша должны следить сами C>приложения, явно выставляя специальные барьерные инструкции для C>синхронизации с общей памятью (когда это необходимо). Это позволяет C>легко сделать "транзакционную память" (тут Курилка, кажется, об этом C>линк присылал), свести к минимуму простои из-за синхронизации и т.п.
Объясни мне, разве не такая модель памяти и используется в java & .net?
Andrei N.Sobchuck wrote: > C>Если вкратце, то в nccNUMA за синхронностью кэша должны следить сами > C>приложения, явно выставляя специальные барьерные инструкции для > C>синхронизации с общей памятью (когда это необходимо). Это позволяет > C>легко сделать "транзакционную память" (тут Курилка, кажется, об этом > C>линк присылал), свести к минимуму простои из-за синхронизации и т.п. > Объясни мне, разве не такая модель памяти и используется в java & .net?
В .NET — нет, там более сильная модель (поэтому .NET, вообще говоря, не
может использоваться на nccNUMA).
В Java сейчас модель памяти, совместимая с nccNUMA (поэтому там не
работает Double-Check Locking).
Andrei N.Sobchuck wrote: > C>В .NET — нет, там более сильная модель (поэтому .NET, вообще говоря, не > C>может использоваться на nccNUMA). > То есть в .net вся память рассматривается как volatile (в java)?
Да, для x86 и ccNUMA это будет работать, так как гарантируется
когерентность кэшей.
Здравствуйте, Cyberax, Вы писали:
>> C>В .NET — нет, там более сильная модель (поэтому .NET, вообще говоря, не >> C>может использоваться на nccNUMA). >> То есть в .net вся память рассматривается как volatile (в java)? C>Да, для x86 и ccNUMA это будет работать, так как гарантируется C>когерентность кэшей.
Andrei N.Sobchuck wrote: >> > C>В .NET — нет, там более сильная модель (поэтому .NET, вообще говоря, не >> > C>может использоваться на nccNUMA). >> > То есть в .net вся память рассматривается как volatile (в java)? > C>Да, для x86 и ccNUMA это будет работать, так как гарантируется > C>когерентность кэшей. > Интересно, а что с mono?
Конкретные реализации вполне могут работать, но при этом они не будут
соответствовать спецификации на CLR.
Здравствуйте, FR, Вы писали:
FR>Так если не найдут способ увеличить частоту (хотя и это временная отсрочка, скорость света никто ни отменял ) распаралеливание неизбежно.
И толщину минимального диффузионного слоя в P-N переходе тоже никто не отменял, и скорость движения зарядов в полупроводниках тоже: никакой скоростью света там и не пахнет.
То что p-n переход исчерпал себя стало ясно 15 лет назад, когда впервые задумались о кешах, конвейерах, двух АЛУ и т.п., чтобы максимально использовать все транзисторы одновременно — это уже задачи распаралелливания и оптимизации.
Либо придет новая технология (5 поколение ЭВМ), и тогда проблема немного отодвинется, либо распараллеливание.
Здравствуйте, eugen1001, Вы писали:
E>Здравствуйте, FR, Вы писали:
FR>>Так если не найдут способ увеличить частоту (хотя и это временная отсрочка, скорость света никто ни отменял ) распаралеливание неизбежно.
E>И толщину минимального диффузионного слоя в P-N переходе тоже никто не отменял, и скорость движения зарядов в полупроводниках тоже: никакой скоростью света там и не пахнет. E>То что p-n переход исчерпал себя стало ясно 15 лет назад, когда впервые задумались о кешах, конвейерах, двух АЛУ и т.п., чтобы максимально использовать все транзисторы одновременно — это уже задачи распаралелливания и оптимизации.
E>Либо придет новая технология (5 поколение ЭВМ), и тогда проблема немного отодвинется, либо распараллеливание.
Это все технологические, вполне разрешимые вопросы. А скорость света вещь фундаментальная ее не обойдешь. К тому же не так много уже и осталось, для кристала 1 см в поперечнике максимум всего 300Ггц, то есть запас всего в 100 раз
VladD2 wrote: > C>Из-за этого в Java, вообще говоря, не может работать такой паттерн: > C>http://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.html > Нда, очень в твоей манере. > Я просил объяснение чем же это архитектура Х не допускает реализации на > базе архитектуры У.
Потому что в спеке на CLR _явно_ прописано запрещение таких reorder'ов,
гарантируется что память будет гарантировано когерентна. В спеке на JVM
Memory Model такой гарантии не дается.
Соответственно, полностью соответствующая спеке реализация .NET CLR
невозможна на nccNUMA-системах.
Про .NET смотри: ECMA-335, Section 12
> Ты же мне приводишь какую-то информацию о проблемах конкретной реализации.
А ты в своей манене поверхностно прочитал, не пробуя вникнуть в проблему.
Здравствуйте, VladD2, Вы писали:
VD>Ты почитал бы то на что ссылки даешь. Там говорится о «Эльбрус-3М1». VD>Ну, да продолжайте Инженер. Все равно вывернетесь, скажете, что апельины приносили.
Продолжать? Вы думаете, я буду читать вашу писанину, Писатель? И вести глупые споры? Верно вы забыли, что я уже два года не отвечаю на ваши "письма", и почти не читаю их. Я знаю вас давно, и уже давно не чуствую себя обязаным перед вами "выворачиваться". Думайте себе что хотите, Писатель, на здоровье.
Здравствуйте, Gaperton, Вы писали:
G>Продолжать? Вы думаете, я буду читать вашу писанину, Писатель? И вести глупые споры? Верно вы забыли, что я уже два года не отвечаю на ваши "письма", и почти не читаю их. Я знаю вас давно, и уже давно не чуствую себя обязаным перед вами "выворачиваться". Думайте себе что хотите, Писатель, на здоровье.
похоже на детство. Не читаешь и не отвечаешь? так держись и не отвечай.
Здравствуйте, Gaperton, Вы писали:
G> Верно вы забыли, что я уже два года не отвечаю на ваши "письма", и почти не читаю их.
Да, уважаемый "инженер", почти забыл. Спасибо что Вы постоянно об этом напоминаете.
G> Я знаю вас давно, и уже давно не чуствую себя обязаным перед вами "выворачиваться".
Ну, что я говорил? Даже про апельсины вспоминать не пришлось.
G> Думайте себе что хотите, Писатель, на здоровье.
Вот за это отдельное спасибо! Всегда приятно когда тебе напоминают о твоем праве на свободу слова.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Hello, Cyberax!
You wrote on Tue, 17 Oct 2006 08:33:46 GMT:
C>>> Если вкратце, то в nccNUMA за синхронностью кэша должны следить C>>> сами приложения, явно выставляя специальные барьерные C>>> инструкции для синхронизации с общей памятью (когда это C>>> необходимо). Это позволяет легко сделать "транзакционную C>>> память" (тут Курилка, кажется, об этом линк присылал), свести к C>>> минимуму простои из-за синхронизации и т.п. >> Объясни мне, разве не такая модель памяти и используется в java & >> .net? C> В .NET — нет, там более сильная модель (поэтому .NET, вообще C> говоря, не может использоваться на nccNUMA).
C> В Java сейчас модель памяти, совместимая с nccNUMA (поэтому там не C> работает Double-Check Locking).
Механизм double-сheck locking в Яве мог не работать до версии 1.4. С 1.4 в Java Memory Model были внесены изменения, решающие в том числе проблему с double-сheck locking.
Yuri Khomich wrote: > C> В Java сейчас модель памяти, совместимая с nccNUMA (поэтому там не > C> работает Double-Check Locking). > Механизм double-сheck locking в Яве мог не работать до версии 1.4. С 1.4 > в Java Memory Model были внесены изменения, решающие в том числе > проблему с double-сheck locking.
Модель не меняли, просто дополнили семантику volatile-объявлений. Старый
DCL как не работал, так и не будет. Нужно писать так:
public class Singleton
{
volatile Singleton theInstance;
Singleton getInstance()
{
if (theInstance==null)
{
synchronized(Singleton.class)
{
if (theInstance!=null) return theInstance;
theInstance=new Singleton();
}
}
return theInstance;
}
}
Hello, Cyberax!
You wrote on Tue, 24 Oct 2006 15:42:02 GMT:
C>>> В Java сейчас модель памяти, совместимая с nccNUMA (поэтому там C>>> не работает Double-Check Locking). >> Механизм double-сheck locking в Яве мог не работать до версии >> 1.4. С 1.4 в Java Memory Model были внесены изменения, решающие >> в том числе проблему с double-сheck locking. C> Модель не меняли, просто дополнили семантику volatile-объявлений. C> Старый DCL как не работал, так и не будет.
По-вашему, семантика выражений, работающих с памятью, не имеет прямого отношения к модели памяти?
Yuri Khomich wrote: >> > Механизм double-сheck locking в Яве мог не работать до версии >> > 1.4. С 1.4 в Java Memory Model были внесены изменения, решающие >> > в том числе проблему с double-сheck locking. > C> Модель не меняли, просто дополнили семантику volatile-объявлений. > C> Старый DCL как не работал, так и не будет. > По-вашему, семантика выражений, работающих с памятью, не имеет прямого > отношения к модели памяти?
Я имею в виду, что саму суть модели памяти не поменяли (то есть
возможность read/write reorder'а). Добавили просто дополнительную
функциональность туда, где ее раньше не было.
Hello, Cyberax!
You wrote on Tue, 24 Oct 2006 17:53:54 GMT:
>>>> Механизм double-сheck locking в Яве мог не работать до версии >>>> 1.4. С 1.4 в Java Memory Model были внесены изменения, решающие >>>> в том числе проблему с double-сheck locking. C>>> Модель не меняли, просто дополнили семантику C>>> volatile-объявлений. C>>> Старый DCL как не работал, так и не будет. >> По-вашему, семантика выражений, работающих с памятью, не имеет >> прямого отношения к модели памяти? C> Я имею в виду, что саму суть модели памяти не поменяли (то есть C> возможность read/write reorder'а). Добавили просто дополнительную C> функциональность туда, где ее раньше не было.
Именно что поменяли: в старой модели чтение/запись volatile переменной могли быть переупорядочены с чтением/записью nonvolatile пременной. Новая модель памяти это запрещает. Возможность reorder'a осталась только для nonvolatile переменных.
Yuri Khomich wrote: > C> Я имею в виду, что саму суть модели памяти не поменяли (то есть > C> возможность read/write reorder'а). Добавили просто дополнительную > C> функциональность туда, где ее раньше не было. > Именно что поменяли: в старой модели чтение/запись volatile переменной > могли быть переупорядочены с чтением/записью nonvolatile пременной. > Новая модель памяти это запрещает. Возможность reorder'a осталась только > для nonvolatile переменных.
Скорее по-другому: для non-volatile переменных запретили reorder. Ни
разу до этого не видел volatile (как и strictfp) в реальных программах
на Java.
Здравствуйте, Cyberax, Вы писали:
C>Скорее по-другому: для non-volatile переменных запретили reorder. Ни C>разу до этого не видел volatile (как и strictfp) в реальных программах C>на Java.
В том виде для них особого применения и не было. Да и сейчас, основная польза от этих изменений это то, что появился java.util.concurrent не пользующийся synchronized.
Hello, Cyberax!
You wrote on Wed, 25 Oct 2006 15:20:35 GMT:
C> Yuri Khomich wrote: C>>> Я имею в виду, что саму суть модели памяти не поменяли (то есть C>>> возможность read/write reorder'а). Добавили просто C>>> дополнительную функциональность туда, где ее раньше не было. >> Именно что поменяли: в старой модели чтение/запись volatile >> переменной могли быть переупорядочены с чтением/записью >> nonvolatile пременной. >> Новая модель памяти это запрещает. Возможность reorder'a осталась >> только для nonvolatile переменных. C> Скорее по-другому: для non-volatile переменных запретили reorder.
Synchronization actions, which are: * Volatile read. A volatile read of a variable.
* Volatile write. A volatile write of a variable.
* Lock. Locking a monitor
* Unlock. Unlocking a monitor.
* The (synthetic) first and last action of a thread
* Actions that start a thread or detect that a thread has
terminated, as described in §17.4.4.
Every execution has a synchronization order. A synchronization order is
a total order over all of the synchronization actions of an execution.
For each thread t, the synchronization order of the synchronization
actions (§17.4.2) in t is consistent with the program order (§17.4.3) of t.
И отсюда делаем вывод, что для volatile'ов запрещен reordering.
C> Synchronization actions, which are:
C> * Volatile read. A volatile read of a variable.
C> * Volatile write. A volatile write of a variable.
C> * Lock. Locking a monitor * Unlock. Unlocking a monitor.
C> * The (synthetic) first and last action of a thread *
C> Actions that start a thread or detect that a thread has
C> terminated, as described in §17.4.4.
C> Every execution has a synchronization order. A synchronization
C> order is a total order over all of the synchronization actions of
C> an execution.
C> For each thread t, the synchronization order of the
C> synchronization actions (§17.4.2) in t is consistent with the
C> program order (§17.4.3) of t.
C> И отсюда делаем вывод, что для volatile'ов запрещен reordering.
Вы вообще следите за дикуссией?
Сообщением выше я сказал что reorder разрешен для nonvolatile переменных.
Вы возразили. Теперь вы говорите: для volatile'ов запрещен reordering. Запрещен конечно. Только я этому и не возражал.
Yuri Khomich wrote: > C> И отсюда делаем вывод, что для volatile'ов запрещен reordering. > Вы вообще следите за дикуссией? > Сообщением выше я сказал что reorder разрешен для nonvolatile переменных. > Вы возразили.
Я не возражал. Я ответил, что лучше по-другому сформулировать — в новой
спеке добавилось запрещение на reorder для volatile.
Hello, Cyberax!
You wrote on Thu, 26 Oct 2006 12:50:32 GMT:
C>>> И отсюда делаем вывод, что для volatile'ов запрещен reordering. >> Вы вообще следите за дикуссией? >> Сообщением выше я сказал что reorder разрешен для nonvolatile >> переменных. >> Вы возразили. C> Я не возражал. Я ответил, что лучше по-другому сформулировать — в C> новой спеке добавилось запрещение на reorder для volatile.
Не подумайте, что я занимаюсь букво***ом , но вот ваши слова: "Скорее по-другому: для non-volatile переменных запретили reorder.". Это не так. Из-за чего и сыр-бор.
Или это описка просто?
Yuri Khomich wrote: > C> Я не возражал. Я ответил, что лучше по-другому сформулировать — в > C> новой спеке *добавилось* запрещение на reorder для volatile. > Не подумайте, что я занимаюсь букво***ом , но вот ваши слова: "Скорее > по-другому: для non-volatile переменных запретили reorder.". Это не так. > Из-за чего и сыр-бор. > Или это описка просто?
Действительно, очепятался. Очень извиняюсь.
Здравствуйте, Cyberax, Вы писали:
C>Потому что в спеке на CLR _явно_ прописано запрещение таких reorder'ов, C>гарантируется что память будет гарантировано когерентна. В спеке на JVM C>Memory Model такой гарантии не дается.
я правильно понимаю, что, как следствие, нельзя хранить переменные в регистрах и код вроде этого:
public class A {
public int count;
public static void main(String [] args) {
A a = new A();
for (int i = 0; i < 1000; i++) a.count++;
}
}
на .NET потенциально в разы медленнее т.к. нужно каждый раз count писать в память а то не дай бог соседний thread из него почитает?
n0name2 wrote: > я правильно понимаю, что, как следствие, нельзя хранить переменные в > регистрах и код вроде этого: > public class A { > public int count; > > public static void main(String [] args) { > A a = new A(); > for (int i = 0; i < 1000; i++) a.count++; > } > } > на .NET потенциально в разы медленнее т.к. нужно каждый раз count писать > в память а то не дай бог соседний thread из него почитает?
Не знаю, подозреваю что да. Хотя это достаточно редкая ситуация.
В .NET гарантируется, что поведение потока будет наблюдаться одинаково
из любого другого потока. В данном случае, в принципе, компилятор имеет
право вынести чтение и запись в a.count за пределы цикла, так как это не
меняет видимого поведения программы.
Здравствуйте, Cyberax, Вы писали:
C>Не знаю, подозреваю что да. Хотя это достаточно редкая ситуация.
почему, собственно, редкая? вообще сюда (потенциально) относится любое присваивание или модификация любых полей или ссылок. т.е. фактически любое изменение состояния.
C>В .NET гарантируется, что поведение потока будет наблюдаться одинаково C>из любого другого потока. В данном случае, в принципе, компилятор имеет C>право вынести чтение и запись в a.count за пределы цикла, так как это не C>меняет видимого поведения программы.
почему не меняет? допустим, этот main() запущен в двух потоках над одним и темже экземпляром A.
тогда вроде как нужно заново читать a.count перед каждой операцией ++ и каждый раз записывать a.count в память чтобы результаты были доступны всем?
причем по сути VM не знает — может ли данная переменная быть использована в нескольких протоках (нет escape analysis) и должна по умолчанию делать все переменные аналогом Java volatile?