ну чего, по-флеймим малек ?
Правила форума
Пожалуйста, ознакомьтесь с правилами данного форума
Пожалуйста, ознакомьтесь с правилами данного форума
- Marmot
- Графоман
- Сообщения: 39279
- Зарегистрирован: 17 фев 2003, 17:58
- Откуда: Caulfeild
- Контактная информация:
- Marmot
- Графоман
- Сообщения: 39279
- Зарегистрирован: 17 фев 2003, 17:58
- Откуда: Caulfeild
- Контактная информация:
В продолжение разговора об инвариантах:
Месяца два назад после 10-ти лет работы умер Mars Global Surveyor.
А вчера вот собщили:
"We think that the failure was due to a software load we sent up in June of last year. This software tried to synch up two flight processors. Two addresses were incorrect - two memory addresses were over written. As the geometry evolved, we drove the [solar] arrays against a hard stop and the spacecraft went into safe mode. The radiator for the battery pointed at the sun, the temperature went up, and battery failed. But this should be treated as preliminary."
http://www.spaceref.com/news/viewnews.html?id=1185
Давно пора им на Java переходить
ну и что, что памяти надо в 5 раз больше, а CPU 1.5-2 раза мощнее, зато можно прочитать exception stack trace если что... 
Месяца два назад после 10-ти лет работы умер Mars Global Surveyor.
А вчера вот собщили:
"We think that the failure was due to a software load we sent up in June of last year. This software tried to synch up two flight processors. Two addresses were incorrect - two memory addresses were over written. As the geometry evolved, we drove the [solar] arrays against a hard stop and the spacecraft went into safe mode. The radiator for the battery pointed at the sun, the temperature went up, and battery failed. But this should be treated as preliminary."
http://www.spaceref.com/news/viewnews.html?id=1185
Давно пора им на Java переходить


- ajkj3em
- Маньяк
- Сообщения: 2063
- Зарегистрирован: 12 ноя 2006, 06:53
- Marmot
- Графоман
- Сообщения: 39279
- Зарегистрирован: 17 фев 2003, 17:58
- Откуда: Caulfeild
- Контактная информация:
- sz
- Маньяк
- Сообщения: 1266
- Зарегистрирован: 17 фев 2003, 19:34
Re: ну чего, по-флеймим малек ?
Ветку еще не читал, поэтому возможно повторю кого-то.
Второй кошернее по двум причинам:
1. Меньше констрейнов на переменные, а потому более простые проверки на валидность.
2. Первый неявно дает понять, что доступ будет осуществляться пойнерами, а не индексами. Доступ пойнтерами хуже доступа индексами (кроме локальных случаев оптимизированного кода) тем, что индекс може без изменений быть передан за границы процесса, а пойнтер надо преобразовывать. Аналогично, кстати и с длиной.
Сегодня, кстати, любопытную лекцию посетил про Designing For Concurency. Все больше и больше народу утверждает, что переключение контекстов нужно только для систем где есть недостаток процессоров. А по сути от него только вред.
Я сам так недавно начал думать, и вот уже второй независимый человек повторил мои соображения. У нас большинство команд перешло на дизайн при котором сразу запускается ровно столько потоков, сколько есть ядер, а потом спец scheduller распределяет между ними задачи. Настолько проще синхронизироваться, по сравнению с обычной многопоточностью - просто небо и земля.
Собственно, Sony это и имела в виду, когда делала PS3 - переключение контекстов не только замедляет выполнение, но и усложняет программирование. Хотя, на мой взгляд, они выступили черезчур радикально - совместный доступ к памяти можно было и оставить.
Второй кошернее по двум причинам:
1. Меньше констрейнов на переменные, а потому более простые проверки на валидность.
2. Первый неявно дает понять, что доступ будет осуществляться пойнерами, а не индексами. Доступ пойнтерами хуже доступа индексами (кроме локальных случаев оптимизированного кода) тем, что индекс може без изменений быть передан за границы процесса, а пойнтер надо преобразовывать. Аналогично, кстати и с длиной.
Сегодня, кстати, любопытную лекцию посетил про Designing For Concurency. Все больше и больше народу утверждает, что переключение контекстов нужно только для систем где есть недостаток процессоров. А по сути от него только вред.
Я сам так недавно начал думать, и вот уже второй независимый человек повторил мои соображения. У нас большинство команд перешло на дизайн при котором сразу запускается ровно столько потоков, сколько есть ядер, а потом спец scheduller распределяет между ними задачи. Настолько проще синхронизироваться, по сравнению с обычной многопоточностью - просто небо и земля.
Собственно, Sony это и имела в виду, когда делала PS3 - переключение контекстов не только замедляет выполнение, но и усложняет программирование. Хотя, на мой взгляд, они выступили черезчур радикально - совместный доступ к памяти можно было и оставить.
- Marmot
- Графоман
- Сообщения: 39279
- Зарегистрирован: 17 фев 2003, 17:58
- Откуда: Caulfeild
- Контактная информация:
Re: ну чего, по-флеймим малек ?
Согласен на 95%, просто бывают такие задачки, когда большинство потоков сидят на IO-waits. Конечно можно весь IO сделать асинхронным, но тогда запаришься его программировать.Старина Зотин писал(а):Все больше и больше народу утверждает, что переключение контекстов нужно только для систем где есть недостаток процессоров. А по сути от него только вред.
добавление: я так понимаю что я описал случай "систем где есть недостаток процессоров"
А вот тут поподробнее можно?Старина Зотин писал(а): У нас большинство команд перешло на дизайн при котором сразу запускается ровно столько потоков, сколько есть ядер, а потом спец scheduller распределяет между ними задачи. Настолько проще синхронизироваться, по сравнению с обычной многопоточностью - просто небо и земля.
Shared memory это зло!Старина Зотин писал(а): Собственно, Sony это и имела в виду, когда делала PS3 - переключение контекстов не только замедляет выполнение, но и усложняет программирование. Хотя, на мой взгляд, они выступили черезчур радикально - совместный доступ к памяти можно было и оставить.

Последний раз редактировалось Marmot 11 янв 2007, 16:08, всего редактировалось 1 раз.
- ajkj3em
- Маньяк
- Сообщения: 2063
- Зарегистрирован: 12 ноя 2006, 06:53
Re: ну чего, по-флеймим малек ?
фиииMarmot писал(а):Конечно можно весь IO сделать асинхронным, но тогда запаришься его программировать.
- Marmot
- Графоман
- Сообщения: 39279
- Зарегистрирован: 17 фев 2003, 17:58
- Откуда: Caulfeild
- Контактная информация:
Re: ну чего, по-флеймим малек ?
Ты, эта, как-нибудь попробуй к какой-нибудь базе данных присоединись асинхронно... и расскажи нам потом...ajkj3em писал(а):фиииMarmot писал(а):Конечно можно весь IO сделать асинхронным, но тогда запаришься его программировать.
- sz
- Маньяк
- Сообщения: 1266
- Зарегистрирован: 17 фев 2003, 19:34
Re: ну чего, по-флеймим малек ?
Ну примерно так.Marmot писал(а):А вот тут поподробнее можно?
Есть такое понятие как Job. Это некоторый кусок кода и некоторые данные. Jobs образуют динамический граф зависимостей.
Например, стартовый пойнт программы это job A, который для своих целей запускает jobs B и C. Причем В готовит данные для C, а потому C объявляется зависимым от B. То есть, система не начнет его выполнять, пока B не завершен. При этом A может либо переключиться на ожидание С (плохая идея, поскольку держит вычислительный ресурс), либо для продолжения своих задач создаст job D, который сделает зависимым от C, что гарантирует его вызов только после завершения всех вычислений, то есть, когда данные уже готовы.
Немного другая идеология программирования, но если привыкнуть, то все очень просто и очень эффективно. Никакой явной синхронизации не нужно - все синхронизировано системой. Дедлок тоже не грозит - он разрешается на этапе редактирования графа. Если job пошел в работу - никто его не прервет и не испоганит ему cache - можно спокойно оптимизироваться префетчами (это в идеальном мире будущего - сейчас на симметричных системах этого нельзя гарантировать - все равно ведь все управляется системным thread scheduller).
При этом граф можно редактировать на лету. Например, jobs B1, B2, B3... BN все зависят от job A. A готовит данные для B1 и перед тем как переключаться на B2 удаляет зависимость B1 от A. Теперь B1 свободен и может начинать выполнение.
- ajkj3em
- Маньяк
- Сообщения: 2063
- Зарегистрирован: 12 ноя 2006, 06:53
Re: ну чего, по-флеймим малек ?
весьма не дурно
ps пищи есчо :)
ps пищи есчо :)
- Marmot
- Графоман
- Сообщения: 39279
- Зарегистрирован: 17 фев 2003, 17:58
- Откуда: Caulfeild
- Контактная информация:
Re: ну чего, по-флеймим малек ?
Ага понял, прочитал и вспомнил, что я уже где-то видел похожие идеи: http://blogs.sun.com/dave/entry/parallelism_manifestoСтарина Зотин писал(а):Ну примерно так.Marmot писал(а):А вот тут поподробнее можно?
...
- sobomax
- Маньяк
- Сообщения: 3699
- Зарегистрирован: 29 июн 2006, 22:53
- Откуда: Vancouver
- sobomax
- Маньяк
- Сообщения: 3699
- Зарегистрирован: 29 июн 2006, 22:53
- Откуда: Vancouver
Re: ну чего, по-флеймим малек ?
Ну не знаю, не знаю. У PS3 все-таки один нормальный процессор и много недо-процессоров, нормальные потоки на них не запустиш так что переключение контекстов никуда не денется.Старина Зотин писал(а):Собственно, Sony это и имела в виду, когда делала PS3 - переключение контекстов не только замедляет выполнение, но и усложняет программирование. Хотя, на мой взгляд, они выступили черезчур радикально - совместный доступ к памяти можно было и оставить.
Не знаю кто там что говорит а John Carmack весьма нелестно отзывается на тему писания софта под PS3.
http://www.gamasutra.com/php-bin/news_i ... tory=12351
Так что не исключено что весь hype по поводу cell закончится пшиком.
-Maxim
- ajkj3em
- Маньяк
- Сообщения: 2063
- Зарегистрирован: 12 ноя 2006, 06:53
Re: ну чего, по-флеймим малек ?
funny enough ровно (!) втим сеичас и занимаюсь - из под линукса к MSSQL через чистый TDS ... конечно не "hello world", но и не rocket science. все бегает ассинхронно .. чай не джава какая-нибудь :)Marmot писал(а):Ты, эта, как-нибудь попробуй к какой-нибудь базе данных присоединись асинхронно... и расскажи нам потом...ajkj3em писал(а):фиииMarmot писал(а):Конечно можно весь IO сделать асинхронным, но тогда запаришься его программировать.
- sz
- Маньяк
- Сообщения: 1266
- Зарегистрирован: 17 фев 2003, 19:34
Re: ну чего, по-флеймим малек ?
Так у нас потому и начали изворачиваться с этими jobs, что нужен был менеджер задач, а архитектура ассиметричная, без переключения контекстов и даже память у каждого процессора своя.sobomax писал(а):Ну не знаю, не знаю. У PS3 все-таки один нормальный процессор и много недо-процессоров, нормальные потоки на них не запустиш так что переключение контекстов никуда не денется.
А потом когда сделали (да еще и задизайнили так, чтобы это на любой платформе работало - и xbox и pc тоже), стали понимать, что они удобнее, на самом деле, чем эти системы с переключением контекста. И эффективнее.
Это он еще скромничает.sobomax писал(а):Не знаю кто там что говорит а John Carmack весьма нелестно отзывается на тему писания софта под PS3.
http://www.gamasutra.com/php-bin/news_i ... tory=12351
Что может девелопер сказать про систему, к которой дается дебагер, который врет значения переменных. Но мало того, код на SPU он вообще не умеет трейсить, а в стандартной библиотеке на SPU нет функции printf. Как прикажете отлаживать код?
И это когда рядом есть пример xbox2, который включаешь в розетку, устанавливаешь xdk и отлаживайся до умопомрачения прямо из VC. А на любой чих жмешь F1 и получаешь полное описание API с примеравми кода из MSDN.
Возможно, хотя и не думаю. Все производители игр ворчат, но все портируются.sobomax писал(а):Так что не исключено что весь hype по поводу cell закончится пшиком.
Но смысл истории не в этом. Смысл в том, что такие системы, где строится граф зависимостей задач легче делать, чем то как это сейчас делается с потоками. А при условии наличия десятков/сотен ядер (к чему все идет независимо от ps3), они еще и работают быстрее.
Кроме того, они почти прозрачно поддерживают даже такие экзотические вещи как cell.