Задача о 19 ферзях.

Тема в разделе "WASM.A&O", создана пользователем Intro, 18 мар 2010.

  1. Intro

    Intro Member

    Публикаций:
    0
    Регистрация:
    29 авг 2009
    Сообщения:
    97
    Из-за падения форума всё по удалялось, ну да ладно.
    Вот ещё одна ревизия, код переделан на манер С (используется только библиотека Windows и внутренний System), используется инструкция POPCNT, так что на старых процессорах не заработает. Код не слишком оптимизирован, в точности функция popcnt не инлайн, странно, ключевое слово inline есть, но в Делфи 6 не работает. Хотя конечно надо бы переделать на C/C++, но это потом.
     

    Вложения:

  2. Intro

    Intro Member

    Публикаций:
    0
    Регистрация:
    29 авг 2009
    Сообщения:
    97
    В общем, переписал сначала на UASM, потом на С++, за одно создал учётку на M$... короче вот.
    https://nanobot-amk-yandex.visualstudio.com/problem19queen/_git/problem19queen
    Не знаю, быдлокод или нормально, но лучше чем паскале. Что интересно, на асме чуть быстрей всё равно, но компилятор VS C++2017 не плох, создал почти такой же эффективный код, только один такт за итерацию проиграл. Не захотел использовать lea [b0+b1-CountBitBlock * 2].
    Так что, это доказывает хорошую эффективность компиляторов, конечно, при условии, что код изначально оптимальный, но при этом, можно хоть чуть чуть, да и ускорить код, если переписать на ассемблере.
    ЗЫ
    Проект можно использовать для теста как и компиляторов, так и самих процессоров.
    ЗЫЫ
    Да, ещё можно добавить многопроцессорность, но это потом, может быть.
     
  3. Intro

    Intro Member

    Публикаций:
    0
    Регистрация:
    29 авг 2009
    Сообщения:
    97
    Тест версии 2010.
    https://yadi.sk/d/5UrOtbiMTO_oNQ
    Asm x86 UASM
    https://yadi.sk/d/EkE_f_RYP6lm8Q
    Посмотрим как там ноутбуке Lenova. Хотя там процессор какой-то медленный.
    --- Сообщение объединено, 16 ноя 2018 ---
    Asm x86 UASM
    https://yadi.sk/d/35YQVnU7bt1RcQ
    Выше я ошибся, там для х64
    --- Сообщение объединено, 17 ноя 2018 ---
    12.2 тактов celeron B820 и атлон 11 Х640 11.5 тактов.
     
  4. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    3.863
    скорей всего компиль довески вставил (типа рантаймы, защита стека..)
     
  5. Intro

    Intro Member

    Публикаций:
    0
    Регистрация:
    29 авг 2009
    Сообщения:
    97
    На самом деле сам компилятор создал не оптимальный код для AMD Athlon ll, возможно такой код будет работать быстро на современных Intolах, но на моём процессоре код работает меннее быстро. Хотя компилятор VSC++ работает довольно хорошо, особенно с быдло-кодом. VS C++ 2010 с быдло-кодом работает хуже, но для этой программы создал код более оптимальный.
    ЗЫ
    Кстати, код С++ сгенерировал Hex-Ray, плагин для IDA Pro, из кода на UASM. Я его почти не изменял.
    --- Сообщение объединено, 25 ноя 2018 ---
    ЗЫ
    И самое главное, в англонете такая задача фигурирует под названием "Peaceably Coexisting Armies of Queens". Они смогли ее решить, вроде, но у меня всё равно быстрей алгоритм получился.
     
    Последнее редактирование: 25 ноя 2018
  6. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    3.863
    Intro, я наибольшее ускорение получал с помощью полиморфных схем + использовал векторные регистры для кэширования переменных + подгонял последовательность команд под out-of-order execution == таким дикобразом из камня можно максимум выжимать, но асм-портянка получается сплошной страх и ужасть :)