Anechka

Тема в разделе "Машинное отделение", создана пользователем krey, 27 июн 2006.

  1. NS Нефёдов Сергей

    • Заслуженный
    • Ветеран
    • Старожил
    Рег.:
    02.05.2006
    Сообщения:
    6.811
    Симпатии:
    96
    Репутация:
    3
    Адрес:
    Санкт-Петербург
    Оффлайн
    Перехожу на Си, в полтора-два раза падает быстродействие на Делфи из-за плохой оптимизации.
    (Хотя на всякий случай проверю на шашечном генераторе)
    Плохо работает inline, и постоянно норовит засунуть переменную в память, хотя есть свободные регистры.
    Регистровые переменные вроде объявить в Делфи нельзя.
  2. bankuss Александр

    • Заслуженный
    • Участник
    • Старожил
    Рег.:
    24.05.2006
    Сообщения:
    1.084
    Симпатии:
    38
    Репутация:
    6
    Оффлайн
    NS а в СИ разве можно напрямую объявить регистровую переменную? я тут одну реализацию Си "крутил" и такого не видел (или плохо смотрел).
  3. WinPooh В.М.

    • Команда форума
    Рег.:
    13.02.2006
    Сообщения:
    9.491
    Симпатии:
    3.120
    Репутация:
    95
    Адрес:
    Москва
    Оффлайн
    Надо не реализации крутить, а в стандарт языка глянуть :)
    И увидеть там ключевое слово register.
    http://tigcc.ticalc.org/doc/keywords.html#register

    Но при этом надо помнить, что это только рекомендация компилятору, которой он может и не последовать.
  4. NS Нефёдов Сергей

    • Заслуженный
    • Ветеран
    • Старожил
    Рег.:
    02.05.2006
    Сообщения:
    6.811
    Симпатии:
    96
    Репутация:
    3
    Адрес:
    Санкт-Петербург
    Оффлайн
    В том-то и дело. что в Си легко можно, а в Делфи увы...
    А она (Делфя) не одну, а вдруг скопом 4 байтовых переменных запихнула по одному адресу в памяти, и ничего не могу поделать. :( Но закачал Intel 9.1 Компилятор (с сайта Интел) - посмотрю как он справится... :)
  5. WinPooh В.М.

    • Команда форума
    Рег.:
    13.02.2006
    Сообщения:
    9.491
    Симпатии:
    3.120
    Репутация:
    95
    Адрес:
    Москва
    Оффлайн
    Ты случайно от них адрес брать не пытался? :)
  6. NS Нефёдов Сергей

    • Заслуженный
    • Ветеран
    • Старожил
    Рег.:
    02.05.2006
    Сообщения:
    6.811
    Симпатии:
    96
    Репутация:
    3
    Адрес:
    Санкт-Петербург
    Оффлайн
    Нет конечно :)
  7. WildCat Коршунов Игорь

    • Команда форума
    Рег.:
    04.05.2006
    Сообщения:
    3.599
    Симпатии:
    4
    Репутация:
    0
    Адрес:
    Гомель
    Оффлайн
    Бесплатный? Сколько весит?

    Кстати, пользоваться ключевыми словами типа register не советую, т.к. компилятор лучше разберется куда что запихнуть (тем более Intel).
  8. NS Нефёдов Сергей

    • Заслуженный
    • Ветеран
    • Старожил
    Рег.:
    02.05.2006
    Сообщения:
    6.811
    Симпатии:
    96
    Репутация:
    3
    Адрес:
    Санкт-Петербург
    Оффлайн
    Ну я же могу попробовать и так и так... (насчет register), но я же навернzrf лучше компилятора знаю какие переменные чаще используются :) Но в любом случае можно попробовать по-разному.
    Лицензия бесплатная на месяц.
    Весит 154 МБ (161 731 971 байт)
  9. NS Нефёдов Сергей

    • Заслуженный
    • Ветеран
    • Старожил
    Рег.:
    02.05.2006
    Сообщения:
    6.811
    Симпатии:
    96
    Репутация:
    3
    Адрес:
    Санкт-Петербург
    Оффлайн
  10. atoku Модератор

    • Команда форума
    Рег.:
    05.02.2006
    Сообщения:
    2.949
    Симпатии:
    9
    Репутация:
    0
    Адрес:
    USA
    Оффлайн
    А спорил-то как! :) Правильный выбор лучше сделать до конца контрольного года :) Осталось сесть программить на Линукс. Там даже интел-компилятор бесплатный навсегда, а не на месяц, а gcc на AMD рвет всех (и интел тоже) как тузик грелку, ибо его оптимизация для этих процев разрабатывалась... в AMD ;)
  11. NS Нефёдов Сергей

    • Заслуженный
    • Ветеран
    • Старожил
    Рег.:
    02.05.2006
    Сообщения:
    6.811
    Симпатии:
    96
    Репутация:
    3
    Адрес:
    Санкт-Петербург
    Оффлайн
    Прикольно Интеловский компилятор компилирует...
    Код наугад (просто проверка)

    Код:
    unsigned __int8 kolNS;
    __inline void genLine(unsigned __int8 i,__int8 nap){
    kolNS+=nap;
    kolNS+=i;
    }
    
    void genmove(void)
    {
      kolNS=0;
     genLine(32,-15);
     genLine(64,-15);
     genLine(96,-15);
     genLine(113,-15);
     genLine(115,-15);
     genLine(117,-15);
     genLine(115,-17);
     genLine(117,-17);
     genLine(119,-17);
     genLine(87,-17);
     genLine(55,-17);
     genLine(113,-17);
     genLine(23,-17);
    }
    
    int main(int argc, char* argv[])
    {
      DWORD k;
    
     k=timeGetTime();
    
     for (long int i=0; i <= 10000000; i++) {
      genmove();
     }
    k=timeGetTime() -k;
    printf("%d",k);
      return 0;
    }
    Интеловский компилятор - 31мс, никакие параметры не меняют результат.
    Билдер - 918мс... Тоже параметры оптимизации на результат не влияют...
  12. atoku Модератор

    • Команда форума
    Рег.:
    05.02.2006
    Сообщения:
    2.949
    Симпатии:
    9
    Репутация:
    0
    Адрес:
    USA
    Оффлайн
    Нафиг такие тесты! Билдер много времени тратит на начальный запуск. Все надо прокрутить в цикле на миллион итераций.

    Но все равно, Интел конечно выиграет с большим отрывом, но не таким большим.;

    Пока ты измерил оверхед, а не выполнение кода. А вот в Линуксе есть отличные профайлеры на халяву :)
  13. NS Нефёдов Сергей

    • Заслуженный
    • Ветеран
    • Старожил
    Рег.:
    02.05.2006
    Сообщения:
    6.811
    Симпатии:
    96
    Репутация:
    3
    Адрес:
    Санкт-Петербург
    Оффлайн
    k=timeGetTime();

    for (long int i=0; i <= 10000000; i++) {
    genmove();
    }
    k=timeGetTime() -k;

    10 миллионов итераций, время засекается строкой в программе - k=timeGetTime;
    //
    Запись ходов (в структуру) - в два раза быстрее у Интеловского компилятора.
    Если так дело пойдет дальше - то миллион генераций из начальной позиции, с проверкой на возможность взятий (в этом основная идея - тихие позиции встречаются в несколько раз чаще, чем позиции со взятиями, а я придумал как быстро совместить генерацию с проверкой на взятия (практически без замедления генерации)) будет быстрее, чем за 300мс (в русских шашках) - скорость генератора получается весьма большая - получится быстрее, чем у Каллисто.
  14. WildCat Коршунов Игорь

    • Команда форума
    Рег.:
    04.05.2006
    Сообщения:
    3.599
    Симпатии:
    4
    Репутация:
    0
    Адрес:
    Гомель
    Оффлайн
    Для этого примера должны влиять запрет/разрешение инлайнов. И если вообще отключить оптимизацию.
    Обычно для самого быстрого варианта надо ставить calling convention: fastcall (но в этом примере оно ни на что не повлияет) и inline попытаться расставлять вручную.

    Исторически Intel всегда в был примерно в два раза быстрее, чем Borland.
  15. NS Нефёдов Сергей

    • Заслуженный
    • Ветеран
    • Старожил
    Рег.:
    02.05.2006
    Сообщения:
    6.811
    Симпатии:
    96
    Репутация:
    3
    Адрес:
    Санкт-Петербург
    Оффлайн
    Так оно и есть. Кстати Делфи выдает более быстрый код, чем Билдер.
    Инлайны у меня расставлены - в Билдере (и в Делфях тоже) их иногда лучше убирать (криво отрабатывают) - Интелу лучше раставить (правильно отрабатывает)
    static не пробовал, но нормальный компилятор сам должен уметь,
    и Билдер намертво проваливается на Switch/Case... Совсем не умеет - еще в два раза проседает по скорости. (итоговая с case в 4 раза медленней чем intel)
    Пример у меня есно уже совсем другой - дело пошло, к синтаксису уже привык :)
    /O3, /Ob2 не ускоряют.
  16. atoku Модератор

    • Команда форума
    Рег.:
    05.02.2006
    Сообщения:
    2.949
    Симпатии:
    9
    Репутация:
    0
    Адрес:
    USA
    Оффлайн
    У gcc ускоряют. static лучше таки ставить для inline, если тело включено в header. Иначе при попытке вставить этот файл в два разных из того же проекта, получится ошибка при линковании очевидно.
  17. NS Нефёдов Сергей

    • Заслуженный
    • Ветеран
    • Старожил
    Рег.:
    02.05.2006
    Сообщения:
    6.811
    Симпатии:
    96
    Репутация:
    3
    Адрес:
    Санкт-Петербург
    Оффлайн
    Кстати, родной компилятор VC++ 8 - дает код тоже (как и Билдер) медленней чем на Делфи... Тоже раза в полтора. Из трех сишных компиляторов только Интеловский дает очень быстрый код, более быстрый чем в Делфи.
  18. Binary Учаcтник

    • Участник
    Рег.:
    27.08.2006
    Сообщения:
    135
    Симпатии:
    0
    Репутация:
    0
    Адрес:
    Мытищи
    Оффлайн
    порой интернет получше ...
    самый быстрый в совокупности VC++ 8
  19. Binary Учаcтник

    • Участник
    Рег.:
    27.08.2006
    Сообщения:
    135
    Симпатии:
    0
    Репутация:
    0
    Адрес:
    Мытищи
    Оффлайн
  20. NS Нефёдов Сергей

    • Заслуженный
    • Ветеран
    • Старожил
    Рег.:
    02.05.2006
    Сообщения:
    6.811
    Симпатии:
    96
    Репутация:
    3
    Адрес:
    Санкт-Петербург
    Оффлайн
    В этом тесте я вижу VC++ Шестой, а не восьмой. icl вообще пятый... Делфи шестой...

    Как ни странно, языки, которые (по сложившемуся мнению) должны были стать аутсайдерами, таковыми не оказались. Правда, у старичка C++ есть одно преимущество ? модификатор inline. Он позволяет указать компилятору, что тело метода нужно подставлять в точку вызова.

    А после этой фразы - афтара, Статью, Тесты и ссылку - фтопку!

    После тестирования скорости вызова пустого метода (процедуры) Всё становится понятно...
    Кстати даже у них победил пятый интеловский компилятор. (я правда говорю о 9.1, а не о пятом)
  21. atoku Модератор

    • Команда форума
    Рег.:
    05.02.2006
    Сообщения:
    2.949
    Симпатии:
    9
    Репутация:
    0
    Адрес:
    USA
    Оффлайн
    Intel, gcc, IBM, Portland Group на худой конец. Не пользуйте всякое барахло для прибамбасников вот и все ;) .
  22. Binary Учаcтник

    • Участник
    Рег.:
    27.08.2006
    Сообщения:
    135
    Симпатии:
    0
    Репутация:
    0
    Адрес:
    Мытищи
    Оффлайн
    :) на том же сайте в том же разделе есть и VC 7.0 , кажется
  23. Fruit Александр

    • Заслуженный
    • Участник
    • Старожил
    Рег.:
    12.02.2006
    Сообщения:
    2.201
    Симпатии:
    64
    Репутация:
    3
    Оффлайн
    Давно хотел спросить. А простые смертные могут самостоятельно скомпилировать какие-нить исходники, фрукта например?
  24. TopicStarter Overlay

    krey Михаил Кройтор

    • Команда форума
    Рег.:
    10.04.2006
    Сообщения:
    3.709
    Симпатии:
    50
    Репутация:
    1
    Адрес:
    Кишинев
    Оффлайн
    легко :) причем фрукт очень легко компилится, потому что очень грамотно написан.
  25. NS Нефёдов Сергей

    • Заслуженный
    • Ветеран
    • Старожил
    Рег.:
    02.05.2006
    Сообщения:
    6.811
    Симпатии:
    96
    Репутация:
    3
    Адрес:
    Санкт-Петербург
    Оффлайн
    на том же сайте в том же разделе есть и VC 7.0 , кажется

    На том сайте наверно достаточно той статьи, ссылка на которую указана. :)
    Очень многое говорит о квалификации авторов...
  26. Fruit Александр

    • Заслуженный
    • Участник
    • Старожил
    Рег.:
    12.02.2006
    Сообщения:
    2.201
    Симпатии:
    64
    Репутация:
    3
    Оффлайн
    Хм..интересно... А каким компилятором и какова основная последовательность действий? Просто я пытался Тогу скомпилировать - не вышло, хотя было смешно. :)
  27. TopicStarter Overlay

    krey Михаил Кройтор

    • Команда форума
    Рег.:
    10.04.2006
    Сообщения:
    3.709
    Симпатии:
    50
    Репутация:
    1
    Адрес:
    Кишинев
    Оффлайн
    без проблем компилируется gсс. основная последовательность действий... скачиваешь Dev-CPP, устанавливаешь, в нем создаешь пустой проект (сишный), добавляешь все файлы к проекту и компилируешь :)
  28. atoku Модератор

    • Команда форума
    Рег.:
    05.02.2006
    Сообщения:
    2.949
    Симпатии:
    9
    Репутация:
    0
    Адрес:
    USA
    Оффлайн
    Я лично компилировал тогу и главрука с разными ключами и без каких-либо проблем. И даже менял их исходники.
  29. bankuss Александр

    • Заслуженный
    • Участник
    • Старожил
    Рег.:
    24.05.2006
    Сообщения:
    1.084
    Симпатии:
    38
    Репутация:
    6
    Оффлайн
    нашел у себя Intel C++ 8.0... надо опробовать
  30. NS Нефёдов Сергей

    • Заслуженный
    • Ветеран
    • Старожил
    Рег.:
    02.05.2006
    Сообщения:
    6.811
    Симпатии:
    96
    Репутация:
    3
    Адрес:
    Санкт-Петербург
    Оффлайн
  31. NS Нефёдов Сергей

    • Заслуженный
    • Ветеран
    • Старожил
    Рег.:
    02.05.2006
    Сообщения:
    6.811
    Симпатии:
    96
    Репутация:
    3
    Адрес:
    Санкт-Петербург
    Оффлайн
  32. Booot Учаcтник

    • Участник
    Рег.:
    05.06.2006
    Сообщения:
    140
    Симпатии:
    0
    Репутация:
    0
    Оффлайн
    во WBEC чуть-чуть поднажать и во втрой дивизион можешь войти. В принципе надо ведь лишь чуток везения.
  33. NS Нефёдов Сергей

    • Заслуженный
    • Ветеран
    • Старожил
    Рег.:
    02.05.2006
    Сообщения:
    6.811
    Симпатии:
    96
    Репутация:
    3
    Адрес:
    Санкт-Петербург
    Оффлайн
    Не выйду - я к отбору не напишу новую версию, так как пишу шашки :)
    Так что даже если войду в пятерку - вылечу в отборе.
  34. Booot Учаcтник

    • Участник
    Рег.:
    05.06.2006
    Сообщения:
    140
    Симпатии:
    0
    Репутация:
    0
    Оффлайн
    Да, пожалуй последнии движки во втором дивизионе таки посильнее будут Анечки. Ну а я все -таки пытаюсь найти усиление, чтоб компанию Игорю в первом дивизионе составить. Но что-то усиление то ли не ищется, то ли уже было найдено ранее :)
  35. NS Нефёдов Сергей

    • Заслуженный
    • Ветеран
    • Старожил
    Рег.:
    02.05.2006
    Сообщения:
    6.811
    Симпатии:
    96
    Репутация:
    3
    Адрес:
    Санкт-Петербург
    Оффлайн
    Вроде и так составишь :)
    Я усиление вижу, слишком многого в программе не хватает, но принял решение переписать на Си++, и уже после шашек. :(

Поделиться этой страницей