1. Друзья, в это тяжёлое и непонятное для всех нас время мы просим вас воздержаться от любых упоминаний политики на форуме, - этим ситуации не поможешь, а только возникнут ненужные ссоры и обиды. Это касается также шуток и юмора на тему конфликта. Пусть войны будут только виртуальными, а политики решают разногласия дипломатическим путём. С уважением, администрация Old-Games.RU.

    Скрыть объявление
  2. Пожалуйста, внимательно прочитайте правила раздела.
  3. Если Вы видите это сообщение, значит, вы ещё не зарегистрировались на нашем форуме.

    Зарегистрируйтесь, если вы хотите принять участие в обсуждениях. Перед регистрацией примите к сведению:
    1. Не регистрируйтесь с никами типа asdfdadhgd, 354621 и тому подобными, не несущими смысловой нагрузки (ник должен быть читаемым!): такие пользователи будут сразу заблокированы!
    2. Не регистрируйте больше одной учётной записи. Если у вас возникли проблемы при регистрации, то вы можете воспользоваться формой обратной связи внизу страницы.
    3. Регистрируйтесь с реально существующими E-mail адресами, иначе вы не сможете завершить регистрацию.
    4. Обязательно ознакомьтесь с правилами поведения на нашем форуме, чтобы избежать дальнейших конфликтов и непонимания.
    С уважением, администрация форума Old-Games.RU
    Скрыть объявление

Кодерский уголок

Тема в разделе "Мастерская", создана пользователем Dimouse, 10 сен 2006.

  1. Dimouse King of Mice

    Dimouse

    Администратор Переводчик

    Регистрация:
    18 апр 2003
    Сообщения:
    35.153
    В соответствии с назначением раздела, в этой теме предполагается обсуждать конкретные вопросы, которые у вас возникают при создании своих программ (в частности - игр), помогать другим, размещать полезные ссылки на статьи и материалы, которые могут пригодиться другим.

    Что здесь не допускается:
    - беспорядочный флуд на всевозможные темы, в том числе общие обсуждения языков программирования без конкретики (карается по статье "флуд и оффтопик" *),
    - разжигания на темы "что лучше, Си или Си++ и чем они отличаются?", "какой язык программирования лучше X или Y?" и т.п. (карается по статье "флейм и участие в холиварах" *),
    - мерение пиписьками в стиле "я лучше программирую" или "ты не умеешь программировать" (карается по статье "оскорбление участников и их взглядов" *).

    Всё это допускается в специально созданной теме "Беседка для программистов или «Бутерброд с кодом».

    * по усмотрению модератора также возможно применение блокировки в данной теме.

    Оригинальное сообщение
     
    Последнее редактирование модератором: 24 ноя 2014
    CY8R4Y нравится это.
  2.  
  3. hidefromkgb

    hidefromkgb

    Регистрация:
    20 дек 2011
    Сообщения:
    145
    nop, дадите ссылку тогда, хорошо?
    А то по нашим местным тестам на векторизацию, Clang пока проигрывает GCC в производительности.
     
  4. nop

    nop

    Регистрация:
    5 дек 2014
    Сообщения:
    2.297
    hidefromkgb, Steel Rat, напишу, пожалуй, короткое резюме тут.
    Суть теста была простейшая. Сгенерено штук 30 версий кода обмена двух половинок 32-битного числа и еще до кучи несколько функций обмена байтов в 32 и 16-битном слове. 39 всего. Речи о simd, автовекторизации и разворачивании циклов не шло вообще и были приняты меры во избежание активации данных фич. Весь код бенчмаркался через RDTSC и анализировался в Interactive Disassembler.
    Только умница clang сумел упростить буквально все версии до одной инструкции. GCC упростил почти все, но сам код цикла бенчмарка, содержащего эту инструкцию, сгенерил менее эффективный, чем три других компилятора. ICC сократил треть, но сгенерил наиболее эффективный цикл из пяти инструкций для тех, с которыми справился. Цикл этот на i7 Haswell выполнялся ровно за такт на итерацию. MSVC правильно сократил лишь четверть, причем ICC и MSVC тупили на разном коде. Но несколько однотактовых циклов сгенерил и он.
    К сожалению, Linux тестировался на другой машине, с процессором на Westmere, т.к. в Virtualbox RDTSC толком не работает. Все варианты цикла у clang там отработали за 2 такта на итерацию, но зато он справился и с теми, которые у Intel работали за 16. clang признан победителем из за огромного отрыва(в разы) по суммарному времени. Ну и, когда цикл будет развернут, преимущество Intel испарится полностью.
    Вывод: clang умнее всех справился с упрощением выражений. ICC - лучше всех в микрооптимизациях под intel-архитектуру, но высокоуровневая оптимизация не годится clang в подметки и даже от GCC отстает.
     
    Последнее редактирование: 1 апр 2015
  5. Steel Rat Stainless

    Steel Rat

    Регистрация:
    28 дек 2006
    Сообщения:
    3.260
    nop, ну а параметры сборки, оптимизации и всё такое?
    У меня вот GCC обычно медленнее, но совсем не потому что медленнее, а потому что я на нём лишь тестирую сборку на предмет компиляции в posix среде. Т.е. ничего не настраиваю, только включаю все ворнинги. Поэтому неудивительно, что у него программа работает медленнее, чем сборка релиза под виндой с включенной оптимизацией.
    clang вообще в глаза не видел.
     
  6. nop

    nop

    Регистрация:
    5 дек 2014
    Сообщения:
    2.297
    Steel Rat, ну ты, конечно, думаешь, что озаботившись множеством вещей, что перечислил выше и настроив (забыл упомянуть) еще и кросскомпиляцию 32 и 64-битных версий, забыл написать хотя бы -O3? :) в wintel же выставлена в студии полная оптимизация с предпочтением быстрого кода и все флажки, имеющие отношение к скорости, кроме автовекторизации. Разрешено самые последние наборы команд, вплоть до того, что Ida отказывается дизассемблировать некоторые фрагменты clang-овского бинарника.
     
  7. Рыжий Тигра Сам себе «пират»

    Рыжий Тигра

    Регистрация:
    3 май 2012
    Сообщения:
    1.823
    2 All: есть маленькая, но дурацкая сверхзадачка.
    Имеется стереозапись, в ней по центру - речь, а по всей стереобазе намазано музыки и шумов. Надо речь оставить, а всё остальное по возможности удалить или хотя бы прилично ослабить. Простейший навскидку алгоритм - для каждого канала перегнать отсчёты в частоты (преобразование фурье), взять для каждой частоты минимальное значение из двух каналов, перегнать обратно в отсчёты; это оставит центр стереобазы неизменным, крайние точки задавит начисто, промежуточные - пропорционально расстоянию от центра. (Вариант: частоты, отличающиеся на больше чем сколько-то процентов, вообще обнулять нафиг, - тогда останется только узкий сектор по центру, но могут пропадать куски речи просто потому что совпали по частоте с проснувшимя в углу стереобазы саксофоном. :-( )
    Более радикальный вариант: перегнать отсчёты в частоты сразу для обоих каналов как комплексные числа; выбросить частоты, у которых "фи" не вписывается в определённый диапазон углов; перегнать обратно в отсчёты. (Кстати, играми с допустимым диапазоном углов можно реализовать и минусовку.)
    Кто может такое напрограммить? Я увы - ни с fftw в частности, ни с БПФ вообще, ни с комплексными числами настолько плотно не дружу. :-(
    Или, возможно, есть уже готовые проги такого рода и я ломлюсь в открытую дверь?
     
  8. nop

    nop

    Регистрация:
    5 дек 2014
    Сообщения:
    2.297
    Рыжий Тигра, сразу скажу, сам не делал. Но задача в общем случае ИМХО простого решения не имеет. И даже решения средней сложности :) А программ, которые просто пользуются тем, что речь обычно занимает строго центр и имеет ограниченную полосу частот, по моему, навалом.
     
  9. Рыжий Тигра Сам себе «пират»

    Рыжий Тигра

    Регистрация:
    3 май 2012
    Сообщения:
    1.823
    Есть такое. Но они даже минусовку качественную слепить не могут. :-( А интересно копнуть как раз в частотную область - хотя бы по соображениям физиологии, т.к. у нашего слуха - частотная природа: улитка - детектор-резонатор на несколько десятков тысяч узких частотных полос, ушные раковины - резонаторы, характеристики коих зависят от направления прихода звука в сагиттальной плоскости...
     
  10. Рыжий Тигра Сам себе «пират»

    Рыжий Тигра

    Регистрация:
    3 май 2012
    Сообщения:
    1.823
    Пришлось попрограммироваться с 16-сегментным ЖК-индикатором, вот таким:

    [​IMG]

    Сочинил к нему шрифт с кириллицей. Делюсь, вдруг кому понадобится - в игре имитировать ЖК-индикатор или ещё под что:

    [​IMG]

    Для цифр специально скопировал начертания с 7-сегментного индикатора, чтобы быстрее узнавались. :-)
    Буквы "Ё" и "Ў" не влезают хоть тресни. :-( "№", "$", "*", "=", буквы "Б", "Д", "Й" и особенно "Ц", "Щ", "Ї" на себя не очень похожи, но догадаться можно.

    PS:

    [​IMG]

    :-)))))
     

    Вложения:

    Последнее редактирование: 8 май 2015
    SAS, A.P.$lasH и AxXxB нравится это.
  11. AxXxB неадекват

    AxXxB

    Хелпер Переводчик

    Регистрация:
    13 ноя 2006
    Сообщения:
    1.663
    Если что, вот довольно простая реализация прямого БПФ, написанная мной пару лет назад: раскрыть. Обратного, к сожалению, нет, но он там вроде как-то почти так же делается, не помню уже.
     
    nop, Рыжий Тигра и A.P.$lasH нравится это.
  12. Steel Rat Stainless

    Steel Rat

    Регистрация:
    28 дек 2006
    Сообщения:
    3.260
  13. Alex Kagansky

    Alex Kagansky

    Регистрация:
    17 дек 2007
    Сообщения:
    3.054
    Про недостатки скромно умолчено. :)
    А они есть. Во-первых, надо писать обертки. Во-вторых, при ошибке в деструкторе ничего сделать нельзя.
     
  14. Steel Rat Stainless

    Steel Rat

    Регистрация:
    28 дек 2006
    Сообщения:
    3.260
    Ээээ, дык RAII - это и оно есть?!
    У тебя часто ошибки в деструкторе вызванном delete?
     
  15. Alex Kagansky

    Alex Kagansky

    Регистрация:
    17 дек 2007
    Сообщения:
    3.054
    Ну да. :)

    Александреску вот тут жаловался, например: http://www.drdobbs.com/cpp/generic-change-the-way-you-write-excepti/184403758
    (раздел "Solution 3: The Real Approach" :) )

    Ну, это недостаток подхода, как ни крути, пусть и не часто вылазиет.
    Если освобождать ресурсы не в деструкторе, то на ошибку можно среагировать.
     
    Последнее редактирование: 15 июн 2015
  16. Steel Rat Stainless

    Steel Rat

    Регистрация:
    28 дек 2006
    Сообщения:
    3.260
    А я вот хочу пожаловаться на Александреску, это из-за него на свет появилось исчадие ада именуемое бустом.
    RAII - не панацея, да. А наговнокодить с простыми указателями можно ваще миллионом способов.
    Я не заставляю, а ваще речь о C++ и не использовать, в С++, конструктор и деструктор - это прямой путь к Победе над Системой! =)
    Давай прекратим этот бесполезный спор? Меня вот в статье по этой ссылке тоже обозвали всячески (я, панимаешь, считаю, что это личное дело программиста), но не спорю с автором, а сюда ссылку кинул ибо написано толково.
     
  17. Alex Kagansky

    Alex Kagansky

    Регистрация:
    17 дек 2007
    Сообщения:
    3.054
    Согласен, статья хорошая.
     
  18. Steel Rat Stainless

    Steel Rat

    Регистрация:
    28 дек 2006
    Сообщения:
    3.260
    Экспериментировал с созданием кроссплатформенного приложения (пока только Windows/Android), в результате появилось компактная C++ либа, позволяющая писать, собственно, приложения. Я не делал упор на 2D/3D, либа только создаёт контекст от OpenGL (ES) 2.0 и до OpenGL 4.5. А уж как контекст будет использован - на усмотрение пользователя. Сейчас она могёт:
    • создание окна
    • обработка основных событий
    • создание графического контекста
    • примитивная поддержка спрайтов (это в сильно черновом виде)
    В общем, исходники нужны? Для начинающих на Андроиде NDK - это ваще подарок, а не либа. =)
     
  19. Bato-San Чеширский волк-киборг

    Bato-San

    Регистрация:
    24 июн 2010
    Сообщения:
    14.136
    @Steel Rat, я не уловил что сильно сложного в создании контекста, но в целом считаю твой вопрос излишним - снабди лицензией и документацией, обеспечь сопровождение и поддержку и, безусловно - выкладывай.
     
  20. Steel Rat Stainless

    Steel Rat

    Регистрация:
    28 дек 2006
    Сообщения:
    3.260
    @Bato-San, твой ответ не засчитывается.
     
  21. Kristobal Hozevich Hunta Реликтовый гоминид

    Kristobal Hozevich Hunta

    Регистрация:
    24 апр 2006
    Сообщения:
    1.207
    Други, есть фрагмент в исходниках уважаемой зарубежной конторы:

    const char *idCompiler:рunctuation[] = {
    "+=", "-=", "*=", "/=", "%=", "&=", "|=", "++", "--",
    "&&", "||", "<=", ">=", "==", "!=", "::", ";", ",",
    "~", "!", "*", "/", "%", "(", ")", "-", "+",
    "=", "[", "]", ".", "<", ">" , "&", "|", ":", NULL
    };
    ...
    const char **ptr;
    ...

    Но при компиляции выдает ошибку C2440: значение типа const char*[37] нельзя присвоить char ** в следующей строке:

    for( ptr = punctuation; *ptr != NULL; ptr++ )

    Причем ошибка, видимо, возникает только у меня, т.к. народ компилирует и помалкивает.

    Как устранить ошибку?
     
    Последнее редактирование: 26 июн 2015
  22. Steel Rat Stainless

    Steel Rat

    Регистрация:
    28 дек 2006
    Сообщения:
    3.260
    Kristobal Hozevich Hunta нравится это.
  1. На этом сайте используются файлы cookie, чтобы персонализировать содержимое, хранить Ваши предпочтения и держать Вас авторизованным в системе, если Вы зарегистрировались.
    Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie.
    Скрыть объявление