Сергей Холодилов ([info]fat_crocodile) wrote,
@ 2009-05-18 00:48:00
Previous Entry  Add to memories!  Tell a Friend  Next Entry
Entry tags:мысли, политех, программинг

Теория
Почувствовал пользу от теории :) Весьма, гм, специфическую.

Был у нас такой предмет "Перспективные микропроцессоры", вёл его Юрий Евгеньевич Шейнин. Рассказывал про конвейеры, кеш, предсказание переходов, векторные инструкции, VLIW прочее подобное. Мужик он умный, знает много, рассказывал интересно. Да и материал благодатный: это как раз тот случай, когда нужно понимать логику архитекторов, т.е. думать головой.

Но курс, очевидно, бессмысленный и беспощадный: всё это слишком далеко от практики, практически ничего из описываемого невозможно пощупать, даже если специально стараться. Будь ты аппаратчик или программист, если ты не занимаешься разработкой процессоров, предсказалка переходов тебе параллельна, применить знания о ней не получится никак. А если ты разрабатываешь процессоры, то уж как-нибудь объяснят, наверное (с кешем столкнуться проще, но и это тоже очень нетривиальная задача).

То есть ничего особенного, дающего конкурентные преимущества имеющего практическую пользу, в рамках этого курса нам не рассказывали. Это было скорее для общей образованности, для введения в контекст.

А теперь посмотрим, как эта общая образованность мне пригодилась.

Я сейчас читаю доки по POWERx/PowerPC. И там довольно много пишут про кеши, конвейер, переходы и т.п. И благодаря тому, что я в курсе, что это такое, я понимаю, что по сути ничего особенного они не пишут :) Так вот, поинт в том, что развив здоровый пофигизм в отношении непонятных деталей, интуицию и уверенность в себе, этого результата можно было бы достичь и без теории вообще :) Более того, в 99% случаев можно и без интуиции.

При этом я-то как раз подобные штуки очень люблю. Мне только волю дай -- буду сидеть и разбираться, как оно работает, сам ничего не делая :) Но я отношу это на счёт своих психологических комплексов и стараюсь себя как-то контролировать.

Upd: Как обычно, в комментах пришёл к сути того, что хотел сказать.

Я не против таких курсов, прикольно быть образованным. Я просто отмечаю сугубую не обязательность подобного образования. И низкую практическую эффективность в плане подготовки инженера.

Как заметил многоопытный [info]lumag, существуют ситуации, когда подобные знания оказываются полезны. И тут я не могу с ним спорить. Но, на мой взгляд, проблема в том, что в таких ситуациях знаний оказывается нужно гораздо больше, и более конкретных: не про вообще, а про вот этот вот процессор. Конечно, владение общим контекстом облегчает задачу получения конкретных знаний. Но по идее, можно и этот контекст изучить тогда, когда понадобится, благо в данном случае всё вполне тривиально, всего пара идей на всю индустрию.

Да, и конечно, общее образование полезно, и мозги развивает, и вообще. Но, может быть, это не самый эффективный способ расходования [учебного] времени?

Я правда не знаю. Общие слова про расширение кругозора и сознания я и сам могу сказать. И мне тоже кажется, что это важно. И я сам этим для себя занимаюсь. Но мало ли чем я занимаюсь. У есть некоторые сомнения в собственной адекватности, так что это не аргумент. Ещё у меня нет никаких экспериментальных данных, и я даже не знаю, какие измерения могли бы решить проблему, т.е. нет даже никаких конкретных утверждений. Есть пока только вот такие вот смехуечки над практической полезностью теории :)

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




(31 comments) - (Post a new comment)


[info]lumag
2009-05-17 10:41 pm UTC (link)
Помнить о всяких предсказателях, векторах и т.п. надо:
1) При оптимизации кода. Причем как не уровне "если мы сдесь prefetch сделаем, к моменту, когда данные понадобятся, у нас как раз кэш-лайн прососет", так и на самом банальном уровне асмовой оптимизации.
2) при написании, отладке компиляторов (что по сути тоже является п.1, но в профиль)
3) VLIW — это слегка экзотика (ia64, blackfin, из современного больше ничего не вспомню) а вот разницу CISC vs. RISC надо бы вдалбливать в головы.
И кусок о конвейерах. Чтобы, например, не спрашивали, зачем на MIPS после перехода лишний NOP.

(Reply to this) (Thread)


[info]fat_crocodile
2009-05-17 11:12 pm UTC (link)
Вектора это которые в креях :) Ну, векторные регистры, операции над ними. Когда буду писать компилятор под крей -- я обязательно вспомню, да :)

Для оптимизации (которой я занимался раз в жизни и на гораздо более высоком уровне), на мой взгляд, хватает кеша. Всё остальное (одновременное выполнение, переименование регистров, предсказание переходов) -- о-малое от этого, да и повлиять на это гораздо сложнее.

VLIW -- да, на примере Itanium.

(Reply to this) (Parent)(Thread)


[info]lumag
2009-05-17 11:21 pm UTC (link)
AltiVec, SSE --- это все тоже вектора AFAIR

Частности всегда можно узнать из доки. Зачастую важнее просто сам факт наличия кеш-лайнов и соответствующих идей.
Потом, одним кешем оптимизации не ограничиваются. Вручную расставить likely()/unlikely() в hot-path тоже помогает.
Одновременное выполнение иногда вылезает в полный рост, если ты дергаешь одну инструкцию на SSE, потом что-то делаешь с обычными регистрами, потом снова SSE и т.п.

(Reply to this) (Parent)(Thread)


[info]fat_crocodile
2009-05-17 11:41 pm UTC (link)
Ну да, но это смешные такие вектора, коротенькие совсем :) Он в этой связи MMX кратко упоминал. Может быть и AltiVec тоже, просто я не запомнил.

Ты имеешь ввиду, что если перемешать два потока инструкций, работающих с несвязанными регистрами, то оно выполняется в два раза быстрее? Пожалуй да, логично.

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

Я не против таких курсов, прикольно быть образованным :) Я просто отмечаю сугубую не обязательность подобного образования. И низкую практическую эффективность в плане подготовки инженера.

(Reply to this) (Parent)(Thread)


[info]lumag
2009-05-18 12:05 am UTC (link)
4 32-битных инта afair

Ну, по-моему надо для этого знать, где копать, что делать и почему.

Ну в общем да. Правда что тогда обязательно? Мне, например, ФП ни разу не требовалось. Особенные изыски математики — тоже. Максимум — ДКА, грамматики. Давай большую часть курсов объявим факультативными :) Ладно, шучу.

(Reply to this) (Parent)(Thread)


[info]fat_crocodile
2009-05-18 12:09 am UTC (link)
Ну да, ты шутишь, а я что-то очень похожее в upd к посту написал :)

(Reply to this) (Parent)


[info]fat_crocodile
2009-05-17 11:16 pm UTC (link)
Но опять же, если нужна такая суровая оптимизация, она потребует гораздо больше конкретных знаний про конкретный процессор. Какой у него размер кеша, сколько раз он ассоциативный, сколько байт он считывает за раз из памяти и т.п.

Общие знания -- это только некий контекст.

(Reply to this) (Parent)


[info]fat_crocodile
2009-05-17 11:22 pm UTC (link)
Кстати, про креи тебе может быть интересно, если не в курсе :)

Векторный регистр представляешь? Что-то типа 64-х обычных. Ну и два таких регистра можно складывать, или умножать на число, или ещё какие-нибудь операции. Но это понятно и не интересно.

Интересно, что АЛУ при это используется одно, а не 64. А ускорение достигается за счёт того, что мы заранее знаем, что нам нужно выполнить много операций и можем плотно заполнить конвейер, чтобы каждый тик выполнялась полезная работа.

Во всяком случае, так было в ранних моделях.

(Reply to this) (Parent)(Thread)


[info]lumag
2009-05-17 11:35 pm UTC (link)
Не знал. В общем AFAIU примерно те же идеи воплощаются в современных SIMD инструкциях (single instruction, multiple data), вот только используется под это специальный(ые) алу.

(Reply to this) (Parent)


[info]kodt_rsdn
2009-05-17 10:47 pm UTC (link)
Шейнин - в Политехе?! Эвона как. А у нас он в ЛИАПе на 44 кафедре вёл...

(Reply to this) (Thread)


[info]fat_crocodile
2009-05-17 11:05 pm UTC (link)
Он последние лет пять и там и там одновременно.

(Reply to this) (Parent)


[info]ushastyi
2009-05-18 06:48 am UTC (link)
Теория -- это база, без которой не может быть отличного специалиста (хороший может быть, но отличный -- нет). Теория дает кругозор, учит мыслить широко, дает возможноть обобщать и экстраполировать чужой и собственный опыт.

Не хочу никого обидеть, но именно из-за глубокой теоретической подготовки специалисты, окончившие в свое время физтех или МГУ (говорим о Москве), гораздо более эффективны и ценны, чем из других ВУЗов. Причем, шире мыслят не выпускники ВМК, скажем, а наоборот физики или математики.

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

(Reply to this) (Thread)


[info]fat_crocodile
2009-05-18 09:45 am UTC (link)
Именно! Именно! Физики и математики! А вовсе не чего-то айтишного. Об этом -- следующий пост :)

Ну и ещё вот тут часть ответа относится и к твоему комментарию тоже.

(Reply to this) (Parent)(Thread)


[info]ran_dom
2009-05-18 01:21 pm UTC (link)
я так понял, что "физики или математики" шире мыслят именно в IT

(Reply to this) (Parent)(Thread)


[info]fat_crocodile
2009-05-18 01:22 pm UTC (link)
да, я тоже так понял :)
завтра напишу подробнее

(Reply to this) (Parent)


[info]ran_dom
2009-05-18 08:20 am UTC (link)
>>по сути ничего особенного они не пишут
а им и не нужно писать что-то особенное. они должны описать, как пользоваться привычным хозяйством в его текущем составе.

>>Upd
угу. а вычислительные алгоритмы можно писать, не зная об ограниченной точности представления чисел;) конкретная полезность уже разобрана в комментариях - и реально применяется. более того - сейчас компиляторы достаточно хороши, чтобы нагружать процессор по полной -- но если код на входе "корректный". не нужно знать детали архитектуры, чтобы пользоваться "более экономными конструкциями", например:
-в длинных циклах идти по памяти вперед (что есть длинный - зависит от длины линии кэша, но можно идти вперед всегда)
-использовать регулярные переходы или условно-вычисляемые конструкции - в конкретном месте может ускорять и в десять раз, но общий вклад невелик
-группировать разные работы над одним блоком данных (хватит регистров чтобы сделать за один обход, или разбить на несколько обходов, или как не разбивай - не хватит) - это влияет на скорость до 3х раз
-планирование конвеера -- как правило сильное место компилятора. но нужно создавать ему удобные задачи

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

(Reply to this) (Thread)


[info]fat_crocodile
2009-05-18 09:26 am UTC (link)
Саш, ну оптимизация это рулез-рулез. Но я ею занимался ровно один раз в жизни. Когда писал диплом. И там мне понадобилось просто чуть-чуть подправить управление памятью. И это я ещё представитель вымирающего класса С-программистов, и я чуток знаю ассемблер. Что уж про остальных говорить. Так что это правда экстремально узкая область.

Про мысли. Не совсем. Вы все делаете некоторую подмену, которую я сам только что осознал :)

Ежу понятно, что если убрать что-то, не-вредное, то результат лучше не станет, а может быть станет хуже. Это из аддитивности пользы следует.

Вопрос в другом. Я сомневаюсь не в пользе, а в эффективности. В КПД. Есть ли что-то более полезное, на что можно было бы потратить те же пять лет в институте? Из постановки вопрос в конце -- такое, что расширит мою область или что мне потом сложно будет освоить.

(Reply to this) (Parent)(Thread)


[info]ushastyi
2009-05-18 10:03 am UTC (link)
Оптимизация оптимизации рознь. Не часто сейчас может встретиться задача оптимизировать программу под конкретное железо, но приципиально похожие задачи могут встретиться везде, где требуется высокая производительность. Может понадобиться оптимизировать что-то под конкретную операционную систему, Java-машину или даже под определенную распределенную программную архитектуру. И тут, казалось бы бесполезные знания в области архитектуры микропроцессоров, могут вдруг "заработать" на другом масштабе.

(Reply to this) (Parent)(Thread)


[info]fat_crocodile
2009-05-18 11:30 am UTC (link)
Ну, при такой постановке могут заработать и "казалось бы бесполезные знания из области квантовой электродинамики" :)

Но вообще я имел ввиду, что к твоему комментарию относится скорее вторая часть, про подмену.

Ещё раз, я не спорю с тем, что наличие теории лучше чем её отсутствие... при условии неограниченного времени. В условиях ограниченного времени имеет смысл думать не только о направлении, но и о КПД процесса.

(Reply to this) (Parent)(Thread)


[info]ushastyi
2009-05-18 11:36 am UTC (link)
Бесчеловечные эксперименты на людях вроде бы подтверждают, что специалисты с хорошей теоретической подготовкой сильнее. Так что вроде как все хорошо с КПД. Учебные программы оттачиваются десятилетиями.

(Reply to this) (Parent)(Thread)


[info]fat_crocodile
2009-05-18 11:39 am UTC (link)
По программированию?

Я сейчас говорю про вполне конкретную область знаний. Про физику не спорю.

(Reply to this) (Parent)(Thread)


[info]ushastyi
2009-05-18 11:54 am UTC (link)
Ну могу сказать, на вскидку, что мне не раз пригодилось из теории на практике:
1. Многие алгоритмические вещи, как конкректные алгоритмы и сложные структуры данных, так и понятие сложности и т.д.
2. Теория баз данных и принципы построения "движков" СУБД, как общие, так и конкректные, с которыми приходилось работать.
3. Знания принципов взаимодействия с диском и памятью, устройства кэшей и т.д.
4. Функциональное программирование

Архитектуру микропроцессоров я не изучал, может, и пригодилась бы.


(Reply to this) (Parent)


[info]ran_dom
2009-05-18 01:11 pm UTC (link)
данилло постоянно оптимизирует - хотя пишет далеко не системные вещи.

с моей точки зрения отсутствие необходимости в хорошем планировании и качественном дизайне - следствие численного доминирования (в смысле количества экземпляров) одной конкретной архитектуры и созданных вокруг неё бизнес-моделей. ситуация смешная - программисты под Wintel считают всех остальных маргиналами, когда в мире множество других систем, более-менее непохожих на Wintel и друг на друга...

(Reply to this) (Parent)(Thread)


[info]fat_crocodile
2009-05-18 01:18 pm UTC (link)
Ну и у меня диплом быт не системный, а вычислительный.

А вот связи второго абзаца с моим комментарием я не понял...

(Reply to this) (Parent)(Thread)


[info]ran_dom
2009-05-18 01:20 pm UTC (link)
когда "хорошем планировании и качественном дизайне" не самые важные вещи, и их можно заменить на что-то более "оптимальное"

(Reply to this) (Parent)


[info]ran_dom
2009-05-18 01:19 pm UTC (link)
об эффективности

актуальный для меня пример: три года назад я потерял портативный CD-плеер, и с тех пор так и не купил замену. те что есть не устраивают меня по качеству - а устраивающие стоят неподьемных денег: они уже в другом сегменте - из обычного потребительского сегмента качественные вещи вытеснены ценовой конкуренцией.

но что CD-плеер -- тут я могу утешится, что у кого-то они есть;) с образованием так быть не может. нельзя иметь нескольких классных специалистов и остальных второй свежести КПД-оптимальных - на следующей итерации специалисты будут уже только КПДО;)

(Reply to this) (Parent)(Thread)


[info]fat_crocodile
2009-05-18 01:20 pm UTC (link)
Саша, речь не про сокращение сроков обучения. Речь про те же самые пять лет. Их нужно использовать эффективно.

(Reply to this) (Parent)(Thread)


[info]ran_dom
2009-05-18 01:27 pm UTC (link)
извини - я тоже не про сроки писал.

возвращаясь к основной теме поста: жалко, что к лекциям не было достойных практических занятий (мне нравится твой принцив, что не пощупав и применить не сможешь). наверняка можно было бы выкинуть какой-нибудь курс по осваиванию ГовноСредства'2008 или ему подобных...

(Reply to this) (Parent)


[info]ran_dom
2009-05-18 01:34 pm UTC (link)
>>мог бы я освоить это без отрыва от производства, если бы мне понадобилось

если построить обучение по принципу эффективности - то не будет книжек, которые можно прочитать. их никто не напишет... и придется "осваивать" самому. в одиночку. хочется?

(Reply to this) (Parent)


[info]fat_crocodile
2009-05-18 09:29 am UTC (link)
>> а им и не нужно писать что-то особенное. они должны описать, как пользоваться привычным хозяйством в его текущем составе.

Я имел ввиду, что в контексте моего текущего интереса к Power-ам эта информация для меня бесполезна, хотя и познавательна.

(Reply to this) (Parent)(Thread)


[info]ran_dom
2009-05-18 01:05 pm UTC (link)
ты же не собираешься писать кодек или JiT дня него?;) а обычные приложения могут работать как угодно медленно, пока это терпят пользователи...

(Reply to this) (Parent)


(31 comments) - (Post a new comment)

Create an Account
Forgot your login or password?
Login w/ OpenID
English • Español • Deutsch • Русский…