Оптимизация использования конвейера процессора в asm
www.intel.com, только нужно там хорошо покопаться.
А вообще, если нужно сделать очень качетсвенный код, просто возьми интеловский компилятор и не парься...
Тебя для какого процессора и с какими целями это интересует? Если от Pentium III и выше, то насколько я в курсе "ручками" ты сделать лучше компилятора вряд ли сможешь. До Pentium II включительно у меня когда-то валялись доки, только нах оно тебе? Вообще, вся эта документация лежит на А вообще, если нужно сделать очень качетсвенный код, просто возьми интеловский компилятор и не парься...
Вот у меня где-то (на сдохшем винте) была замечательная дока про 3д графику. Софтверную. Поэтому замечательность ее состояла вовсе не в графике, а в примере софтверной афинной текстурилки, которая текстурит пиксель за пять процессорных тактов. Я тихо офигевал. Там не только распараллеливание, там еще юзание плавающего сопроцессора правильное, и ваще.
это уже использование не конвейера, а многопроцессорности и расширенных наборов команд.
Ну типа я не понимаю разницу между конвейерами, многопроцессорностью и плавающим сопроцессором. Точнее, не вижу в ней принципиальности.
Книжка (дока) называлась скорее всего Zen of Graphics Programming, кажется так. Знаю, читал. Только ты не учел то, что эта книжка была написана в эпоху Pentium I без MMX. Сейчас все усложнилось на порядки. Суть тонкости оптимизации заключается в том, что ты после долгой ебли можешь получить код, который будет работать не быстрее, чем сгенерированный компилятором. Современные компиляторы стали тоже офигенно умными.
А out-of-order execution у них со p-II или p-III появилась? Там уже точно не реально представить так это все будет работать. Хотя у Интела были всякие тулы, в том числе и такой, что можно было писать команды, а тул показывал как это будет выполняться. Назывался весь пакет тулов примерно "VTune ...".
тул показывал как это будет выполняться
Есть такое слово rdtsc оно в eax/edx зачитывает такты процессора после включения, с ее помощью по крайней мере можно узнать _сколько_ это будет выполняться. Вообще то сейчас процессоры быстрые, а память медленная, так что все счетные программы "стоят" на обращениях в память, даже кеши никакие не помагают. Чем париться с конвейерами лучше заботать prefetch
Современные компиляторы стали тоже офигенно умными
Да уж. Но что MMX, что SSE(2,3) такие дурацкие instruction set-ы... там есть такие комманды, ни одному компилятору не придет в голову ими воспользоваться. У меня вот есть программка, она бинарную матрицу 8х8 транспонирует за 40 тактов. Попробуй получить такую с помощью компилятора?.. Получится -- я перестану на ассемблере программировать!.. Да нет, не перестану на ассемблере нужно уметь программировать... чтобы писать свой компилятор
вот поэтому все зависит от алгоритма и как структуры данных организованы, а микрооптимизацию никогда не поздно сделать
Я честно говоря не понял... Вот если ты с помощью аккуратной работы с кешем (prefetch там и т.п.) ускорил программу скажем в 3 раза, а потом с помощью этой твоей микрооптимизации еще ускорил на 5%. Так это значит поздно было или нет?
вот я и имел ввиду, что никогда не поздно
Оставить комментарий
sergey2611
Может кто знает где можно почитать про subj?