"осторожно флейм!" (с) - "Согласен." (с)
Когда-то в своё время тоже задавался таким вопросом. Просто расскажу о своём "опыте". Было это в конце 90х прошлого тысячелетия. Тогда компы с 3х GHz процессорами и 2 GB RAM были не очень распространнены и всё казалось, что прогу надо оптимировать где и как только возможно. Ну а что быстрей асма? Будучи по натуре человеком сумневающимся во всём и вся принялся рыть инет. Сейчас уже не помню, что именно я нарыл (сайт, форум?), но это был какой-то ресурс "игрушечных" программеров. И у них в типсах я нашёл несколько советов по использованию ассемблерных вставок для повышения производительности (если конечно так можно перевести performance) единственно полезной оказалась ф-я "округления" вещественного типа, утверждалось, что она работает быстрей простого кастинга в int
inline int roundf(float x)
{
int n = 0;
__asm
{
fld x
fistp n
}
return n;
}
Пользуюсь её всегда когда надо перегонять например микрометры в экранные пиксели при отображении графики.
Хотя скорее по привычке, чем по необходимости. Тут ведь дело в том, что сегдняшние системы визуального программирования и практически неограниченные ресурсы расхолаживают современных программеров. Какой смысл делать асм вставки, экономя при этом парочку флопов, когда основной алгоритм не оптимирован?
Уж если хочется действительно добиться высокой производительности, то можно воспользоваться специальными программами - анализаторами. Толку от них гораздо больше, чем от асм-вставок.
зы Решил таки проверить, ведь столько лет юзаю. Для 10 000 000 получил след результаты (для статистики 4 раза
)
inline int roundf2(float x)
{
int n = 0;
n = (int)(x);
return n;
}
inline int roundf3(float x)
{
int n = 0;
n = (int)(x+0.5);
return n;
}
да и ещё с ф-ей ceil для сравнения сделал, она округляет в вещественные числа.
Система: P4 2GHz 1GB RAM WinXP Pro VS .NET 2003 Enterpr. Arch. SP1 7.1.6030
Debug компиляцияRes asm: 1109 msec
Res (int): 1500 msec
Res (int)+0.5: 1562 msec
Res ceil: 2235 msec
Res asm: 1079 msec
Res (int): 1500 msec
Res (int)+0.5: 1546 msec
Res ceil: 2219 msec
Res asm: 1062 msec
Res (int): 1516 msec
Res (int)+0.5: 1547 msec
Res ceil: 2250 msec
Res asm: 1094 msec
Res (int): 1485 msec
Res (int)+0.5: 1546 msec
Res ceil: 2219 msec
Release-компиляцияRes asm: 156 msec
Res (int): 406 msec
Res (int)+0.5: 422 msec
Res ceil: 312 msec
Res asm: 156 msec
Res (int): 406 msec
Res (int)+0.5: 422 msec
Res ceil: 312 msec
Res asm: 157 msec
Res (int): 406 msec
Res (int)+0.5: 422 msec
Res ceil: 328 msec
Res asm: 172 msec
Res (int): 406 msec
Res (int)+0.5: 406 msec
Res ceil: 328 msec
"Думайте сами, решайте сами: иметь или не иметь" (с)