НГ Голубь Искусство программирования на Ассемблере. Platinum Edition

Тема в разделе "WASM.BOOKS и WASM.BLOGS", создана пользователем Lutien, 3 май 2006.

  1. Lutien

    Lutien New Member

    Публикаций:
    0
    Регистрация:
    6 май 2004
    Сообщения:
    7
    Адрес:
    Russia
    Кто-нибудь смотрел на эту книгу? стОит ли она тех денег?



    Цель - нулевого знакомого прокачать до ручного использования MMX и SSE - в сишных прогах.



    Если есть что лучшее, посоветуйте плзз.. Крайне желательно найти одну хорошую книгу т.к. оптимизацию нужна была уже вчера :dntknw:
     
  2. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    Lutien

    Многие сишные компиляторы, включая Visual C, умеют эффективно оптимизировать код под разные камни. В лучшем случае такая оптимизация может обернуться выйгрышем в скорости в 2 раза. Опытный ассемблерщик, конечно, может оптимизировать код раз в 10, но от нулевого знакомого до опытного ассемблерщика лет 5 интенсивной практики.
     
  3. Lutien

    Lutien New Member

    Публикаций:
    0
    Регистрация:
    6 май 2004
    Сообщения:
    7
    Адрес:
    Russia
    Само собой... Опытный в 10 раз за 5 лет, а начинающий в 2 раза за 0,5 лет ;)
     
  4. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    Lutien



    Нет, за 1-2 года в среднем. Эти цифры приводятся в книге R. Hide "Art of Assembly". Там же есть более-менее научное обоснование этим цифрам. И ещё следует помнить, что оптимизация на уровне алгоритма не имеет практического предела, а оптимизация кода - имеет. Отсюда следует, что выгоднее оптимизировать сишный исходник, чем вникать в тонкости архитектуры процессора. Ещё полезно иметь ввиду, что 90% времени процессор выполняет 10% кода программы. В некоторых источниках пишут, что 80 - 20... Профайлеры умеют находить эти 10 или 20% кода, чтобы программист мог сосредоточиться на оптимизации именно их.
     
  5. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    Quantum

    Опытный ассемблерщик, конечно, может оптимизировать код раз в 10

    по сравнению с компилятором? по скорости?



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



    Но Вы правы в главном - без постоянного совершенствования своих навыков, изучения литературы, чужих программ и написания собственных опусов ничего никогда толком не получится.
     
  6. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    Quantum

    выгоднее оптимизировать сишный исходник, чем вникать в тонкости архитектуры процессора



    Вот тут я полностью согласен. Помню книжка выходила (давно) "Оптимизация в Фортране", классная книжица, только теперь ее наверное не достанешь...
     
  7. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    crypto



    По сравнению с неоптимизированным сишным компилятором кодом. Да, по скорости. На размер это тоже распространяется, но раз уж разговор зашёл про MMX/SSE, думается, что Lutien интересует именно скорость.





    Хорошо, если слова Р. Хайда не вызывают у Вас доверия, могу привести пример из личной практики. Мы с Asterix'ом давно занимаемся оптимизацией библиотеки для проигрывания XM-файлов - uFMOD. Оригинальный код был процентов на 80% сишный. В последней версии сишного кода осталось не более 50%. По самым скромным замерам производительности, ассемблерный код обгоняет сишный ровно в 4 раза. Но основным критерием оптимизации был размер! Если бы мы сосредоточиличь оптимизировать его по скорости, то выйгрыш был бы по крайней мере ещё в 2 раза, т.е. в общей сложности 8-кратный. И это по сравнению с максимальным уровнем оптимизации по скорости компилятора Visual C. Так что всё сходится.
     
  8. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    Quantum

    А не могли бы Вы привести примеры конструкций, в которых удалось достичь такого выигрыша по скорости?
     
  9. Lutien

    Lutien New Member

    Публикаций:
    0
    Регистрация:
    6 май 2004
    Сообщения:
    7
    Адрес:
    Russia
    товарищи дзенствующие, вы немного отвлеклись :dntknw:

    Подскажите плзз книгу ;)
     
  10. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    crypto

    Библиотека создаёт тред, который периодически выполняет около 20Кб кода (синтезирует звук). Это в оригинальной сишной версии. В последней версии кода уже 8Кб. Оптимизированных конструкций там очень много. Некоторые связаны с сокращением циклов, использованием регистров и стека вместо глобальных переменных, оптимизация FPU инструкций; "стратегическое" размещение кода, чтобы все бранчи были короткими и т.д. Исходники обоих версий библиотеки открыты.



    Lutien

    А я уже упомянул одну очень хорошую книгу. Книга открыта для свободного доступа (бесплатного), но на английском.
     
  11. The Svin

    The Svin New Member

    Публикаций:
    0
    Регистрация:
    6 июл 2003
    Сообщения:
    665
    Адрес:
    Russia


    Дык он про MMX и SSE спрашивает :)
     
  12. trash

    trash New Member

    Публикаций:
    0
    Регистрация:
    9 апр 2006
    Сообщения:
    143
    Адрес:
    х.з.
    Мультимедийные расширения в командах x86

    MMX/SSE - предназначены для параллельной обработки

    данных в концепции SIMD (то бишь - одной инструкцией

    кладет сразу четырех зайцев).



    Существуют математические DSP/3D-Video алгоритмы оптимизированые под паралелизм. В основном реализованы они на C++ (под новые релизы VC++/Intel C++). В них используються классы и перегрузка операций и

    специалные типы данных (__m64, __m128) т.д.



    Это я к тому, можно неплохо поучиться кодированию на

    ММХ/SSE. Изучая асм-лист который они делают. Интел

    делает вобще супер с максимальным использованием

    регистров .
     
  13. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    The Svin



    Человек спрашивает про оптимизацию. MMX и SSE - это частный случай. Даже если бы интересовало только про MMX/SSE, нет книг, которые можно было бы читать без знания азов.
     
  14. The Svin

    The Svin New Member

    Публикаций:
    0
    Регистрация:
    6 июл 2003
    Сообщения:
    665
    Адрес:
    Russia
    Понял :)

    Ну тогда уж нужно начинать в "Систематического курса арифметики" Киселёва Андрея Петровича :)
     
  15. alpet

    alpet Александр

    Публикаций:
    0
    Регистрация:
    21 сен 2004
    Сообщения:
    1.221
    Адрес:
    Russia
    crypto

    В своем поисковом алгоритме, я использовал асм, поскольку код скомпилированный Visual C близко не подходил по размеру и производительности (по моим прикидкам в 10 по скорости, для P4/Athlon). Да и что тут говорить, если в Си нет близкого аналога операций rol и setcc. Правда получение такого результата пришло не сразу - примерно за месяц кропания, с участием AMD CodeAnalyst.



    Задача алгоритма, при поиске 32-битного числа, среди 32-ух подобных чисел (иначе говоря массив), создавать 32-битное же множество, в котором единичные значения битов указывают на совпадения в соответствующих позициях массива с заданым образцом. Поскольку от алгоритма требовалось искать в мегабайтах данных, получалась одновременно эффективная упаковка результатов поиска. В итоге различные версии алгоритмов используются в моем взломщике игр, и на сей день остающимся не превзойденным по скорости поиска.
     
  16. Lutien

    Lutien New Member

    Публикаций:
    0
    Регистрация:
    6 май 2004
    Сообщения:
    7
    Адрес:
    Russia


    ну не совсем он ;) Я бы даже сказала совсем не он ;)





    Если вы имели ввиду: http://orel3.rsl.ru/mccme/djvu/klassik/kiselev.htm, то порядка 80% содержимого книги мне известно ;)



    Азы небольшие есть... Два семестра лаб на асме... Правда было это лет эдак несколько назад... ;) Правда в основном под микроконтроллеры.... ;) Но было и под PC....



    В общем уточняю задачу, а то вы все про свое, кто круче заоптимизировал ;)



    На входе: человек, со смутынми воспоминаниями ою ассемблере, MASM под DOS....



    Надо: максимально быстро покачаться до понимания уже написанного на асме с использованием MMX и SSE, для модификации всего этого ;) Да, я понимаю, что получится так себе, но переписывать все это на С, займет еще больше времени. :dntknw:

    Побродив по озону, наткнулась на сабжевую книгу, которая обещает от 0 до MMX и SSE. Что очень сомнительно :dntknw: Но все же может кто смотрел?



    ЗЫ Да и понимание генерируемого компилатором кода то же бы прокачать хотелось бы ;) а то так по mov 'ам только ориентируюсь ;)





    Спасибо, бум читать... Но она старая... там про MMX и SSE Ничего нет :dntknw:
     
  17. alpet

    alpet Александр

    Публикаций:
    0
    Регистрация:
    21 сен 2004
    Сообщения:
    1.221
    Адрес:
    Russia
    Lutien

    Книга конечно хорошо, но лучше всего имхо ассемблер изучается в процессе написания чего-либо. Моим основным источником знаний служил справочник Юрова, но к тому времени я уже прочел Абеля (кстати - отличное изложение, хоть и несколько устарело).
     
  18. The Svin

    The Svin New Member

    Публикаций:
    0
    Регистрация:
    6 июл 2003
    Сообщения:
    665
    Адрес:
    Russia


    NOT(ОН)=XOR ОН,-1= -(OН) -1 :)

    У меня тёща была ассемблерщицей. Замечательной души человек.







    Из-за MMX покупать не стоит. Вообще MMX (если не про оптимизацию говорить а про систему команд) вещь удивительно простая, проще чем базовый набор целочисленных команд. Там те же логические команды что и в целочисленном

    (одна другая а одной нет)- вся разница что в мнемонике стоит P вначале (не XOR а PXOR, не OR а POR) и операнд 64х битный. Команды упаковки и распаковки и несколько арифметических. Из свойств нужно понять лишь только, что такое "насыщение" (это когда число не влазит - пишут максимально возможное которое влезет, в отличии от традиционных целочисленных команд, где пишут младшие биты результата). Например (пусть восемь бит операнд)

    Арифметически(бинарные числа)

    1000 0000+1000 0000=1 0000 0000

    т.е. получим 9и битное число

    Но у нас скорее всего в компьютере при 8и битных операндах и запись результата будет 8и битная.

    Так вот в целочисленной модульной арифметике будет

    1000 0000+1000 0000 = 0000 0000

    т.е. результат для 8и битного приемника обрезается по модулю 2<sup>8</sup>.

    А если арифметика с насыщением то

    1000 0000+1000 0000 = 1111 1111

    если результат не влазит в 8 бит - пишется максимальное число какое влезет. (Типа дайте ему столько золота сколько он может унести)
     
  19. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine


    В старом издании и инструкции 16-битные, но теория не стареет. Эта книга помогает понять суть архитектуры. Обычно авторы излагают что-то вроде "есть ещё такая, вот, микроинструкция, с помощью которой можно посчитать A - B..." А в книге Хайда объясняется зачем вообще существует именно такая инструкция, почему A - B, а не B - A и т.д. в том же духе. Я частенько перечитываю отдельные главы (там и про оптимизацию есть!) и всё время нахожу что-то новое. А конкретно про MMX/SSE можно прочитать в справочниках и статьях Intel/AMD. Агнера Фога не забудьте. Но это всё на засыпку.
     
  20. The Svin

    The Svin New Member

    Публикаций:
    0
    Регистрация:
    6 июл 2003
    Сообщения:
    665
    Адрес:
    Russia
    Согласен, на пока для азбуки - это лучшая книга. Лучшее продолжение Inner Loops. Фиг найдёшь, мне помог один мой замечательный друг :)