Оптимизация использования конвейера процессора в asm

sergey2611

Может кто знает где можно почитать про subj?

shlyumper

Тебя для какого процессора и с какими целями это интересует? Если от Pentium III и выше, то насколько я в курсе "ручками" ты сделать лучше компилятора вряд ли сможешь. До Pentium II включительно у меня когда-то валялись доки, только нах оно тебе? Вообще, вся эта документация лежит на www.intel.com, только нужно там хорошо покопаться.
А вообще, если нужно сделать очень качетсвенный код, просто возьми интеловский компилятор и не парься...

bleyman

Ну не совсем.
Вот у меня где-то (на сдохшем винте) была замечательная дока про 3д графику. Софтверную. Поэтому замечательность ее состояла вовсе не в графике, а в примере софтверной афинной текстурилки, которая текстурит пиксель за пять процессорных тактов. Я тихо офигевал. Там не только распараллеливание, там еще юзание плавающего сопроцессора правильное, и ваще.

kindr-16

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

bleyman

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

shlyumper

Книжка (дока) называлась скорее всего Zen of Graphics Programming, кажется так. Знаю, читал. Только ты не учел то, что эта книжка была написана в эпоху Pentium I без MMX. Сейчас все усложнилось на порядки. Суть тонкости оптимизации заключается в том, что ты после долгой ебли можешь получить код, который будет работать не быстрее, чем сгенерированный компилятором. Современные компиляторы стали тоже офигенно умными.

bastii

А out-of-order execution у них со p-II или p-III появилась? Там уже точно не реально представить так это все будет работать. Хотя у Интела были всякие тулы, в том числе и такой, что можно было писать команды, а тул показывал как это будет выполняться. Назывался весь пакет тулов примерно "VTune ...".

rosali

тул показывал как это будет выполняться

Есть такое слово rdtsc оно в eax/edx зачитывает такты процессора после включения, с ее помощью по крайней мере можно узнать _сколько_ это будет выполняться. Вообще то сейчас процессоры быстрые, а память медленная, так что все счетные программы "стоят" на обращениях в память, даже кеши никакие не помагают. Чем париться с конвейерами лучше заботать prefetch

rosali

Современные компиляторы стали тоже офигенно умными

Да уж. Но что MMX, что SSE(2,3) такие дурацкие instruction set-ы... там есть такие комманды, ни одному компилятору не придет в голову ими воспользоваться. У меня вот есть программка, она бинарную матрицу 8х8 транспонирует за 40 тактов. Попробуй получить такую с помощью компилятора?.. Получится -- я перестану на ассемблере программировать!.. Да нет, не перестану на ассемблере нужно уметь программировать... чтобы писать свой компилятор

bastii

вот поэтому все зависит от алгоритма и как структуры данных организованы, а микрооптимизацию никогда не поздно сделать

rosali

Я честно говоря не понял... Вот если ты с помощью аккуратной работы с кешем (prefetch там и т.п.) ускорил программу скажем в 3 раза, а потом с помощью этой твоей микрооптимизации еще ускорил на 5%. Так это значит поздно было или нет?

bastii

вот я и имел ввиду, что никогда не поздно
Оставить комментарий
Имя или ник:
Комментарий: