[00:37:55] <genieprox> http://rsdn.ru/article/philosophy/Optimization.xml?print
Процветающая жизнь – лучшее отмщение

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

Когда-то, во времена зарождения языка C, его распределитель памяти был самым слабым из существующих. Это был алгоритм «первый попавшийся», то есть он работал следующим образом: распределитель просматривал все узлы в списке блоков памяти, и первый же попавшийся свободный блок, который был не меньше нужного размера, разбивался на две части – одна возвращалась по запросу, вторая (общий размер блока минус запрошенный размер) возвращалась в список свободных узлов. «Преимущества» этого очевидны – очень низкая скорость работы и дикая фрагментация памяти. В действительности это хуже, чем вы можете себе представить. При выделении памяти приходилось пробегать весь список блоков, игнорируя уже выделенные. Поэтому при увеличении числа блоков производительность падала, а блоки становились все меньше и были непригодны к использованию. Они отнимали время без всякой реальной пользы.

Я как-то работал в CMU по годичному контракту. И мое первое впечатление от использования среды Unix выражалось в желании пойти к кому-нибудь из окружающих и спросить – «как вы вообще можете жить при таком раскладе вещей?» Технологии ПО в 1990 были в точности теми же, что и за десять лет до этого, когда я заканчивал CMU, за исключением того, что в современном случае компилятор не работал (он генерировал неправильный код даже для простейших конструкций), отладчик не работал, отслеживание вызовов (которое целиком состояло из шестнадцатеричных адресов безо всяких символов) было бесполезным, линковщик не работал, и не было ничего даже отдаленно похожего на подходящую систему документирования. Не принимая во внимание эти мелочи, я ожидал хотя бы нормальной пользовательской среды. Используя до этого Microsoft C вместе с CodeView, и даже ранние версии среды Visual C, я установил для себя достаточно высокие стандарты относительно инструментария, от которых Unix (особенно в то время) отстала очень далеко. На целые мили. И пару раз я чистосердечно выразился на эту тему.

В один из дней мы обсуждали какой-то алгоритм, требовавший распределения памяти. Я был убежден, что это решение неприемлемо, так как распределение памяти обошлось бы слишком дорого. Я произнес что-то вроде «ну конечно, если вы будете использовать этот тупоголовый распределитель памяти из Unix, то вы обречены на проблемы с производительностью. Нормальный распределитель снял бы все вопросы.». Один человек из присутствовавших на обсуждении сразу же набросился на меня: «Мне неприятно слышать, как вы опускаете Unix. И вообще, что вы знаете о распределителях памяти?». На что мой ответ был – «задержитесь на этой мысли, я сейчас вернусь». Я сходил в свой кабинет, где лежала копия книги IDL, принес ее с собой назад, и открыл главу «Распределение памяти». «Видите это?» - «Да». «Как называется эта глава?» - «Распределение памяти». Я закрыл книгу и указал на обложку – «Это имя вам знакомо?» - «Да, это ваше имя». «Отлично. Я написал эту главу, в которой рассказывается о разработке высокопроизводительного, минимально фрагментирующего распределителя памяти. Итак, вы спрашивали, что я знаю о распределителях памяти? Вообще-то, я написал на эту тему книгу».

Больше никто не набрасывался на меня, когда я опускал Unix.

В качестве небольшого замечания. Распределитель памяти в NT работает весьма схожим образом с тем, что я описал в книге IDL, и основан на алгоритме «быстрого совпадения», разработанном Чаком Вейнстоком для его докторской в CMU около 1974 года.
[00:39:37] <genieprox> что-то незаметно, что бы в юнипсах что-то улучшилось со времени 1990 г...
[00:41:26] <subjrs> NT уже была в 90-м?
[00:42:44] <valexey> в зачаточном состоянии.
[00:42:50] <valexey> "Разработка Windows NT под рабочим названием NT OS/2 была начата в ноябре 1988 года группой специалистов во главе с Дэвидом Катлером"
[00:43:09] <valexey> первый релиз - в 1993 году
[00:43:23] <valexey> genieprox: а ты с юнипсами когда последний раз имел дело? :-)
[00:43:49] <valexey> не на уровне "поставил какой-то дистрибутив, ой, гуй нигламурный и я тут ничего не понимаю, снес."
[00:44:05] <genieprox> ну пару недель назад пытался поработать при втором запуске PC-BSD -- вполне себе юнипс
[00:44:07] <subjrs> одно наблюдение. майкрософт использует окуенно окуительные идеи, тотже эктив директори, NT и многое другое. Идеи в осное действительно охрененные, но реализация - сами поняли. в юинкс в точности наоборот
[00:44:34] <valexey> genieprox: и что ты там делал? :-)
[00:44:40] <subjrs> ls ))
[00:45:00] <subjrs> uname - ухты, бсд. пора сносить ибо говно
[00:45:08] <genieprox> пытался понять, почему перестали работать вендовые разделы -- при первом запуске работали же
[00:45:22] <valexey> мне, как разработчику на юнипсе, либо на чем-то юнипсоподобном, много проще и приятней живется и работается.
[00:45:41] <subjrs> юникс для разроботчиков, венда для хомячков
[00:46:27] <genieprox> валексей абиделсо, за то что его назвали хомячком )))
[00:46:44] <subjrs> он разработчик ж
[00:46:52] <subjrs> это я хомячок вендовзный ))
[00:47:19] <genieprox> ping
[00:47:21] <Жаба> genieprox, Pong from you:  0.860183 s
[00:47:46] <genieprox> тем не менее он из-под венды тока что вышел ))
[00:48:10] <subjrs> все тру разработчики в венде расслабляются вечерами )
[00:49:27] <valexey> убил пачку хомячков в танки :-)
[00:49:56] <genieprox> а чо, танки под юнипсом нипашут что ле? )))
[00:50:02] <valexey> но винда действительно задрала тормозить. да и страшна и неюзабельна
[00:50:10] <valexey> угу. напишут. в планах есть.
[00:50:15] <subjrs> а я фильмы из под нее смотрю )
[00:50:48] <valexey> так. все. хочу ObjC рантайм под неюникс
[00:50:52] <valexey> то есть под линух :-)
[00:51:13] <genieprox> а я заказал на ебее ноут асер аспайр -- хз когда приедет и приедет ли вапще )) может тютю мои 500 баксов )))
[00:51:34] <valexey> какая точно модель?
[00:51:49] <genieprox> там сам ноут 340 баксов, доставка полтораста ((
[00:52:33] <genieprox> ща посмотрю, а то так не помню модель
[01:00:17] <genieprox> короче, там моник 15.6", проц амд е-250 вроде, 1.6 GHz, 2 GB DDR3 ram, видяха ати
[01:00:43] <valexey> греется как паровоз?
[01:01:44] <genieprox> нинаю пока
[01:02:46] <genieprox> что за процы такие хер инфу найдёшь ((
[01:06:03] <valexey> сам заказал незная что это?
[01:08:00] <genieprox> ну я посмотрел на сайте ebay.com -- вроде намана, да мне много и не надо, продавец вроде был солидный, топовый...
[01:08:23] <valexey> а живет с батареи сколько?
[01:08:58] <genieprox> APU AMD Fusion E-350 -- походу типа как core-i3 -- встроенная в проц видяха, но сам проц 2 ядра, а не 4
[01:09:43] <genieprox> мне батаррея некритична, но вроде 3.3 часа всего (
[01:09:45] <valexey> i3 тоже 2 ядра вроде как
[01:10:08] <valexey> а что у него со степингом? умеет?
[01:11:35] <genieprox> вот этот лот вроде: http://cgi.ebay.com/NEW-Acer-Aspire-AS5253-BZ602-15-6-Notebook-E-350-1-6-/400213234271
[01:12:10] <genieprox> степпинг? это вроде как номер модификации в интелях...
[01:12:31] <valexey> не, имеется ввиду динамическое изменение частоты в зависимости от текущей нагрузки
[01:13:06] <genieprox> http://antonkozlov.ru/kompyuter/apu-amd-fusion-e-350.html
[01:13:21] <valexey> у тебя ж 250
[01:13:23] <valexey> а не 350
[01:13:24] <genieprox> Intel Core i3 — семейство двухъядерных процессоров x86-64 фирмы Intel. --- фуууу )))
[01:13:35] <genieprox> о_О какие 250?
[01:14:05] <valexey> [01:00:34] <genieprox> короче, там моник 15.6", проц амд е-250 вроде, 1.6 GHz, 2 GB DDR3 ram, видяха ати
[01:14:07] <genieprox> а, да я не помнил точно модель -- помнил что что-то типа е250 или е350 -- хз чо за зверь
[01:14:47] <genieprox> ну этот вот лот по цене точно подошёл, более близких нету -- наверное он
[01:15:33] <genieprox> надо поискать сравнение е350 1.6 и core i3 1.6 ))
[01:15:38] <valexey> вообще... не нравится мне amd. интел пошустрее при прочих равных.
[01:15:58] <valexey> особенно в плане кодирования например. и прочих числодробилках.
[01:16:19] <genieprox> ну да, но там в той ценовой категории, что я хотел (до 500 уе с учётом доставки) -- других вариантов вроде не было
[01:16:39] <genieprox> мне на торрент и этого амд хватит )))
[01:16:54] <genieprox> лишь бы не шумел и не потреблял, и не грелся...
[01:17:09] <valexey> угу. а не шуметь не потреблять и не греццо оно будет только если степинг умеет.
[01:18:05] <genieprox> http://ru.wikipedia.org/wiki/Core_i3
"Мобильная серия первого поколения семейство Core i3-3хх. Согласно документу "Intel® Core i7-600, i5-500, i5-400 and i3-300 Mobile Processor Series Specification Update" от января 2011 года[2] всего процессоры данных семейств содержат 109 известных и подтверждённых аппаратных ошибок дизайна. Из них, ошибки начиная с 85-й представлены после января 2010 года. У данных семейств процессоров два степпинга - С2 и К0. Степпинг К0 свободен от 2 ошибок степпинга С2 и добавляет одну новую (AAТ104) ошибку, которой не был подвержен степпинг C2."
[01:19:28] <valexey> ошибки рулят, да
[01:19:35] <valexey> в MSP430 тоже пачка ошибок.
[01:19:58] <genieprox> вапще я хотел взять с интеловским камнем и ion2 чипсетом, но там цены уже за 650 были
[01:20:13] <valexey> О. Еще Étoilé имеет какой-то рантайм обжцэшный.
[01:20:31] <valexey> /me ищет ObjC рантайм чтобы засунуть его в линух. гнустеп походу не катит.
[01:21:22] <genieprox> "APU AMD Fusion E-350 имеет два, собранных по 40-нанометровому техпроцессу, ядра Bobcat 1,6 ГГц и работающий на частоте 500 МГц графический процессор Radeon HD 6310. По результатам тестов этот чип приближается к младшим моделям Intel Core и довольно серьёзно превосходит использующийся в ION 2 процессор Intel Atom D525"

чорд, это типа аналог атома? )))
[01:21:49] <genieprox> гну нинужен же )))
[01:21:50] <valexey> угу :-)
[01:22:12] <valexey> гнустеп - какое-то говно мамонта. не шибко развивающееся вроде как.
[01:22:28] <valexey> в идеале - найти исходники ябблового рантайма и портировать
[01:23:16] <genieprox> а зачем? о_О
[01:23:22] <genieprox> с++ рулит же ))
[01:24:04] <valexey> потому что я хочу дома тоже иметь возможность экспериментировать с рабочим кодом.
[01:25:16] <valexey> чтобы спокойненько, в емаксике писать.
[01:25:51] <genieprox> от емакса тунельный синдром же бывает ))
[01:26:16] <valexey> c чего бы?
[01:26:34] <valexey> работают обе руки. удобно. лишних теледвижений меньше, чем в других редакторах
[01:26:46] <genieprox> ну у одногоизвестнейшего емаксоюзера возник же. непомню у кого
[01:26:58] <valexey> вот если пытаться жать комбинации одной рукой, то есть не 10ти пальцевым методом, то да, будет худо.
[01:27:19] <valexey> и у не емаксоюзеров возникает. это зависит от дофига факторов
[01:27:42] <valexey> ой. яблоковая опунсурс лицензия не совместима с GPL
[01:32:37] <genieprox> короче, этот AMD Fusion между атомом и core2 duo
[01:36:22] <valexey> кстати, а зачем тебе ноут?
[01:37:39] <genieprox> торренты качать )
[01:38:11] <genieprox> интересно, я думал, селерон будет слабее, чем этот амд. но нет (
[01:38:18] <valexey> и все? а ноут тогда зачем?
[01:39:08] <genieprox> ну а какой ещё? что бы маленький, бесшумный, малопотребляющийся и негреющийся? и дешёвый при этом...
[01:40:26] <valexey> если только для торрентов - то всяко не ноут.
[01:40:46] <valexey> хотя бы неттоп какой-нибудь
[01:40:59] <valexey> хотя это тоже забивание микроскопом гвоздей
[01:41:36] <genieprox> ну не тока торренты, но в основном для этого.
а что с неттопом делать и де его брать -- хз
[01:42:17] <valexey> да они везде же продаются
[01:42:46] <genieprox> неттоп -- это полусмартфон что ле?
[01:43:04] <genieprox> по-моему, они по цене не меньше ноута будут
[01:44:07] <valexey> нет
[01:44:08] <Жаба> valexey, ну нет так нет
[01:44:11] <valexey> это аля десктоп
[01:44:14] <valexey> только мелкое
[01:44:25] <valexey> туда как обычно втыкается клава, мыш, монитор
[01:44:28] <valexey> ставится винда
[01:44:30] <valexey> и так далее
[01:44:34] <valexey> http://www.nix.ru/autocatalog/nettops_3q/3Q_3QNTPSign_IONW11DOS_White_Atom_D510_GT218_WiFi_117393.html
[01:46:16] <genieprox> вапще неттоп наверное лучше был бы. если бы я ещё знал про него ))
[01:46:49] <genieprox> макмини -- неттоп )))
[01:47:19] <valexey> макмини - жирный неттоп :-)
[01:47:21] <valexey> там толи кордва дуо
[01:47:24] <valexey> толи вообще i33
[01:47:53] <valexey> но для торрентов я бы взял бы тупо что-нибудь на базе той же pandaboard
[01:48:08] <valexey> оно вообще бесшумно безнагревно и так далее
[01:48:13] <valexey> но тебе конечно не вариант
[01:48:53] <genieprox> почему? о_О
[01:49:06] <valexey> потому, что ARM :-) А винды под арм пока не выпустили.
[01:49:19] <valexey> хотя грозятся
[01:49:52] <genieprox> а как же windows ce? оно вполне себе под арм
[01:50:39] <genieprox> мля надобыло вот этот купить и не париться ))
http://yarmarka.uz/catalog/komputer-orgtehnika/20-641-69386.html
прадва почти 600 баксов ((
[01:51:19] <valexey> ну, под винЦе нет львиной доли приложений. То есть с точки зрения виндовозника-юзера -- один хрен
[01:51:24] <genieprox> памяти больше, проц наверное мощнее )
[01:51:40] <valexey> брутально. даже блютуса нет.
[01:51:54] <genieprox> и сразу бы уже на столе щас был бы
[01:52:03] <genieprox> у того тоже блютуса не было
[01:52:28] <genieprox> хотя тут видяха ацтой, конечно
[01:52:55] <valexey> ужас. кому нужен ноут без блютуса? собственно нам даже на десктопах без блютуса тяжко
[01:53:46] <genieprox> да нафига он нужен? у мя всё равно нет ни одного блютусдевайса. а блютус-адаптер стоит 10 баксов
[01:54:22] <valexey> ну, у нас датчики на нем. сложно без блютуса :-)
[01:54:45] <valexey> гм. где бы надыбать Foundation классы для objc? желательно яббловые.
[01:54:50] <valexey> рантайм нашел :-)
[01:55:11] <genieprox> дык взять этот, x-code -- там наверное есть?
[01:56:05] <valexey> Ага. Нашел. Отлично!
[01:56:39] <genieprox> Intel® Celeron® Processor SU2300 (1M Cache, 1.20 GHz, 800 MHz FSB)
этот проц мощнее, чем amd e-350 1.6 GHz ((
[01:57:38] <valexey> Думаешь?
[01:57:45] <valexey> Зато целероны степинг не умеют как класс
[01:57:48] <genieprox> оказывается современные селероны не стоит недооценивать
[01:58:07] <genieprox> тесты смотрел -- там он везде рвёт e-350
[01:58:57] <genieprox> у этого селерона макс. потребление 10 ватт
[01:59:47] <genieprox> у e-350 потребление заметно выше, но там видяха встроена -- 18 ватт
[02:00:49] <valexey> ужас какой. 10 ватт -- это ж дофига!
[02:00:49] <genieprox> "Cool & Quiet settings bring the cpu frequency down to 800mhz and 0,566Volt but do not bring down the overall system power. "
то есть аналог этого "степпинга" есть
[02:01:31] <valexey> у целерона?
[02:01:35] <genieprox> атом 8 ватт. ну, это же не арм, и тем более не тот MSP430
[02:02:04] <genieprox> у амд е-350 Cool & Quiet settings есть
[02:13:46] <genieprox> "Если вы занимаетесь преобразованием изображений, особенно изображений больших размеров, то знание о кэшировании (пусть даже машинно-независимое) может принести вам прирост производительности на порядок."
[02:14:07] <valexey> угу
[02:16:14] <genieprox> "Возможно, самый лучший пример чисто программистской глупости при «оптимизации» я видел, когда занимался переносом большой библиотеки в исследовательском проекте. Представьте себе, что это был перенос с 16-битной платформы на 32-битную (в действительности это было 18-бит на 36-бит портирование, и язык был совсем не С, но это неважно – устрашающий код можно написать на любом языке, и я видел программистов на С, совершающих те же ошибки). В основном все работало, но иногда возникала странная проблема, проявлявшаяся при редком совпадении условий, и приводила эта проблема к краху программы. Я начал разбираться. Память в куче была повреждена. Когда я обнаружил, как это происходило, оказалось, что память в куче повреждалась при использовании неверного указателя, который приводил к затиранию случайного места в этой же куче. О’кей, а как этот указатель стал испорченным? Четыре уровня вложенности вниз при использовании указателей, и через 12 непрерывных часов отладки я нашел источник проблемы. Но почему это произошло? Еще через 5 часов я обнаружил что программист написал конструктор для структуры данных, похожей на struct, в виде { char* p1; char* p2; } где указатели были сначала 16-битными, а потом стали 32-битными. Когда я посмотрел на код инициализации, вместо ожидаемых конструкций вроде something->p1 = NULL; something->p2 = NULL; я увидел код эквивалентный (*(DWORD*)&something.p1) = 0! На очной ставке программист пытался оправдаться тем, что он смог обнулить два указателя одной машинной инструкцией (хотя это был не x86-компьютер, а мэйнфрейм), и преподносил это действие как умную оптимизацию. Конечно, когда указатели стали 32-битными, такая оптимизация приводила к тому, что обнулялся только один из двух указателей, а второй оставался заполненным каким-то случайным значением. Я заметил что такая оптимизация срабатывала только один раз, при создании объекта; и что среднее приложение, использовавшее эту библиотеку создавало в среднем шесть таких объектов; и что я потратил в предшествующий день 17 часов личного времени и 6 часов машинного времени на отладку; и что если бы программа не содержала ошибки и запускалась бы непрерывно сразу после своего завершения в течение 14 часов, то время, сэкономленное этой «умной оптимизацией» просто рассеивается как пыль! Пару лет спустя этот программист все еще выкидывал подобные трюки – есть люди, которые никогда ничему не учатся."
[02:19:28] <valexey> "Конечно, когда указатели стали 32-битными, такая оптимизация приводила к тому, что обнулялся только один из двух указателей, а второй оставался заполненным каким-то случайным значением. "
[02:19:35] <valexey> это, кстати, не очевидно
[02:20:07] <valexey> если у нас разрядность увеличилась в два раза, следовательно и WORD (слово) увеличилось в два раза
[02:20:11] <valexey> следовательно DWORD как был равен двум указателям, так и остался
[02:21:07] <valexey> но таки да. некоторые оберонщики (видел лично) при написании кода на шаррпе умудрялись вытворять подобное.
[02:21:54] <valexey> старательно обходили использование исключений (там где с ними логическая структура становилась много проще) мотивируя тем, что они тормозят.
[02:22:09] <valexey> при этом это место программы отрабатывало ровно один раз - при запуске :-)
[02:22:56] <genieprox> ну, в винапи dword = 32 бит что на winapi16, что на winapi32, что на winapi64
[02:23:41] <valexey> ну, как я понял, в данном случае винапей и не пахло даже
[02:23:56] <genieprox> ну просто как пример. возможно там было так же
[02:24:59] <valexey> хез, может быть. вообще это лишь означает, что DWORD  у них, несмотря на название, не был двойным словом :-)
[02:25:35] <valexey> ублин, какой я жуткий пират!
[02:25:56] <valexey> собираюсь скрестить нескрестимое - гнустеп, ябловый рантайм с clang/llvm
[02:26:00] <genieprox> вапще такие типы наджо запретить -- должны быть int16, int32, int64, uint16, uint32, uint64 и тп
[02:26:12] <valexey> первые два в одном проекте сосуществовать не могут в принципе из за лицензий :-)
[02:26:22] <genieprox> это не пиратство, а хакерство ))
[02:26:34] <valexey> это злостное нарушение лицензии!
[02:26:37] <valexey> :-)
[02:26:47] <genieprox> к чёрту лицензию ))
[02:26:52] <valexey> genieprox: неа. они нужны. но на околосистемном уровне.
[02:26:56] <genieprox> и кстати, в чём они противоречат?
[02:27:07] <valexey> а хез. надо будет прочитать.
[02:27:28] <valexey> gpl я осилил, а вот яббловую лицензию пока нет
[02:28:20] <valexey> Мне в общем то нужна максимально похожая на мак конфигурация.
[02:28:29] <valexey> но Foundation'a в опенсорсе маковского нет.
[02:28:44] <valexey> Поэтому эту часть видимо придется взять из GNU Step'a
[02:28:53] <valexey> Они оба базируются на OpenStep'e
[02:29:00] <genieprox> мой рейтинг на rutracker.org растёт бешенными темпами -- уже 54 ))) при том что я мало что выкачиваю и ещё меньше отдаю ))
[02:30:35] <valexey> ужасы какие.
[02:30:42] <valexey> а у меня там рейтинг вроде бы ровно 0
[02:30:50] <valexey> или хз. какой.
[02:30:56] <valexey> рейтинг же по сути ни на что не влияет :-)
[02:36:14] <genieprox> кто-нить смарел эту фильму?
http://rutracker.org/forum/viewtopic.php?t=2916408

бюджет -- 50 фунтов (на них была куплена видекамера -- старый камкордер), актёров и прочих набрали через майспейс.
стоит тратить время?
[02:37:26] <genieprox> ну вроде чем выше ретйтинг, тем выше скорость загрузки, и при слишком низком рейтинге вапще можно не получить никаких ссылок
у мя скорость канала 64к, так что мне этот рейтинг и впрямь мало что решал бы )
[02:38:02] <valexey> никогда проблем не было :-) Всегда качается со скоростью полмегабайта в секунду
[02:38:20] <genieprox> 5 мегабит канал? ))
[02:38:35] <genieprox> у нас тут такая скорость тока у админа провайдера инета ))
[02:40:17] <genieprox> ну лана, всем бб, уже почти 4 утра ))
[02:41:13] <valexey> ну, где-то до 4х, да. бывает.
[02:41:29] <valexey> бб