aruslan: (Default)
Спешите видеть замечательное введение в lock free стеки у [livejournal.com profile] _foreseer:
Running lock free.

Там просто и внятно изложена базовая идея и есть хорошие ссылки на почитать.
Ну а уж презентация Elimination-Backoff Stack просто жжёт термоядом - спасибо за ссылку, Андрей!

В геймдеве lock-free структуры данных используют повсеместно, но о них ничего не пишут.
Видимо, умные очень, и через это боятся публиковать свой удивительный код.

"Как стек running free у нас" - ABA брутально через CAS2.
Но чаще не столько CAS, сколько классическое комбо Load-Link/Store-Conditional.
А именно lwarx/lwsync/stwcx/GETLLAR/PUTLLC, и дальше вариации на тему очень быстрой vs очень устойчивой синхронизации (ну и на обход багов в отдельно взятых процессорах).

Важно помнить про тот самый exponential backoff. Ну и вообще, важно думать.
Если думать, то и lock-free структуры не понадобятся :)
Ну а если не думать, то они скорее всё испортят, чем помогут.

Вот не далее чем на прошлой неделе загадочно и очень каскадно протухла память.
И - что вы думаете? - выяснилось, что зажгла самопальная реализация lock-free очереди.
Автору кода было интереснее реализовывать lock free очередь нежели свои таски.
И хотя тема протеста "маленького человека" против обезличенной корпоративной машины мне в целом понятна, это таки не повод не читать википедию.

Я по-прежнему считаю, что геймдев конторы обязаны предоставлять публичный доступ к исходникам. Чтобы термины "exponential backoff", "memory barrier" и "lock-line reservation" из абстрактных превратились в конкретные, благодаря помощи зала.
Принцип Керкхоффа вполне применим к геймдеву, ибо смысл соревнований - в умении создавать и шипить игры.

Через это ссылки на почитать дальше про lock free и вообще:
1. Lock-Free Code: A False Sense of Security Хебра нашего Саттера.
2. Insomniac’s SPU Best Practices (PPT) Майка нашего Эктона.
3. Obstruction-Free Synchronization (PDF) того самого Мориса Херлихуя (ц) _foreseer.
aruslan: (Default)
Верификатор алгоритмов синхронизации для relaxed моделей памяти (в особенности C++0x).

http://www.rsdn.ru/Forum/message/3068646.flat.aspx
http://groups.google.ru/group/relacy/

Очень вкусно.
aruslan: (Default)
The objective of economic efficiency was understood to imply minimizing the cost of answers, not just the cost of hardware.
[...] A consequent objective was to make programming easier -- not necessarily for trivial problems but for problems worthy of the computer, problems whose coding in machine language would usually be generated automatically by a compiler from statements in the user's language.

-- Frederick Brooks. Planning a Computer System (1962)
aruslan: (Default)
Иногда возникает брутальное желание запретить коммит кода, если в нём нет или мало ассертов.
С одной стороны - учить пользоваться вилкой глупо если код как пюре.
Но ведь становятся же люди веселее, когда берут образ веселого человека?..

[Poll #1109174]
aruslan: (Default)
Ограничения решают, факт.
И Линус идёт на полный и тотальный пролом!

http://article.gmane.org/gmane.comp.version-control.git/57918

Особенно понравилось
  Quite frankly, even if the choice of C were to do *nothing* but 
  keep the C++ programmers out, that in itself would be a huge 
  reason to use C.

via [livejournal.com profile] sim0nsays


Update: Не забывайте читать камменты дальше по ветке - там Линус отвечает на вопросы и W.B. который "D" получает ответы :)
aruslan: (Default)
http://www.research.att.com/~bs/hopl-almost-final.pdf

Для Конференции по истории языков программирования (HOPL) отбирается 12-14 докладов один раз в пятнадцать лет.

В 1993 году Бьярн Страуструп выступил на Второй конференции по истории языков программирования с докладом "A history of C++: 1979-1991", более известным в переработанной и развёрнутой версии D&E.

Перед нами -- черновик доклада по C++ для Третьей конференции (HOPL-III). Начинается со времён начала стандартизации и первого D&E, и, через ISO 1998 и 2003, доходит до поздних этапов пересмотра стандарта C++0x в 2007.

D&E был интереснее технически. Evolving a language - глубже политически.
Приятного прочтения!

via LtU HOPL-III
aruslan: (Default)
Поясню, про что тут.

Зачем тест в котором человек что-то пишет (игру, например)?
Чтобы он написал что-то гениальное? Не-а.
То есть, конечно, гениальное приветствуется, но это не всегда главное.

Нужно три простых вещи.

1. Человек должен уметь общаться. Понимать, спрашивать и предлагать.
2. Человек должен уметь программировать. Реализовывать то, что понял.
3. Человек должен уметь заканчивать. Результативно. В полную силу.

Вот эти вот "Понимать" и "Заканчивать" - то, что бывает важнее всего.
Всё остальное можно побороть. Это - нет.
Read more... )
Ну а жёсткие, скриннинговые и брутальные вопросы по C++ в стиле kunaifusu - это стресс тест умения адаптироваться к неизвестному контексту без права на ошибку. Причём - в классическом C++ контексте - мы оба много чего знаем, осталось убедиться, что все DR прочитаны обоими.

Вот и всё.
aruslan: (Default)
Благодаря [livejournal.com profile] rudybear вспомнил, что забыл подобновить ссылки на C++09 на моём del.icio.us/aruslan/C++ (aka [livejournal.com profile] delicpp_aruslan), а ведь после майской встречи комитета всё расцвело в предвкушении C++09 public draft. Он ожидался в октябре 2007, теперь возможно сдвинется, но это уже не важно.

Разработчикам игр будет небезынтересно почитать пейпер Electronic Arts STL из мэйлинг листа.

На Google Tech Talks - замечательное видео "New features in the next C++ standard" (и там есть еще много всего вкусненького!):

Comeau как всегда впереди планеты - вот список уже поддерживаемых Comeau фич C++09.

И, наконец, сам драфт стандарта (PDF) из майского мэйлинг-листа.


C++ меняется, и меняется сильно и толсто.
Как там у Брукса про синдром второй системы? ;)

А вот и цитата из старой доброй ветки Дамира про C++ на gamedev.ru:
Infernal Papuan
Интересно, если boost включат в стандарт, какого размера будет четвертое издание Страуструпа? :)
aruslan: (Default)
[livejournal.com profile] kunaifusu сегодня двинул сильно правильную мысль про неадекватные интервью как фермент глобального bozo explosion в индустрии.

А любое интервью - это, очевидно, способ оценить компанию.

Про сливные бачки и ГЭС )
Потому что специалисты по C++ в геймдеве действительно нужны нечасто.
И гораздо чаще - нужны специалисты по разработке игр.
aruslan: (Default)
Смотрел сегодня зачем-то немножко всякого кода.
Мысль остановилась на втором экране невнятной сети несвязанных между собою условий.
Понял, что волю читать мегапростыни кода я утратил. Особенно ненужного. Бажного.
А чем больше кода - тем скорее он станет ненужным.

Между художниками, музыкантами и программистами очень много общего как раз в плане количества информации. Её несжимаемости. Как-нибудь я раскрою эту тему.
Ну а пока я склонен доверять спирали "не умеешь - умеешь - умеешь не".

Не пишите лишний код. Пишите нужный.
aruslan: (Default)
Сегодня напомнили, что boost::interprocess (который в девичестве был известен как shmem) жив и всячески приближается к.
Лежит в boost vault.

А ведь там есть всякие забавные контейнеры, аллокаторы и смарт-пойнтеры.
Так что приглашаю к столу.
aruslan: (Default)
Сегодня Мамонт раскрыл мне левую нижнюю чакру простым ключом /GH в MSVC++.
Который _pentry()/_pexit() hooks.

Удивительные свойства сгенерированного кода позволяют делать всякие вкусные и полезные вещи.
Мне этого очень когда-то не хватало.

Воистину, век живи, век учись.
aruslan: (Default)
Очень рекомендую к прочтению замечательную статью "Магия" [livejournal.com profile] kunaifusu про довольно стандартный трик магического преобразования floating point в int с помощью загадочных констант.

В статье очень детально и вкусно расписываются корни преобразования и происхождение чисел вроде
  (double)fp+6755399441055744.0

Что характерно, рассказывается как сделать это без double ;)

Помню своё удивление, когда я впервые увидел зубодробительные пассажи для табличного вычисления синусов и косинусов, которые начинались с характерного приведения аргументов
  inline float SinCosFast(float x, float &cosx) 
  {
    x= 0.159155f*x +1536.0f;
    ...
  }


Уже потом появились cvtps2pi, споры о тормозах, выравнивания, спецхинты и инструкции. Естественно, не везде (ц).

А тогда это было интересным и свежим взглядом на жизнь.

Особенно из-за явного джедайского форса.
Который молча рубил одной строчкой тупые брутальные
    const int a = *reinterpret_cast<const int*>(&fp);
    const int sign = (a>>31);
    const int mantissa  = (a&((1<<23)-1))|(1<<23);
    const int exponent  = ((a&0x7fffffff)>>23)-127;
    const int r         = ((unsigned int)(mantissa)<<8)>>(31-exponent);
    return ((r ^ (sign)) - sign ) &~ (exponent>>31);


Клёвая статья, спасибо! :)

Ну и танкистские ссылки напоследок:

1. "What Every Computer Scientist Should Know About Floating Point Arithmetic" by David Goldberg
2. "Let's Go to the (Floating) Point" by Chris Hecker
3. "Магия" by [livejournal.com profile] kunaifusu
4. "Origin of Quake3's Fast InvSqrt()" - Part I, читать камменты, Part II (via [livejournal.com profile] qiller_neu)
aruslan: (Default)
На одном индусском форуме программистов задали вопрос: "Как вычислить завтрашнюю дату?".
Ответ был шедевральным и уже разошёлся по всему миру:
  void get_tomorrow_date( struct timeval *date )
  {
    sleep( 86400 ); // 60 * 60 * 24
    gettimeofday( date, 0 );
  }
via barya

Update: http://community.livejournal.com/code_wtf/45892.html?thread=382532#t382532
aruslan: (Default)
Хороший инструмент - отличный помощник.

Как и всё, что помогает - он соблазняет, растворяет и уничтожает волю.

Инструмент - он в мозгах и в сердце.
А не в книжках, и не в пустых метриках "опыта".
Нет разницы между ref count, GC и статическим распределением.

"НЕ умею использовать, умею использовать, умею НЕ использовать"
На эту спираль нельзя запрыгнуть с конца.

Когда уже умеешь, можно забыть о правилах.
Но правила нужны, чтобы научиться.
И нужны ограничения.
Потому что без ограничений не будет опоры и напряжения и направления пути.

Стычки консольщиков и PCшников похожи на помету территории самцами.
Но они поучительны. Красивый тек с разных сторон.
Поразительна схожесть техник в играх, компиляторах, музыкальном исполнительстве и в заключении контрактов.

"Не должно быть любимого оружия. Стать слишком близким с одним оружием - бОльшая ошибка, чем недостаточное знание его."
Примерно это я хотел сказать в предыдущем посте, когда перечислял мощных помощников, которыми так легко соблазниться.

Вот как-то так.
Читайте Миямоту и Кавасаки.

И цитируйте иногда про себя совершенные в своей простоте строки Анненского:
   Не потому, что от Нее светло,
   А потому, что с Ней не надо света.
aruslan: (Default)
Ненавижу
автоматически рождающиеся объекты типа блокирующего loading-on-demand. И синглтоны типа Майерса.
автоматически уничтожающиеся объекты под smart_ptr. И подсчёт ссылок.
автоматически регистрирующиеся получатели сообщений. И unbound рассылку сообщений.
автоматически создающиеся нетривиальные объекты со статическим storage duration. И вообще бурную деятельность до main().

мгновенность, нераспределенность, модель exception, lower-order programming.

Но научить правильно не всегда получается.
aruslan: (Default)
Если наш дорогой [livejournal.com profile] _winnie таки засабмиттит fixed_capacity_vector в boost, а буст опять начнёт нерезультативно размышлять, предлагаю осуществить Пушыстому мощную индустриальную поддержку.

По-минимуму - в виде всяческого PR-промоушена.
Чтобы помнили.
aruslan: (Default)
Просветленный не читает Стандарт, ибо в программировании он следует своему Сердцу.

Стандарт велик и непознаваем, но в его букве таится частичка великого разума.
Читай Стандарт дабы просветлиться, но просветлившись – отвергни его.

Однажды Ученик увлекся Стандартом, но после десятилетий его изучения, Ученик в негодовании изорвал его на куски и поклялся больше никогда не программировать на C++, ибо Ученик был излишне ретив и усерден в следовании букве стандарта, но не мог постигнуть Духа Стандарта.

Теперь он пишет систему биллинга на Java – постыдное и ничтожное занятие.

(ц) [livejournal.com profile] mxax
aruslan: (Default)
A Brief Look at C++0x by Bjarne Stroustrup
(Читать, конечно же, нужно discussion)

Ничего нового.

  template<class T> using Vec = vector<T,My_alloc<T>>;
  Vec<double> v = { 2.3, 1.2, 6.7, 4.5  };
  sort(v);
  for(auto p = v.begin(); p!=v.end(); ++p)
      cout << *p << endl;

Profile

aruslan: (Default)
aruslan

January 2014

S M T W T F S
   1234
56789 1011
12131415161718
19202122232425
262728293031 

Syndicate

RSS Atom

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Sep. 25th, 2017 06:14
Powered by Dreamwidth Studios