cppasm У меня Athllon XP Мне кажется, что у подавляющего большинства пользователей есть SSE. Хотя если тебе не лень писать две версии программы - пожалуйста это приветствуется P.S. Атлон только теоретически может выполнять по 3 инструкции за такт. Это вовсе не значит, что твой код можно так оптимизировать.
Программа одна - в ней разные ветки кода выполняются в зависимости от того на каком процессоре запущено. А вообще я не сторонник подхода "у всех есть". А если я возьму и сделаю код под SSE2 (на Athlon XP нету) - я не думаю что ты сильно обрадуешся если программа которая тебе нравится и работает на P4 у тебя на AthlonXP откажется работать, при том что вычислительных мощностей для неё хватает. К тому же я не весь код пишу в нескольких вариантах, а узкие места в мультимедиа обработке. Да это понятно.
Для тех кто на бронепоезде. 3DNow! используется только если при старте был обнаружен процессор AMD с поддержкой 3DNow!. Если нет 3DNow! но есть SSE - используется SSE. Если нет ничего - используется fixed point реализация на обычных командах x86.
exst, cppasm правильно всё говрит. Делает таблицы функций и прыгает на них динамически в зависимости от возможностей процессора. только думается проверка должна не от 3dnow начинаться, а от самых последних наборов инструкций к самым младшим.
Интресерно на счет тригонометрии: Если требуется вычеслить более 300000 sin или cos, то как лучше поступить? использовать FPU или SSE? Просто интересно...
По барабану. И то и другое будет медленно. Я так и делаю. Точнее почти так Для разных реализаций замеряется число тактов по RDTSC и проверка идёт от самых быстрых к самым медленным.
в рантайме скорость меряется? если да, тогда эт уже обучаемая программа получается. JIT прям) Иначе же скорость именно от той машины, где этот самый rdtsc и делается. И всё-таки проверка на расширения первична, измерение скорости всех доступных вторична.
Нет, не во время запуска. Я меряю до окончательной сборки и потом в зависимости от результатов выставляю приоритет используемых реализаций. Неа. Разница есть конечно, но небольшая. Например на P4 SSE работает быстрее чем на Athlon. А так - RDTSC меряет в тактах, так что тактовая частота значения не имеет. Достаточно сделать статистику по ряду архитектур Intel и AMD и усреднить результаты. Так на этой проверке всё и посторено. От статистики скоростей исполнения зависит только в каком порядке эти расширения проверяются на наличие.
Обработка изображений, сжатие/распаковка jpeg. Там же написано было Профилировщик это - AMD CodeAnalyst. Ещё есть Intel VTune если интересно - но он немного не бесплатный